diff --git a/.deployignore b/.deployignore deleted file mode 100644 index 56180bf5..00000000 --- a/.deployignore +++ /dev/null @@ -1,22 +0,0 @@ -.DS_Store -Thumbs.db -wp-cli.local.yml -node_modules/ -*.sql -*.tar.gz -*.zip -.phpunit.result.cache -Dockerfile -output.log -.github -tests -bin -composer.lock -.phpcs.xml -phpunit.xml -configure.php -DOCKER_ENV -phpunit.xml -tests -.phpcs -Makefile diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 115b12e2..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,25 +0,0 @@ -# Please see the documentation for all configuration options: -# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - - - package-ecosystem: "composer" - directory: "/" - schedule: - interval: "weekly" - - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - day: "saturday" - time: "09:00" - timezone: "America/New_York" - ignore: - - dependency-name: "@wordpress/*" diff --git a/.github/workflows/built-branch.yml b/.github/workflows/built-branch.yml deleted file mode 100644 index cc534404..00000000 --- a/.github/workflows/built-branch.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Create a -built branch - -on: - push: - branches: - - main - - develop - -jobs: - built-branch: - uses: alleyinteractive/.github/.github/workflows/built-branch.yml@main diff --git a/.github/workflows/built-release.yml b/.github/workflows/built-release.yml deleted file mode 100644 index d58c6614..00000000 --- a/.github/workflows/built-release.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Built Release - -on: - push: - branches: - - develop - -jobs: - built-release: - uses: alleyinteractive/.github/.github/workflows/built-release.yml@main - with: - composer_install: true - node: 20 diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml deleted file mode 100644 index 100e8643..00000000 --- a/.github/workflows/code-quality.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Code Quality - -on: - push: - branches: - - develop - -jobs: - phpstan: - uses: alleyinteractive/.github/.github/workflows/php-code-quality.yml@main - with: - php: '8.2' diff --git a/.github/workflows/coding-standards.yml b/.github/workflows/coding-standards.yml deleted file mode 100644 index 4adcf4ef..00000000 --- a/.github/workflows/coding-standards.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Coding Standards - -on: - push: - branches: - - develop - pull_request: - # Uncomment and edit the following to run on a schedule. - # schedule: - # - cron: '0 5 * * 0' # Run once per week at 5am UTC on Sundays. - -jobs: - coding-standards: - uses: alleyinteractive/.github/.github/workflows/php-coding-standards.yml@main - with: - php: '8.2' diff --git a/.github/workflows/dependabot-auto-approve.yml b/.github/workflows/dependabot-auto-approve.yml deleted file mode 100644 index e2119dec..00000000 --- a/.github/workflows/dependabot-auto-approve.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: dependabot-auto-approve -on: - pull_request: - -permissions: - pull-requests: write - contents: write - -jobs: - dependabot: - uses: alleyinteractive/.github/.github/workflows/dependabot-auto-approve.yml@main diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml deleted file mode 100644 index aaed13d4..00000000 --- a/.github/workflows/dependabot-auto-merge.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: dependabot-auto-merge -on: pull_request_target - -permissions: - pull-requests: write - contents: write - -jobs: - dependabot: - uses: alleyinteractive/.github/.github/workflows/dependabot-auto-merge.yml@main diff --git a/.github/workflows/node-tests.yml b/.github/workflows/node-tests.yml deleted file mode 100644 index 668b078a..00000000 --- a/.github/workflows/node-tests.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Node Tests - -on: - push: - branches: - - develop - pull_request: - # Uncomment and edit the following to run on a schedule. - # schedule: - # - cron: '15 5 * * 0' # Run once per week at 5:15am UTC on Sundays. - -jobs: - node-tests: - uses: alleyinteractive/.github/.github/workflows/node-tests.yml@main - with: - run-audit: true diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml deleted file mode 100644 index 213fbb43..00000000 --- a/.github/workflows/unit-test.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Testing Suite - -on: - push: - branches: - - develop - pull_request: - # Uncomment and edit the following to run on a schedule. - # schedule: - # - cron: '30 5 * * 0' # Run once per week at 5:30am UTC on Sundays. - -jobs: - php-tests: - strategy: - matrix: - php: [8.0, 8.1, 8.2] - wordpress: ["latest"] - uses: alleyinteractive/.github/.github/workflows/php-tests.yml@main - with: - php: ${{ matrix.php }} - wordpress: ${{ matrix.wordpress }} diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml deleted file mode 100644 index 0cdea233..00000000 --- a/.github/workflows/update-changelog.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: "Update Changelog" - -on: - release: - types: [released] - -jobs: - update: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: main - - - name: Update Changelog - uses: stefanzweifel/changelog-updater-action@v1 - with: - latest-version: ${{ github.event.release.name }} - release-notes: ${{ github.event.release.body }} - - - name: Commit updated CHANGELOG - uses: stefanzweifel/git-auto-commit-action@v5 - with: - branch: main - commit_message: Update CHANGELOG - file_pattern: CHANGELOG.md diff --git a/.github/workflows/upgrade-wordpress-plugin.yml b/.github/workflows/upgrade-wordpress-plugin.yml deleted file mode 100644 index 22a35737..00000000 --- a/.github/workflows/upgrade-wordpress-plugin.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Update WordPress Plugin - -on: - schedule: - - cron: '0 6 1 * *' # Run on the first day of every month at 6am UTC. - -permissions: - contents: write - pull-requests: write - -jobs: - update-plugin: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: alleyinteractive/action-update-wordpress-plugin@v2.0.0 - with: - plugin-file: 'plugin.php' - upgrade-npm-dependencies: "true" diff --git a/.gitignore b/.gitignore index a8545793..56180bf5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,22 @@ -# Build files -build -vendor -composer.lock -node_modules - -# Log files -*.log - -# Cache files -.phpcs/*.json -.phpunit.result.cache - -# Ignore temporary OS files .DS_Store -.DS_Store? -.Spotlight-V100 -.Trashes -ehthumbs.db Thumbs.db -.thumbsdb - -# IDE files -*.code-workspace -.idea -.vscode +wp-cli.local.yml +node_modules/ +*.sql +*.tar.gz +*.zip +.phpunit.result.cache +Dockerfile +output.log +.github +tests +bin +composer.lock +.phpcs.xml +phpunit.xml +configure.php +DOCKER_ENV +phpunit.xml +tests +.phpcs +Makefile diff --git a/.phpcs.xml b/.phpcs.xml deleted file mode 100644 index 50c58dfc..00000000 --- a/.phpcs.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - PHP_CodeSniffer standard for create-wordpress-plugin. - - - - - - - - - - - - - - - - - - - - - build/ - vendor/ - tests/ - - - - - - - - - - - - - - - - - - src/assets.php - blocks - build - entries - - - - src/assets.php - - diff --git a/Makefile b/Makefile deleted file mode 100644 index d9e033f8..00000000 --- a/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -setup: - php ./configure.php - -.PHONY: setup diff --git a/bin/create-block/defaultValues.js b/bin/create-block/defaultValues.js deleted file mode 100644 index 5873f6f3..00000000 --- a/bin/create-block/defaultValues.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Default variables for scaffolding blocks. - * - * @see https://github.com/WordPress/gutenberg/blob/trunk/packages/create-block/docs/external-template.md#defaultvalues - */ -module.exports = { - namespace: 'wp-newsletter-builder', - plugin: false, - description: '', - dashicon: 'palmtree', - category: 'widgets', - editorScript: 'file:index.ts', - editorStyle: 'file:index.css', - style: ['file:style-index.css'], -}; diff --git a/bin/create-block/index.js b/bin/create-block/index.js deleted file mode 100644 index 229f29ff..00000000 --- a/bin/create-block/index.js +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env node - -const prompts = require('prompts'); -const path = require('path'); -const { sync: spawn } = require('cross-spawn'); - -const fs = require('fs'); - -// The directory where the blocks will be created relative to the current working directory. -const directoryName = 'blocks'; - -// Create the directory if it doesn't exist. -if (!fs.existsSync(directoryName)) { - fs.mkdirSync(directoryName); - // eslint-disable-next-line no-console - console.log(`Directory '${directoryName}' created successfully!`); - // Navigate to the directory to create the block. - process.chdir(directoryName); -} else { - process.chdir(directoryName); -} - -/** - * Prompts the user to select a block language (TypeScript or JavaScript) - * and then create a block using the @wordpress/create-block package. - */ -(async () => { - const response = await prompts({ - type: 'select', - name: 'blockLanguage', - message: 'Create a block in TypeScript or JavaScript?', - choices: [ - { title: 'TypeScript', value: 'typescript' }, - { title: 'JavaScript', value: 'javascript' }, - ], - initial: 0, - }); - - const language = response?.blockLanguage || null; - - if (language) { - // Set the block language as an environment variable - // so it can be used in the selectTemplates.js file. - process.env.blockLanguage = language; - - // Create a block using the @wordpress/create-block package. - const result = spawn( - 'npx', - [ - '@wordpress/create-block', - /** - * This argument specifies an external npm package as a template. - * In this case, the selectTemplates.js file is used as a the entry for the template. - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-create-block/#template - */ - '--template', - path.join(__dirname, 'selectTemplates.js'), - /** - * With this argument, the create-block package runs in - * "No plugin mode" which only scaffolds block files into the current directory. - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-create-block/#no-plugin - */ - '--no-plugin', - ], - { stdio: 'inherit' }, - ); - - process.exit(result.status); - } else { - process.exit(1); - } -})(); diff --git a/bin/create-block/selectTemplates.js b/bin/create-block/selectTemplates.js deleted file mode 100644 index 8c1a933b..00000000 --- a/bin/create-block/selectTemplates.js +++ /dev/null @@ -1,29 +0,0 @@ -const path = require('path'); -const defaultValues = require('./defaultValues'); - -const { blockLanguage } = process.env; - -/** - * Custom variants for scaffolding blocks. - * - * Currently there are only two variants: - * - static: A block that scaffolds a save.js file - * that saves the content and markup directly in the post content. - * - dynamic: A block that scaffolds a render.php template - * which can be used to render the block on the front-end. - * - * @see https://github.com/WordPress/gutenberg/blob/trunk/packages/create-block/docs/external-template.md#external-project-templates - */ -module.exports = { - defaultValues, - variants: { - static: { - blockTemplatesPath: path.join(__dirname, 'templates', blockLanguage), - }, - dynamic: { - blockTemplatesPath: path.join(__dirname, 'templates', blockLanguage), - render: 'file:render.php', - }, - }, - blockTemplatesPath: path.join(__dirname, 'templates', blockLanguage), -}; diff --git a/bin/create-block/templates/javascript/edit.jsx.mustache b/bin/create-block/templates/javascript/edit.jsx.mustache deleted file mode 100644 index d10cda51..00000000 --- a/bin/create-block/templates/javascript/edit.jsx.mustache +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Retrieves the translation of text. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/ - */ -import { __ } from '@wordpress/i18n'; - -/** - * React hook that is used to mark the block wrapper element. - * It provides all the necessary props like the class name. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops - */ -import { useBlockProps } from '@wordpress/block-editor'; - -/** - * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. - * Those files can contain any CSS code that gets applied to the editor. - * - * @see https://www.npmjs.com/package/@wordpress/scripts#using-css - */ -import './index.scss'; - -/** - * The edit function describes the structure of your block in the context of the - * editor. This represents what the editor will render when the block is used. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit - * - * @return {WPElement} Element to render. - */ -export default function Edit() { - return ( -

- { __('Block Title – hello from the editor!', 'wp-newsletter-builder') } -

- ); -} diff --git a/bin/create-block/templates/javascript/index.js.mustache b/bin/create-block/templates/javascript/index.js.mustache deleted file mode 100644 index 4f309fc6..00000000 --- a/bin/create-block/templates/javascript/index.js.mustache +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Registers a new block provided a unique name and an object defining its behavior. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ - */ -import { registerBlockType } from '@wordpress/blocks'; - -/** - * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. - * All files containing `style` keyword are bundled together. The code used - * gets applied both to the front of your site and to the editor. - * - * @see https://www.npmjs.com/package/@wordpress/scripts#using-css - */ -import './style.scss'; - -/** - * Internal dependencies - */ -import edit from './edit'; -{{#isStaticVariant}} -import save from './save'; -{{/isStaticVariant}} -import metadata from './block.json'; - -/** - * Every block starts by registering a new block type definition. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ - */ -registerBlockType( - metadata.name, - { - edit, - {{#isStaticVariant}} - save, - {{/isStaticVariant}} - }, -); diff --git a/bin/create-block/templates/javascript/index.scss.mustache b/bin/create-block/templates/javascript/index.scss.mustache deleted file mode 100644 index 76e79841..00000000 --- a/bin/create-block/templates/javascript/index.scss.mustache +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The following styles get applied inside the editor only. - * - * All imported CSS files are bundled into one chunk named after the entry point, - * which defaults to index.js, and thus the file created becomes index.css. - * This is for styles used only in the editor. - * - * Replace them with your own styles or remove the file completely. - */ - -.wp-block-{{namespace}}-{{slug}} { - border: 1px dotted #f00; -} diff --git a/bin/create-block/templates/javascript/save.jsx.mustache b/bin/create-block/templates/javascript/save.jsx.mustache deleted file mode 100644 index 15a1c598..00000000 --- a/bin/create-block/templates/javascript/save.jsx.mustache +++ /dev/null @@ -1,26 +0,0 @@ -{{#isStaticVariant}} -/** - * React hook that is used to mark the block wrapper element. - * It provides all the necessary props like the class name. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops - */ -import { useBlockProps } from '@wordpress/block-editor'; - -/** - * The save function defines the way in which the different attributes should - * be combined into the final markup, which is then serialized by the block - * editor into `post_content`. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#save - * - * @return {WPElement} Element to render. - */ -export default function save() { - return ( -

- {'{{title}} - hello from the saved content!'} -

- ); -} -{{/isStaticVariant}} diff --git a/bin/create-block/templates/javascript/style.scss.mustache b/bin/create-block/templates/javascript/style.scss.mustache deleted file mode 100644 index b76ce02b..00000000 --- a/bin/create-block/templates/javascript/style.scss.mustache +++ /dev/null @@ -1,18 +0,0 @@ -/** - * The following styles get applied both on the front of your site - * and in the editor. - * - * Imported style.css file(s) (applies to SASS and SCSS extensions) - * get bundled into one style-index.css file that is meant to be - * used both on the front-end and in the editor. - * - * Replace them with your own styles or remove the file completely. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#block-styles - */ - -.wp-block-{{namespace}}-{{slug}} { - background-color: #21759b; - color: #fff; - padding: 2px; -} diff --git a/bin/create-block/templates/typescript/edit.tsx.mustache b/bin/create-block/templates/typescript/edit.tsx.mustache deleted file mode 100644 index 060f33d4..00000000 --- a/bin/create-block/templates/typescript/edit.tsx.mustache +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Retrieves the translation of text. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/ - */ -import { __ } from '@wordpress/i18n'; - -/** - * React hook that is used to mark the block wrapper element. - * It provides all the necessary props like the class name. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops - */ -import { useBlockProps } from '@wordpress/block-editor'; - -/** - * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. - * Those files can contain any CSS code that gets applied to the editor. - * - * @see https://www.npmjs.com/package/@wordpress/scripts#using-css - */ -import './index.scss'; - -/** - * The edit function describes the structure of your block in the context of the - * editor. This represents what the editor will render when the block is used. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit - * - * @return {WPElement} Element to render. - */ -export default function Edit() { - return ( -

- { __('Block Title - hello from the editor!', 'wp-newsletter-builder') } -

- ); -} diff --git a/bin/create-block/templates/typescript/index.scss.mustache b/bin/create-block/templates/typescript/index.scss.mustache deleted file mode 100644 index 76e79841..00000000 --- a/bin/create-block/templates/typescript/index.scss.mustache +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The following styles get applied inside the editor only. - * - * All imported CSS files are bundled into one chunk named after the entry point, - * which defaults to index.js, and thus the file created becomes index.css. - * This is for styles used only in the editor. - * - * Replace them with your own styles or remove the file completely. - */ - -.wp-block-{{namespace}}-{{slug}} { - border: 1px dotted #f00; -} diff --git a/bin/create-block/templates/typescript/index.ts.mustache b/bin/create-block/templates/typescript/index.ts.mustache deleted file mode 100644 index 8598b1cf..00000000 --- a/bin/create-block/templates/typescript/index.ts.mustache +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Registers a new block provided a unique name and an object defining its behavior. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ - */ -import { registerBlockType } from '@wordpress/blocks'; - -/** - * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. - * All files containing `style` keyword are bundled together. The code used - * gets applied both to the front of your site and to the editor. - * - * @see https://www.npmjs.com/package/@wordpress/scripts#using-css - */ -import './style.scss'; - -/** - * Internal dependencies - */ -import edit from './edit'; -{{#isStaticVariant}} -import save from './save'; -{{/isStaticVariant}} -import metadata from './block.json'; - -/** - * Every block starts by registering a new block type definition. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ - */ -registerBlockType( - /* @ts-expect-error Provided types are inaccurate to the actual plugin API. */ - metadata, - { - apiVersion: 2, - edit, - {{#isStaticVariant}} - save, - {{/isStaticVariant}} - title: metadata.title, - }, -); diff --git a/bin/create-block/templates/typescript/save.tsx.mustache b/bin/create-block/templates/typescript/save.tsx.mustache deleted file mode 100644 index 15a1c598..00000000 --- a/bin/create-block/templates/typescript/save.tsx.mustache +++ /dev/null @@ -1,26 +0,0 @@ -{{#isStaticVariant}} -/** - * React hook that is used to mark the block wrapper element. - * It provides all the necessary props like the class name. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops - */ -import { useBlockProps } from '@wordpress/block-editor'; - -/** - * The save function defines the way in which the different attributes should - * be combined into the final markup, which is then serialized by the block - * editor into `post_content`. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#save - * - * @return {WPElement} Element to render. - */ -export default function save() { - return ( -

- {'{{title}} - hello from the saved content!'} -

- ); -} -{{/isStaticVariant}} diff --git a/bin/create-block/templates/typescript/style.scss.mustache b/bin/create-block/templates/typescript/style.scss.mustache deleted file mode 100644 index b76ce02b..00000000 --- a/bin/create-block/templates/typescript/style.scss.mustache +++ /dev/null @@ -1,18 +0,0 @@ -/** - * The following styles get applied both on the front of your site - * and in the editor. - * - * Imported style.css file(s) (applies to SASS and SCSS extensions) - * get bundled into one style-index.css file that is meant to be - * used both on the front-end and in the editor. - * - * Replace them with your own styles or remove the file completely. - * - * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#block-styles - */ - -.wp-block-{{namespace}}-{{slug}} { - background-color: #21759b; - color: #fff; - padding: 2px; -} diff --git a/build/blocks/index.asset.php b/build/blocks/index.asset.php new file mode 100644 index 00000000..5e1bec6d --- /dev/null +++ b/build/blocks/index.asset.php @@ -0,0 +1 @@ + array(), 'version' => 'd96e9f9cacae7b3ed9e8'); diff --git a/build/blocks/index.css b/build/blocks/index.css new file mode 100644 index 00000000..b381335a --- /dev/null +++ b/build/blocks/index.css @@ -0,0 +1,9 @@ +.main,.mso,body{background-color:#fff;color:#000;margin:0;padding:0;-webkit-text-size-adjust:100%}figure{margin:0}figure,img{display:block}img{height:auto;line-height:100%;max-width:100%;outline:none;text-decoration:none}a img,img{border:0}.image-fix{display:block}table,td{border-collapse:collapse} +.wp-newsletter-builder-container{margin:0 auto;max-width:600px;min-width:320px;width:320px;width:calc(28000% - 167400px)}.has-text-align-left{text-align:left}.has-text-align-center{text-align:center}.has-text-align-right{text-align:right}.wp-newsletter-builder__ad{margin:30px 0}table.wrapper{background-color:#fff;min-width:320px;table-layout:fixed;width:100%}.liveintent-disclosures img{display:inline} +h2,h3,h4,h5,h6{font-weight:700;line-height:1.3;margin:0}h2,h2 span,h3,h3 span,h4,h4 span,h5,h5 span,h6,h6 span{font-family:Georgia,serif}h2{font-size:22px}h3{font-size:20px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px} +.wp-block-image{margin-bottom:0}.aligncenter>img{margin-left:auto;margin-right:auto}figure{margin:0} +p{font-size:16px;line-height:1.33;margin:0}p,p span{font-family:Georgia,serif} +.wp-block-button{margin:0 auto;padding:10px 14px;text-align:center}.wp-block-button a{font-size:14px;padding:0;text-decoration:none}.wp-block-button a.read-more-button{padding:10px 14px}.wp-block-button.wp-newsletter-builder__subscribe{max-width:none;text-transform:uppercase;width:100%}.wp-block-button.wp-newsletter-builder__subscribe .wp-element-button{display:block}.wp-block-button__link,.wp-element-button{background-color:inherit;color:inherit;font-size:14px;padding:0;-webkit-text-size-adjust:none}.read-more-button{background-color:#0279af;border-radius:4px;color:#fff;font-size:14px;line-height:24px;padding:10px 14px;text-align:center;text-decoration:none;-webkit-text-size-adjust:none} +.wp-block-separator,hr{background-color:#979797;border:0;height:2px;margin:30px auto;max-width:40px}.wp-block-separator.is-style-wide,hr.is-style-wide{max-width:none} +ol,ul{font-size:16px;line-height:1.3;margin:0}ol,ol span,ul,ul span{font-family:Georgia,serif} +a,em,s,strong,sub,sup{font-family:Georgia,serif} diff --git a/.phpcs/.gitkeep b/build/blocks/index.js similarity index 100% rename from .phpcs/.gitkeep rename to build/blocks/index.js diff --git a/build/button/block.json b/build/button/block.json new file mode 100644 index 00000000..8730a3b2 --- /dev/null +++ b/build/button/block.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wp-newsletter-builder/button", + "version": "0.1.0", + "title": "Newsletter Button", + "allowedBlocks": [ + "core/button" + ], + "category": "design", + "icon": "button", + "description": "Button wrapper that provides email-friendly enhancements", + "textdomain": "button", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "textColor": { + "type": "string", + "default": "#fff" + }, + "bgColor": { + "type": "string", + "default": "#0279af" + }, + "radius": { + "type": "string", + "default": "0" + }, + "btnWidth": { + "type": "string", + "default": "max-content" + } + } +} \ No newline at end of file diff --git a/build/button/index.asset.php b/build/button/index.asset.php new file mode 100644 index 00000000..fa3665ff --- /dev/null +++ b/build/button/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-i18n'), 'version' => '3d19c83ed6c4dc7b84e3'); diff --git a/build/button/index.js b/build/button/index.js new file mode 100644 index 00000000..c9663593 --- /dev/null +++ b/build/button/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e=window.React,t=window.wp.blocks,o=window.wp.blockEditor,n=window.wp.i18n,r=window.wp.components,l=window.wp.data,i=e=>(e=>(0,l.useSelect)((t=>t(o.store).getBlocks(e)),[e]))(e).map((e=>e.attributes)),s=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"wp-newsletter-builder/button","version":"0.1.0","title":"Newsletter Button","allowedBlocks":["core/button"],"category":"design","icon":"button","description":"Button wrapper that provides email-friendly enhancements","textdomain":"button","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"textColor":{"type":"string","default":"#fff"},"bgColor":{"type":"string","default":"#0279af"},"radius":{"type":"string","default":"0"},"btnWidth":{"type":"string","default":"max-content"}}}');(0,t.registerBlockType)(s,{apiVersion:2,edit:function(t){let{attributes:{bgColor:l="#0279af",btnWidth:s="max-content",radius:a="0",textColor:c="#fff"},setAttributes:d,clientId:u}=t;const p=i(u),w=p[0]?.style?.border?.radius||"0",m=p[0]?.width,b={backgroundColor:l,borderRadius:a,color:c,margin:"0 auto",width:s};return(0,e.useEffect)((()=>{d({radius:w,btnWidth:void 0!==m?`${m}%`:"max-content"})}),[w,m]),(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.InspectorControls,null,(0,e.createElement)(r.PanelBody,{title:"Button Color"},(0,e.createElement)("h3",null,(0,n.__)("Background color","wp-newsletter-builder")),(0,e.createElement)(r.ColorPicker,{color:l,onChange:e=>d({bgColor:e})}),(0,e.createElement)("h3",null,(0,n.__)("Text color","wp-newsletter-builder")),(0,e.createElement)(r.ColorPicker,{color:c,onChange:e=>d({textColor:e})}))),(0,e.createElement)("div",{...(0,o.useBlockProps)({style:b})},(0,e.createElement)(o.InnerBlocks,{template:[["core/button"]],templateLock:"all"})))},save:()=>{const t=o.useBlockProps.save();return(0,e.createElement)("div",{...t},(0,e.createElement)(o.InnerBlocks.Content,null))},title:s.title})}(); \ No newline at end of file diff --git a/bin/create-block/templates/typescript/index.php.mustache b/build/button/index.php similarity index 73% rename from bin/create-block/templates/typescript/index.php.mustache rename to build/button/index.php index 746ae541..78ee2fc9 100644 --- a/bin/create-block/templates/typescript/index.php.mustache +++ b/build/button/index.php @@ -1,6 +1,6 @@ . + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_button_color = $attributes['textColor'] ?? ''; +$wp_newsletter_builder_button_bg_color = $attributes['bgColor'] ?? ''; +$wp_newsletter_builder_button_radius = $attributes['radius'] ?? ''; +$wp_newsletter_builder_button_width = $attributes['btnWidth'] ?? ''; +?> + +
+ +
diff --git a/build/divider/block.json b/build/divider/block.json new file mode 100644 index 00000000..f6a5c042 --- /dev/null +++ b/build/divider/block.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wp-newsletter-builder/divider", + "version": "0.1.0", + "title": "Divider", + "category": "design", + "icon": "editor-insertmore", + "description": "Divider with configurable height", + "textdomain": "divider", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "elHeight": { + "type": "number", + "default": 8 + }, + "elColor": { + "type": "string", + "default": "#000" + } + } +} \ No newline at end of file diff --git a/build/divider/index.asset.php b/build/divider/index.asset.php new file mode 100644 index 00000000..3d0147aa --- /dev/null +++ b/build/divider/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '5abb8465436c680741ef'); diff --git a/build/divider/index.js b/build/divider/index.js new file mode 100644 index 00000000..0ddf61d0 --- /dev/null +++ b/build/divider/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e=window.wp.blocks,t=window.React,i=window.wp.i18n,l=window.wp.components,r=window.wp.blockEditor,n=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"wp-newsletter-builder/divider","version":"0.1.0","title":"Divider","category":"design","icon":"editor-insertmore","description":"Divider with configurable height","textdomain":"divider","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"elHeight":{"type":"number","default":8},"elColor":{"type":"string","default":"#000"}}}');(0,e.registerBlockType)(n,{apiVersion:2,edit:function(e){let{attributes:{elHeight:n=8,elColor:o="#000"},setAttributes:s}=e;return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{...(0,r.useBlockProps)()},(0,t.createElement)("div",{style:{backgroundColor:o,height:`${n}px`}})),(0,t.createElement)(r.InspectorControls,null,(0,t.createElement)(l.PanelBody,{title:(0,i.__)("Settings","wp-newsletter-builder"),initialOpen:!0},(0,t.createElement)(l.RangeControl,{label:(0,i.__)("Height (in pixels)","wp-newsletter-builder"),help:(0,i.__)("Minimum value: 1px. Maximum value: 24px.","wp-newsletter-builder"),value:n,onChange:e=>s({elHeight:e}),min:1,max:24,resetFallbackValue:8,allowReset:!0}),(0,t.createElement)("h3",null,(0,i.__)("Divider color","wp-newsletter-builder")),(0,t.createElement)(l.ColorPicker,{color:o,onChange:e=>s({elColor:e})}))))},title:n.title})}(); \ No newline at end of file diff --git a/build/divider/index.php b/build/divider/index.php new file mode 100644 index 00000000..1a37156d --- /dev/null +++ b/build/divider/index.php @@ -0,0 +1,21 @@ +. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_divider_height = $attributes['elHeight'] ?? null; +$wp_newsletter_builder_divider_color = $attributes['elColor'] ?? null; +?> + +
diff --git a/build/editor/index.asset.php b/build/editor/index.asset.php new file mode 100644 index 00000000..5b0d36d4 --- /dev/null +++ b/build/editor/index.asset.php @@ -0,0 +1 @@ + array(), 'version' => '8badec54d2c9f4cbb928'); diff --git a/build/editor/index.css b/build/editor/index.css new file mode 100644 index 00000000..95d4ea23 --- /dev/null +++ b/build/editor/index.css @@ -0,0 +1 @@ +.block-editor .editor-styles-wrapper{margin:0 auto;max-width:600px;min-width:320px;width:320px;width:calc(28000% - 167400px)}.block-editor .editor-styles-wrapper .block-editor-rich-text__editable{font-family:Georgia,serif}.block-editor .editor-styles-wrapper :where(body .is-layout-flow)>*{margin-block-start:0}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h2,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h3,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h4,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h5,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h6{font-family:Georgia,serif;font-weight:700;line-height:1.3;margin:0}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h2 span,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h3 span,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h4 span,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h5 span,.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h6 span{font-family:Georgia,serif}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h2{font-size:22px}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h3{font-size:20px}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h4{font-size:18px}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h5{font-size:16px}.block-editor .editor-styles-wrapper .block-editor-block-list__layout.is-root-container h6{font-size:14px}.block-editor .editor-styles-wrapper .wp-block-image{margin-bottom:0}.block-editor .editor-styles-wrapper .aligncenter>img{margin-left:auto;margin-right:auto}.block-editor .editor-styles-wrapper figure{margin:0}.block-editor .editor-styles-wrapper p{font-family:Georgia,serif;font-size:16px;line-height:1.33;margin:0}.block-editor .editor-styles-wrapper p span{font-family:Georgia,serif}.block-editor .editor-styles-wrapper .wp-block-button{margin:0 auto;padding:10px 14px;text-align:center}.block-editor .editor-styles-wrapper .wp-block-button a{font-size:14px;padding:0;text-decoration:none}.block-editor .editor-styles-wrapper .wp-block-button a.read-more-button{padding:10px 14px}.block-editor .editor-styles-wrapper .wp-block-button.wp-newsletter-builder__subscribe{max-width:none;text-transform:uppercase;width:100%}.block-editor .editor-styles-wrapper .wp-block-button.wp-newsletter-builder__subscribe .wp-element-button{display:block}.block-editor .editor-styles-wrapper .wp-block-button__link,.block-editor .editor-styles-wrapper .wp-element-button{background-color:inherit;color:inherit;font-size:14px;padding:0;-webkit-text-size-adjust:none}.block-editor .editor-styles-wrapper .read-more-button{background-color:#0279af;border-radius:4px;color:#fff;font-size:14px;line-height:24px;padding:10px 14px;text-align:center;text-decoration:none;-webkit-text-size-adjust:none}.block-editor .editor-styles-wrapper .wp-block-separator,.block-editor .editor-styles-wrapper hr{background-color:#979797;border:0;height:2px;margin:30px auto;max-width:40px}.block-editor .editor-styles-wrapper .wp-block-separator.is-style-wide,.block-editor .editor-styles-wrapper hr.is-style-wide{max-width:none}.block-editor .editor-styles-wrapper ol,.block-editor .editor-styles-wrapper ul{font-family:Georgia,serif;font-size:16px;line-height:1.3;margin:0}.block-editor .editor-styles-wrapper a,.block-editor .editor-styles-wrapper em,.block-editor .editor-styles-wrapper ol span,.block-editor .editor-styles-wrapper s,.block-editor .editor-styles-wrapper strong,.block-editor .editor-styles-wrapper sub,.block-editor .editor-styles-wrapper sup,.block-editor .editor-styles-wrapper ul span{font-family:Georgia,serif} diff --git a/build/editor/index.js b/build/editor/index.js new file mode 100644 index 00000000..e69de29b diff --git a/build/email-settings/block.json b/build/email-settings/block.json new file mode 100644 index 00000000..55b5e928 --- /dev/null +++ b/build/email-settings/block.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/email-settings", + "version": "0.1.0", + "title": "Email Settings", + "category": "design", + "icon": "email", + "description": "Block to set the email subject, preview text, and list.", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php" +} \ No newline at end of file diff --git a/build/email-settings/index.asset.php b/build/email-settings/index.asset.php new file mode 100644 index 00000000..30f8795c --- /dev/null +++ b/build/email-settings/index.asset.php @@ -0,0 +1 @@ + array('lodash', 'react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => 'd1011d1f268d36094759'); diff --git a/build/email-settings/index.css b/build/email-settings/index.css new file mode 100644 index 00000000..1199faf3 --- /dev/null +++ b/build/email-settings/index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-email-settings{background-color:#eee;padding:5px} diff --git a/build/email-settings/index.js b/build/email-settings/index.js new file mode 100644 index 00000000..c4db7e84 --- /dev/null +++ b/build/email-settings/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,t={841:function(e,t,r){var n=window.wp.blocks,l=r(609),a=r.n(l),s=window.wp.i18n,o=window.wp.components,i=window.wp.apiFetch,c=r.n(i),d=window.wp.element,u=window.wp.data,p=window.wp.blockEditor,m=r(848);!function(e,{insertAt:t}={}){if(!e||typeof document>"u")return;let r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===t&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}(".rmsc{--rmsc-main: #4285f4;--rmsc-hover: #f1f3f5;--rmsc-selected: #e2e6ea;--rmsc-border: #ccc;--rmsc-gray: #aaa;--rmsc-bg: #fff;--rmsc-p: 10px;--rmsc-radius: 4px;--rmsc-h: 38px}.rmsc *{box-sizing:border-box;transition:all .2s ease}.rmsc .gray{color:var(--rmsc-gray)}.rmsc .dropdown-content{position:absolute;z-index:1;top:100%;width:100%;padding-top:8px}.rmsc .dropdown-content .panel-content{overflow:hidden;border-radius:var(--rmsc-radius);background:var(--rmsc-bg);box-shadow:0 0 0 1px #0000001a,0 4px 11px #0000001a}.rmsc .dropdown-container{position:relative;outline:0;background-color:var(--rmsc-bg);border:1px solid var(--rmsc-border);border-radius:var(--rmsc-radius)}.rmsc .dropdown-container[aria-disabled=true]:focus-within{box-shadow:var(--rmsc-gray) 0 0 0 1px;border-color:var(--rmsc-gray)}.rmsc .dropdown-container:focus-within{box-shadow:var(--rmsc-main) 0 0 0 1px;border-color:var(--rmsc-main)}.rmsc .dropdown-heading{position:relative;padding:0 var(--rmsc-p);display:flex;align-items:center;width:100%;height:var(--rmsc-h);cursor:default;outline:0}.rmsc .dropdown-heading .dropdown-heading-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.rmsc .clear-selected-button{cursor:pointer;background:none;border:0;padding:0;display:flex}.rmsc .options{max-height:260px;overflow-y:auto;margin:0;padding-left:0}.rmsc .options li{list-style:none;margin:0}.rmsc .select-item{box-sizing:border-box;cursor:pointer;display:block;padding:var(--rmsc-p);outline-offset:-1px;outline-color:var(--rmsc-primary)}.rmsc .select-item:hover{background:var(--rmsc-hover)}.rmsc .select-item.selected{background:var(--rmsc-selected)}.rmsc .no-options{padding:var(--rmsc-p);text-align:center;color:var(--rmsc-gray)}.rmsc .search{width:100%;position:relative;border-bottom:1px solid var(--rmsc-border)}.rmsc .search input{background:none;height:var(--rmsc-h);padding:0 var(--rmsc-p);width:100%;outline:0;border:0;font-size:1em}.rmsc .search input:focus{background:var(--rmsc-hover)}.rmsc .search-clear-button{cursor:pointer;position:absolute;top:0;right:0;bottom:0;background:none;border:0;padding:0 calc(var(--rmsc-p) / 2)}.rmsc .search-clear-button [hidden]{display:none}.rmsc .item-renderer{display:flex;align-items:baseline}.rmsc .item-renderer input{margin:0 5px 0 0}.rmsc .item-renderer.disabled{opacity:.5}.rmsc .spinner{animation:rotate 2s linear infinite}.rmsc .spinner .path{stroke:var(--rmsc-border);stroke-width:4px;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}\n");var h={allItemsAreSelected:"All items are selected.",clearSearch:"Clear Search",clearSelected:"Clear Selected",noOptions:"No options",search:"Search",selectAll:"Select All",selectAllFiltered:"Select All (Filtered)",selectSomeItems:"Select...",create:"Create"},f={value:[],hasSelectAll:!0,className:"multi-select",debounceDuration:200,options:[]},b=a().createContext({}),w=({props:e,children:t})=>{let[r,n]=(0,l.useState)(e.options);return(0,l.useEffect)((()=>{n(e.options)}),[e.options]),(0,m.jsx)(b.Provider,{value:{t:t=>{var r;return(null==(r=e.overrideStrings)?void 0:r[t])||h[t]},...f,...e,options:r,setOptions:n},children:t})},v=()=>a().useContext(b),g={when:!0,eventTypes:["keydown"]};function x(e,t,r){let n=(0,l.useMemo)((()=>Array.isArray(e)?e:[e]),[e]),a=Object.assign({},g,r),{when:s,eventTypes:o}=a,i=(0,l.useRef)(t),{target:c}=a;(0,l.useEffect)((()=>{i.current=t}));let d=(0,l.useCallback)((e=>{n.some((t=>e.key===t||e.code===t))&&i.current(e)}),[n]);(0,l.useEffect)((()=>{if(s&&typeof window<"u"){let e=c?c.current:window;return o.forEach((t=>{e&&e.addEventListener(t,d)})),()=>{o.forEach((t=>{e&&e.removeEventListener(t,d)}))}}}),[s,o,n,c,t])}var y={ARROW_DOWN:"ArrowDown",ARROW_UP:"ArrowUp",ENTER:"Enter",ESCAPE:"Escape",SPACE:"Space"},_=()=>(0,m.jsxs)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"dropdown-search-clear-icon gray",children:[(0,m.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,m.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),k=({checked:e,option:t,onClick:r,disabled:n})=>(0,m.jsxs)("div",{className:"item-renderer "+(n?"disabled":""),children:[(0,m.jsx)("input",{type:"checkbox",onChange:r,checked:e,tabIndex:-1,disabled:n}),(0,m.jsx)("span",{children:t.label})]}),S=({itemRenderer:e=k,option:t,checked:r,tabIndex:n,disabled:a,onSelectionChanged:s,onClick:o})=>{let i=(0,l.useRef)(),c=()=>{a||s(!r)};return x([y.ENTER,y.SPACE],(e=>{c(),e.preventDefault()}),{target:i}),(0,m.jsx)("label",{className:"select-item "+(r?"selected":""),role:"option","aria-selected":r,tabIndex:n,ref:i,children:(0,m.jsx)(e,{option:t,checked:r,onClick:e=>{c(),o(e)},disabled:a})})},E=({options:e,onClick:t,skipIndex:r})=>{let{disabled:n,value:l,onChange:a,ItemRenderer:s}=v();return(0,m.jsx)(m.Fragment,{children:e.map(((e,o)=>{let i=o+r;return(0,m.jsx)("li",{children:(0,m.jsx)(S,{tabIndex:i,option:e,onSelectionChanged:t=>((e,t)=>{n||a(t?[...l,e]:l.filter((t=>t.value!==e.value)))})(e,t),checked:!!l.find((t=>t.value===e.value)),onClick:e=>t(e,i),itemRenderer:s,disabled:e.disabled||n})},(null==e?void 0:e.key)||o)}))})},C=()=>{let{t:e,onChange:t,options:r,setOptions:n,value:a,filterOptions:s,ItemRenderer:o,disabled:i,disableSearch:c,hasSelectAll:d,ClearIcon:u,debounceDuration:p,isCreatable:h,onCreateOption:f}=v(),b=(0,l.useRef)(),w=(0,l.useRef)(),[g,k]=(0,l.useState)(""),[C,j]=(0,l.useState)(r),[N,O]=(0,l.useState)(""),[R,A]=(0,l.useState)(0),I=(0,l.useCallback)(((e,t)=>{let r;return function(...n){clearTimeout(r),r=setTimeout((()=>{e.apply(null,n)}),t)}})((e=>O(e)),p),[]),T=(0,l.useMemo)((()=>{let e=0;return c||(e+=1),d&&(e+=1),e}),[c,d]),P={label:e(g?"selectAllFiltered":"selectAll"),value:""},D=()=>{var e;O(""),k(""),null==(e=null==w?void 0:w.current)||e.focus()},L=e=>A(e);x([y.ARROW_DOWN,y.ARROW_UP],(e=>{switch(e.code){case y.ARROW_UP:B(-1);break;case y.ARROW_DOWN:B(1);break;default:return}e.stopPropagation(),e.preventDefault()}),{target:b});let W=async()=>{let e={label:g,value:g,__isNew__:!0};f&&(e=await f(g)),n([e,...r]),D(),t([...a,e])},B=e=>{let t=R+e;t=Math.max(0,t),t=Math.min(t,r.length+Math.max(T-1,0)),A(t)};(0,l.useEffect)((()=>{var e,t;null==(t=null==(e=null==b?void 0:b.current)?void 0:e.querySelector(`[tabIndex='${R}']`))||t.focus()}),[R]);let[F,H]=(0,l.useMemo)((()=>{let e=C.filter((e=>!e.disabled));return[e.every((e=>-1!==a.findIndex((t=>t.value===e.value)))),0!==e.length]}),[C,a]);(0,l.useEffect)((()=>{(async()=>s?await s(r,N):function(e,t){return t?e.filter((({label:e,value:r})=>null!=e&&null!=r&&e.toLowerCase().includes(t.toLowerCase()))):e}(r,N))().then(j)}),[N,r]);let M=(0,l.useRef)();x([y.ENTER],W,{target:M});let $=h&&g&&!C.some((e=>(null==e?void 0:e.value)===g));return(0,m.jsxs)("div",{className:"select-panel",role:"listbox",ref:b,children:[!c&&(0,m.jsxs)("div",{className:"search",children:[(0,m.jsx)("input",{placeholder:e("search"),type:"text","aria-describedby":e("search"),onChange:e=>{I(e.target.value),k(e.target.value),A(0)},onFocus:()=>{A(0)},value:g,ref:w,tabIndex:0}),(0,m.jsx)("button",{type:"button",className:"search-clear-button",hidden:!g,onClick:D,"aria-label":e("clearSearch"),children:u||(0,m.jsx)(_,{})})]}),(0,m.jsxs)("ul",{className:"options",children:[d&&H&&(0,m.jsx)(S,{tabIndex:1===T?0:1,checked:F,option:P,onSelectionChanged:e=>{let n=(e=>{let t=C.filter((e=>!e.disabled)).map((e=>e.value));if(e){let e=[...a.map((e=>e.value)),...t];return(s?C:r).filter((t=>e.includes(t.value)))}return a.filter((e=>!t.includes(e.value)))})(e);t(n)},onClick:()=>L(1),itemRenderer:o,disabled:i}),C.length?(0,m.jsx)(E,{skipIndex:T,options:C,onClick:(e,t)=>L(t)}):$?(0,m.jsx)("li",{onClick:W,className:"select-item creatable",tabIndex:1,ref:M,children:`${e("create")} "${g}"`}):(0,m.jsx)("li",{className:"no-options",children:e("noOptions")})]})]})},j=({expanded:e})=>(0,m.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"dropdown-heading-dropdown-arrow gray",children:(0,m.jsx)("path",{d:e?"M18 15 12 9 6 15":"M6 9L12 15 18 9"})}),N=()=>{let{t:e,value:t,options:r,valueRenderer:n}=v(),l=0===t.length,a=t.length===r.length,s=n&&n(t,r);return l?(0,m.jsx)("span",{className:"gray",children:s||e("selectSomeItems")}):(0,m.jsx)("span",{children:s||(a?e("allItemsAreSelected"):t.map((e=>e.label)).join(", "))})},O=({size:e=24})=>(0,m.jsx)("span",{style:{width:e,marginRight:"0.2rem"},children:(0,m.jsx)("svg",{width:e,height:e,className:"spinner",viewBox:"0 0 50 50",style:{display:"inline",verticalAlign:"middle"},children:(0,m.jsx)("circle",{cx:"25",cy:"25",r:"20",fill:"none",className:"path"})})}),R=()=>{let{t:e,onMenuToggle:t,ArrowRenderer:r,shouldToggleOnHover:n,isLoading:a,disabled:s,onChange:o,labelledBy:i,value:c,isOpen:d,defaultIsOpen:u,ClearSelectedIcon:p,closeOnChangedValue:h}=v();(0,l.useEffect)((()=>{h&&g(!1)}),[c]);let[f,b]=(0,l.useState)(!0),[w,g]=(0,l.useState)(u),[k,S]=(0,l.useState)(!1),E=r||j,R=(0,l.useRef)();(function(e,t){let r=(0,l.useRef)(!1);(0,l.useEffect)((()=>{r.current?e():r.current=!0}),t)})((()=>{t&&t(w)}),[w]),(0,l.useEffect)((()=>{void 0===u&&"boolean"==typeof d&&(b(!1),g(d))}),[d]),x([y.ENTER,y.ARROW_DOWN,y.SPACE,y.ESCAPE],(e=>{var t;["text","button"].includes(e.target.type)&&[y.SPACE,y.ENTER].includes(e.code)||(f&&(e.code===y.ESCAPE?(g(!1),null==(t=null==R?void 0:R.current)||t.focus()):g(!0)),e.preventDefault())}),{target:R});let A=e=>{f&&n&&g(e)};return(0,m.jsxs)("div",{tabIndex:0,className:"dropdown-container","aria-labelledby":i,"aria-expanded":w,"aria-readonly":!0,"aria-disabled":s,ref:R,onFocus:()=>!k&&S(!0),onBlur:e=>{!e.currentTarget.contains(e.relatedTarget)&&f&&(S(!1),g(!1))},onMouseEnter:()=>A(!0),onMouseLeave:()=>A(!1),children:[(0,m.jsxs)("div",{className:"dropdown-heading",onClick:()=>{f&&g(!a&&!s&&!w)},children:[(0,m.jsx)("div",{className:"dropdown-heading-value",children:(0,m.jsx)(N,{})}),a&&(0,m.jsx)(O,{}),c.length>0&&null!==p&&(0,m.jsx)("button",{type:"button",className:"clear-selected-button",onClick:e=>{e.stopPropagation(),o([]),f&&g(!1)},disabled:s,"aria-label":e("clearSelected"),children:p||(0,m.jsx)(_,{})}),(0,m.jsx)(E,{expanded:w})]}),w&&(0,m.jsx)("div",{className:"dropdown-content",children:(0,m.jsx)("div",{className:"panel-content",children:(0,m.jsx)(C,{})})})]})},A=e=>(0,m.jsx)(w,{props:e,children:(0,m.jsx)("div",{className:`rmsc ${e.className||"multi-select"}`,children:(0,m.jsx)(R,{})})});const{newsletterBuilder:{fromNames:I=[],templates:T={}}={}}=window,P=I.map((e=>({value:e,label:e})));var D=function(e){let{contentHandler:t,typeHandler:r,imageHandler:n,templateHandler:a,fromNameHandler:i,typeValue:u,templateValue:p,fromNameValue:m}=e;const[h,f]=(0,d.useState)({});(0,d.useEffect)((()=>{Object.keys(h).length>0||c()({path:"/wp-newsletter-builder/v1/email-types"}).then((e=>{f(e)}))}),[h]),(0,d.useEffect)((()=>{!m&&I.length>0&&i(I[0])}),[i,m]);const b=(e,t)=>e.labelt.label?1:0,w=e=>{var t;const r=null!==(t=e[u]?.templates)&&void 0!==t?t:[];if(!r.length)return[];const n=r.map((e=>({value:e,label:T[parseInt(e,10)]})));return n.sort(b),n.unshift({label:(0,s.__)("Select a template","wp-newsletter-builder"),value:""}),n},v=async e=>{if(a(e),!e)return;const r=h[u],{image:l,from_name:s}=r;n(parseInt(l,10)),i(s),c()({path:`/wp/v2/nb_template/${e}?context=edit`}).then((e=>{const{content:r}=e;t(r.raw)}))};return(0,d.useEffect)((()=>{if(!u)return;const e=h[u]?.templates;e&&1===e.length&&v(e[0])}),[u]),(0,l.createElement)(l.Fragment,null,(0,l.createElement)(o.SelectControl,{label:(0,s.__)("Select Header Type","wp-newsletter-builder"),value:u,options:(e=>{const t=Object.keys(e).map((t=>({label:e[t].label,value:t})));return t.sort(b),t.unshift({label:(0,s.__)("Select a type","wp-newsletter-builder"),value:""}),t})(h),onChange:r}),w(h).length?(0,l.createElement)(o.SelectControl,{label:(0,s.__)("Select Template","wp-newsletter-builder"),value:p,options:w(h),onChange:v}):null,(0,l.createElement)(o.SelectControl,{label:(0,s.__)("From Name","wp-newsletter-builder"),value:m||h[u]?.from_name,options:P,onChange:i}))},L=window.wp.coreData,W=window.lodash,B=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/email-settings","version":"0.1.0","title":"Email Settings","category":"design","icon":"email","description":"Block to set the email subject, preview text, and list.","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php"}');(0,n.registerBlockType)(B,{edit:function(){const[e,t]=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const r=(0,u.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[n,l]=(0,L.useEntityProp)("postType",r,"meta",t),a="function"==typeof l?l:()=>console.error(`Error attempting to set post meta for post type ${r}. Does it have support for custom-fields?`);return["object"==typeof n?n:{},e=>a((0,W.cloneDeep)(e))]}(),{nb_newsletter_subject:r,nb_newsletter_preview:a,nb_newsletter_list:i,nb_newsletter_email_type:m,nb_newsletter_template:h,nb_newsletter_from_name:f,nb_newsletter_suppression_group:b}=e,{newsletterBuilder:{usesSuppressionLists:w=!1}={}}=window,[v,g]=(0,d.useState)([]),x=Array.isArray(i)?i:[i],[y,_]=(0,d.useState)([]),k=v.length>0?v.map((e=>({label:e.Name,value:e.ListID}))):[],S=k.filter((e=>x.includes(e.value)));return(0,d.useEffect)((()=>{v.length>0||c()({path:"/wp-newsletter-builder/v1/lists"}).then((e=>{g(e)}))}),[v]),(0,d.useEffect)((()=>{y.length>0||c()({path:"/wp-newsletter-builder/v1/suppression-lists"}).then((e=>{const t=e;t.unshift({Name:(0,s.__)("Select a suppression list","wp-newsletter-builder"),ListID:""}),_(t)}))}),[y]),(0,l.createElement)("div",{...(0,p.useBlockProps)()},(0,l.createElement)(D,{typeValue:m,contentHandler:e=>{(0,u.dispatch)("core/block-editor").resetBlocks((0,n.parse)(e))},typeHandler:e=>{t({nb_newsletter_email_type:e})},imageHandler:e=>{t({nb_newsletter_header_img:e})},templateHandler:e=>{t({nb_newsletter_template:e})},fromNameHandler:e=>{t({nb_newsletter_from_name:e})},templateValue:h,fromNameValue:f}),(0,l.createElement)(o.TextControl,{label:(0,s.__)("Subject","wp-newsletter-builder"),placeholder:(0,s.__)("Enter subject","wp-newsletter-builder"),value:r,onChange:e=>t({nb_newsletter_subject:e})}),(0,l.createElement)(o.TextControl,{label:(0,s.__)("Preview Text","wp-newsletter-builder"),placeholder:(0,s.__)("Enter preview text","wp-newsletter-builder"),value:a,onChange:e=>t({nb_newsletter_preview:e})}),v.length>0?(0,l.createElement)("label",{htmlFor:"wp-newsletter-builder-list"},(0,s.__)("Email List","wp-newsletter-builder"),(0,l.createElement)(A,{labelledBy:(0,s.__)("List","wp-newsletter-builder"),value:S,options:k,onChange:e=>{const r=e.map((e=>e.value));t({nb_newsletter_list:r})},hasSelectAll:!1,overrideStrings:{selectSomeItems:(0,s.__)("Select Email List","wp-newsletter-builder")}})):(0,l.createElement)(o.Spinner,null),w&&y.length>0?(0,l.createElement)(o.SelectControl,{label:(0,s.__)("Suppression Group","wp-newsletter-builder"),value:b,options:y.map((e=>({label:e.Name,value:e.ListID}))),onChange:e=>t({nb_newsletter_suppression_group:e})}):null)}})},20:function(e,t,r){var n=r(609),l=Symbol.for("react.element"),a=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,o=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,a={},c=null,d=null;for(n in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(d=t.ref),t)s.call(t,n)&&!i.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:l,type:e,key:c,ref:d,props:a,_owner:o.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},848:function(e,t,r){e.exports=r(20)},609:function(e){e.exports=window.React}},r={};function n(e){var l=r[e];if(void 0!==l)return l.exports;var a=r[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.m=t,e=[],n.O=function(t,r,l,a){if(!r){var s=1/0;for(d=0;d=a)&&Object.keys(n.O).every((function(e){return n.O[e](r[i])}))?r.splice(i--,1):(o=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[r,l,a]},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={976:0,944:0};n.O.j=function(t){return 0===e[t]};var t=function(t,r){var l,a,s=r[0],o=r[1],i=r[2],c=0;if(s.some((function(t){return 0!==e[t]}))){for(l in o)n.o(o,l)&&(n.m[l]=o[l]);if(i)var d=i(n)}for(t&&t(r);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ diff --git a/build/email-settings/style-index.css b/build/email-settings/style-index.css new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/build/email-settings/style-index.css @@ -0,0 +1 @@ + diff --git a/build/footer/block.json b/build/footer/block.json new file mode 100644 index 00000000..347954a1 --- /dev/null +++ b/build/footer/block.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/footer", + "version": "0.1.0", + "title": "Newsletter Footer", + "category": "design", + "icon": "align-wide", + "description": "Outputs the company logo, social links, address, and footer links.", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "narrow_separator": { + "type": "boolean", + "default": false + } + } +} \ No newline at end of file diff --git a/build/footer/index.asset.php b/build/footer/index.asset.php new file mode 100644 index 00000000..d62d508e --- /dev/null +++ b/build/footer/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => 'adf15388dd515af974fa'); diff --git a/build/footer/index.js b/build/footer/index.js new file mode 100644 index 00000000..b6ce3161 --- /dev/null +++ b/build/footer/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,t={438:function(e,t,n){var l=window.wp.blocks,r=window.React,i=window.wp.i18n,o=window.wp.blockEditor,s=window.wp.apiFetch,a=n.n(s),c=window.wp.components,u=window.wp.data,w=window.wp.element,p=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/footer","version":"0.1.0","title":"Newsletter Footer","category":"design","icon":"align-wide","description":"Outputs the company logo, social links, address, and footer links.","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","style":["file:style-index.css"],"render":"file:render.php","attributes":{"narrow_separator":{"type":"boolean","default":false}}}');(0,l.registerBlockType)(p,{edit:function(){var e,t,n,l,s,p;const[d,m]=(0,w.useState)(!1),[f,b]=(0,w.useState)(),_=null!==(e=f?.facebook_url)&&void 0!==e?e:"",k=null!==(t=f?.twitter_url)&&void 0!==t?t:"",g=null!==(n=f?.instagram_url)&&void 0!==n?n:"",h=null!==(l=f?.youtube_url)&&void 0!==l?l:"",v=null!==(s=f?.image)&&void 0!==s?s:0,E=null!==(p=f?.address)&&void 0!==p?p:"";(0,w.useEffect)((()=>{m(!0),a()({path:"/wp-newsletter-builder/v1/footer_settings"}).then((e=>{b(e),m(!1)}))}),[]);const{media:y=null}=(0,u.useSelect)((e=>({media:v?e("core").getMedia(v):null})),[f,v]),N=y?y.source_url:"",O=y?y.alt_text:"";return(0,r.createElement)("div",{...(0,o.useBlockProps)()},d?(0,r.createElement)(c.Spinner,null):(0,r.createElement)(r.Fragment,null,_||k||g||h?(0,r.createElement)("div",{className:"wp-block-wp-newsletter-builder-footer__social-links"},_?(0,r.createElement)("span",{className:"wp-block-wp-newsletter-builder-footer__social-links__item"},(0,r.createElement)("a",{className:"wp-block-wp-newsletter-builder-footer__social-links__link facebook-icon",href:_},(0,r.createElement)("img",{src:"/wp-content/plugins/wp-newsletter-builder/images/facebook.png",alt:"Facebook",height:"26",width:"26"}))):null,k?(0,r.createElement)("span",{className:"wp-block-wp-newsletter-builder-footer__social-links__item"},(0,r.createElement)("a",{className:"wp-block-wp-newsletter-builder-footer__social-links__link twitter-icon",href:k},(0,r.createElement)("img",{src:"/wp-content/plugins/wp-newsletter-builder/images/twitter.png",alt:"X",height:"26",width:"26"}))):null,g?(0,r.createElement)("span",{className:"wp-block-wp-newsletter-builder-footer__social-links__item"},(0,r.createElement)("a",{className:"wp-block-wp-newsletter-builder-footer__social-links__link instagram-icon",href:g},(0,r.createElement)("img",{src:"/wp-content/plugins/wp-newsletter-builder/images/instagram.png",alt:"Instagram",height:"26",width:"26"}))):null,h?(0,r.createElement)("span",{className:"wp-block-wp-newsletter-builder-footer__social-links__item"},(0,r.createElement)("a",{className:"wp-block-wp-newsletter-builder-footer__social-links__link youtube-icon",href:h},(0,r.createElement)("img",{src:"/wp-content/plugins/wp-newsletter-builder/images/youtube.png",alt:"YouTube",height:"26",width:"26"}))):null):null,N?(0,r.createElement)("div",{className:"wp-block-wp-newsletter-builder-footer__logo"},(0,r.createElement)("img",{src:N,alt:O,width:"300"})):null,E?(0,r.createElement)("div",{className:"wp-block-wp-newsletter-builder-footer__address"},E):null),(0,r.createElement)("div",{className:"wp-block-wp-newsletter-builder-footer__links"},(0,r.createElement)("a",{href:"#unsubscribe_preferences"},(0,i.__)("Manage Subscription Preferences","wp-newsletter-builder"))))}})}},n={};function l(e){var r=n[e];if(void 0!==r)return r.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,l),i.exports}l.m=t,e=[],l.O=function(t,n,r,i){if(!n){var o=1/0;for(u=0;u=i)&&Object.keys(l.O).every((function(e){return l.O[e](n[a])}))?n.splice(a--,1):(s=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,r,i]},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,{a:t}),t},l.d=function(e,t){for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={167:0,631:0};l.O.j=function(t){return 0===e[t]};var t=function(t,n){var r,i,o=n[0],s=n[1],a=n[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(r in s)l.o(s,r)&&(l.m[r]=s[r]);if(a)var u=a(l)}for(t&&t(n);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$nb_settings = get_option( 'nb_settings' ); +$nb_footer_settings = is_array( $nb_settings ) ? $nb_settings['footer_settings'] : []; +$nb_facebook_url = $nb_footer_settings['facebook_url'] ?? ''; +$nb_twitter_url = $nb_footer_settings['twitter_url'] ?? ''; +$nb_instagram_url = $nb_footer_settings['instagram_url'] ?? ''; +$nb_youtube_url = $nb_footer_settings['youtube_url'] ?? ''; +$nb_image_id = $nb_footer_settings['image'] ?? 0; +$nb_address = $nb_footer_settings['address'] ?? ''; +$nb_has_social_links = ! empty( $nb_facebook_url ) || ! empty( $nb_twitter_url ) || ! empty( $nb_instagram_url ) || ! empty( $nb_youtube_url ); + +$plugin_url = plugins_url( 'wp-newsletter-builder' ); +?> +
align="center"> + + + + + + + + + + + + + +
diff --git a/build/footer/style-index.css b/build/footer/style-index.css new file mode 100644 index 00000000..d4ff9b66 --- /dev/null +++ b/build/footer/style-index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-footer{font-family:Verdana,sans-serif;font-size:13px;margin-bottom:30px;text-align:center}.wp-block-wp-newsletter-builder-footer__social-links{margin-top:20px;text-align:center}.wp-block-wp-newsletter-builder-footer__social-links__item{padding-right:4px}.wp-block-wp-newsletter-builder-footer__social-links__link{border-radius:50%;display:inline-block;height:26px;max-height:26px;text-decoration:underline;transition:opacity .1s ease-in;width:26px}.wp-block-wp-newsletter-builder-footer__social-links .facebook-icon{background-color:#1877f2;color:#1877f2}.wp-block-wp-newsletter-builder-footer__social-links .twitter-icon{background-color:#3ca1f2;color:#3ca1f2}.wp-block-wp-newsletter-builder-footer__social-links .instagram-icon{background-color:#e1306c;color:#e1306c}.wp-block-wp-newsletter-builder-footer__social-links .youtube-icon{background-color:red;color:red}.wp-block-wp-newsletter-builder-footer__logo{margin:20px auto;text-align:center;width:300px}.wp-block-wp-newsletter-builder-footer__address{margin-top:20px}.wp-block-wp-newsletter-builder-footer__links{color:#595959;margin-top:20px}.wp-block-wp-newsletter-builder-footer__links a,.wp-block-wp-newsletter-builder-footer__links u{color:#595959;text-decoration:underline} diff --git a/build/header/block.json b/build/header/block.json new file mode 100644 index 00000000..de9b4206 --- /dev/null +++ b/build/header/block.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/header", + "version": "0.1.0", + "title": "Newsletter Header", + "category": "design", + "icon": "format-image", + "description": "Displays the header image for a newsletter", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php" +} \ No newline at end of file diff --git a/build/header/index.asset.php b/build/header/index.asset.php new file mode 100644 index 00000000..2fadaddf --- /dev/null +++ b/build/header/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-data', 'wp-i18n'), 'version' => 'b2c0b100f84d1c7913fe'); diff --git a/build/header/index.css b/build/header/index.css new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/build/header/index.css @@ -0,0 +1 @@ + diff --git a/build/header/index.js b/build/header/index.js new file mode 100644 index 00000000..557a0d1c --- /dev/null +++ b/build/header/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=w(Array.prototype.forEach),d=w(Array.prototype.pop),p=w(Array.prototype.push),f=w(String.prototype.toLowerCase),h=w(String.prototype.toString),m=w(String.prototype.match),g=w(String.prototype.replace),y=w(String.prototype.indexOf),v=w(String.prototype.trim),b=w(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function x(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return w(n.get);if("function"==typeof n.value)return w(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:w,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=C({},[...k,...E,...R,...I,...P]);let me=null;const ge=C({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,we=!1,Ce=!0,xe=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=C({},["audio","video","img","source","image","track"]);let Fe=null;const ze=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=C({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=x(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?C({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?C({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?C({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?C(x(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?C(x(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?C({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?C({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?C({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,xe=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),xe&&(_e=!1),Te&&(Re=!0),je&&(fe=C({},[...P]),me=[],!0===je.html&&(C(fe,k),C(me,O)),!0===je.svg&&(C(fe,E),C(me,L),C(me,D)),!0===je.svgFilters&&(C(fe,R),C(me,L),C(me,D)),!0===je.mathMl&&(C(fe,I),C(me,j),C(me,D))),e.ADD_TAGS&&(fe===he&&(fe=x(fe)),C(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=x(me)),C(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&C(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=x(De)),C(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&C(fe,["html","head","body"]),fe.table&&(C(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=C({},["mi","mo","mn","ms","mtext"]),rt=C({},["foreignobject","desc","title","annotation-xml"]),st=C({},["title","style","font","a","script"]),ot=C({},E);C(ot,R),C(ot,T);const it=C({},I);C(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof w&&e instanceof w},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(xe&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(we&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!Ce&&b(/\/>/i,p)){lt(i,e);continue}xe&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!xe&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),xe&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,C())w();else{if(w(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function w(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),C()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;C()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=x(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||w.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}w.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),x=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),C.push(e),u=m,q(C),b&&Y()),G()}function W(e){u=e,q(C),C=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:w,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:x+(p||0)}}}function Y(){o(G()),A=[],w=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return C(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?Z(C(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return C(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return C(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return C(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return C(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return C(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:C(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(w(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[C(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[C(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,w=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=x(R+=C(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=C(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(C(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],w=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,w);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,w),w),s,w,d,a,r?_:w);break;default:ne(R,k,k,k,[""],w,0,a,w)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+w:C(w,/&\f/g,h[A])))&&(l[b++]=x);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function we(e){return"string"==typeof e&&!0}var Ce="function"==typeof Symbol&&Symbol.for,xe=Ce?Symbol.for("react.memo"):60115,Se=Ce?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[xe]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===xe?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function wt(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!we(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return we(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),w=n(9680),C={};C.styleTagTransform=_(),C.setAttributes=y(),C.insert=m().bind(null,"head"),C.domAPI=f(),C.insertStyleElement=b(),d()(w.c,C),w.c&&w.c.locals&&w.c.locals;var x=n(4632),S=n.n(x),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:w=0})=>{const[C,x]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(w):(0,c.usePostById)(w,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{x(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==w&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==w&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),w)})}),N()]}):null,0!==w&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===w?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,C?(0,r.jsx)(j,{closeModal:()=>{x(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const w=_;var C=n(2108),x=n.n(C),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),x()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[C,x]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{x((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():x([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(w,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:C,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>w.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),w=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},396:function(e,t,n){"use strict";var r=window.wp.blocks,s=window.React,o=window.wp.i18n,i=window.wp.blockEditor,a=window.wp.data,l=n(265),c=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/header","version":"0.1.0","title":"Newsletter Header","category":"design","icon":"format-image","description":"Displays the header image for a newsletter","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php"}');(0,r.registerBlockType)(c,{edit:function(){const[e]=(0,l.usePostMeta)(),{nb_newsletter_header_img:t}=e,{media:n=null}=(0,a.useSelect)((e=>({media:t?e("core").getMedia(t):null})),[t]),r=n?n.source_url:"";return(0,s.createElement)("div",{...(0,i.useBlockProps)()},r?(0,s.createElement)("img",{src:r,alt:(0,o.__)("Header","wp-newsletter-builder")}):(0,s.createElement)("div",{className:"wp-block-wp-newsletter-builder-header__placeholder"},(0,o.__)("Newsletter Header","wp-newsletter-builder")))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={145:0,669:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ +$wp_newsletter_builder_block_post_id = get_the_ID(); +if ( empty( $wp_newsletter_builder_block_post_id ) ) { + return; +} + +$wp_newsletter_builder_block_image_id = absint( get_post_meta( $wp_newsletter_builder_block_post_id, 'nb_newsletter_header_img', true ) ); +if ( empty( $wp_newsletter_builder_block_image_id ) ) { + return; +} +// TODO: Add a check to see if the image exists. +// TODO: Get proper alt text. +?> +
role="banner" align="center"> + +
diff --git a/build/header/style-index.css b/build/header/style-index.css new file mode 100644 index 00000000..474c14ba --- /dev/null +++ b/build/header/style-index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-header__placeholder{align-items:center;aspect-ratio:16/9;border:1px dashed #000;display:flex;justify-content:center} diff --git a/build/heading/block.json b/build/heading/block.json new file mode 100644 index 00000000..bef9f097 --- /dev/null +++ b/build/heading/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wp-newsletter-builder/heading", + "version": "0.1.0", + "title": "Newsletter Heading", + "category": "text", + "icon": "heading", + "description": "Heading wrapper that provides email-friendly enhancements", + "textdomain": "heading", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "elColor": { + "type": "string", + "default": "#000" + } + } +} \ No newline at end of file diff --git a/build/heading/index.asset.php b/build/heading/index.asset.php new file mode 100644 index 00000000..bce39ac1 --- /dev/null +++ b/build/heading/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '78728f9b329e727680dc'); diff --git a/build/heading/index.js b/build/heading/index.js new file mode 100644 index 00000000..4069b19e --- /dev/null +++ b/build/heading/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,t={361:function(){var e=window.React,t=window.wp.blocks,n=window.wp.blockEditor,r=window.wp.i18n,o=window.wp.components,l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"wp-newsletter-builder/heading","version":"0.1.0","title":"Newsletter Heading","category":"text","icon":"heading","description":"Heading wrapper that provides email-friendly enhancements","textdomain":"heading","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"elColor":{"type":"string","default":"#000"}}}');(0,t.registerBlockType)(l,{apiVersion:2,edit:function(t){let{attributes:{elColor:l="#000"},setAttributes:i}=t;const s={color:l};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n.InspectorControls,null,(0,e.createElement)(o.PanelBody,{title:"Heading Color"},(0,e.createElement)("h3",null,(0,r.__)("Text color","wp-newsletter-builder")),(0,e.createElement)(o.ColorPicker,{color:l,onChange:e=>i({elColor:e})}))),(0,e.createElement)("div",{...(0,n.useBlockProps)({className:"wp-block-wp-newsletter-builder-heading",style:s})},(0,e.createElement)(n.InnerBlocks,{template:[["core/heading"]],templateLock:"all"})))},save:()=>{const t=n.useBlockProps.save();return(0,e.createElement)("div",{...t},(0,e.createElement)(n.InnerBlocks.Content,null))},title:l.title})}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var l=n[e]={exports:{}};return t[e](l,l.exports,r),l.exports}r.m=t,e=[],r.O=function(t,n,o,l){if(!n){var i=1/0;for(u=0;u=l)&&Object.keys(r.O).every((function(e){return r.O[e](n[a])}))?n.splice(a--,1):(s=!1,l0&&e[u-1][2]>l;u--)e[u]=e[u-1];e[u]=[n,o,l]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={430:0,778:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var o,l,i=n[0],s=n[1],a=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)var u=a(r)}for(t&&t(n);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_heading_color = $attributes['elColor'] ?? ''; +?> +
+ +
\ No newline at end of file diff --git a/build/heading/style-index.css b/build/heading/style-index.css new file mode 100644 index 00000000..9ab96e6f --- /dev/null +++ b/build/heading/style-index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-heading h1,.wp-block-wp-newsletter-builder-heading h2,.wp-block-wp-newsletter-builder-heading h3,.wp-block-wp-newsletter-builder-heading h4,.wp-block-wp-newsletter-builder-heading h5,.wp-block-wp-newsletter-builder-heading h6{margin:0} diff --git a/build/index.js/index.asset.php b/build/index.js/index.asset.php new file mode 100644 index 00000000..f5345333 --- /dev/null +++ b/build/index.js/index.asset.php @@ -0,0 +1 @@ + array(), 'version' => '31d6cfe0d16ae931b73c'); diff --git a/build/index.js/index.js b/build/index.js/index.js new file mode 100644 index 00000000..e69de29b diff --git a/build/list/block.json b/build/list/block.json new file mode 100644 index 00000000..e0fd07ee --- /dev/null +++ b/build/list/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wp-newsletter-builder/list", + "version": "0.1.0", + "title": "Newsletter List", + "category": "text", + "icon": "editor-ul", + "description": "List wrapper that provides email-friendly enhancements", + "textdomain": "list", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "elColor": { + "type": "string", + "default": "#000" + } + } +} \ No newline at end of file diff --git a/build/list/index.asset.php b/build/list/index.asset.php new file mode 100644 index 00000000..2df3367a --- /dev/null +++ b/build/list/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => 'ac42c9cfdbcc531e67d3'); diff --git a/build/list/index.js b/build/list/index.js new file mode 100644 index 00000000..a4613a3f --- /dev/null +++ b/build/list/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,t={669:function(){var e=window.React,t=window.wp.blocks,r=window.wp.blockEditor,n=window.wp.i18n,l=window.wp.components,o=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"wp-newsletter-builder/list","version":"0.1.0","title":"Newsletter List","category":"text","icon":"editor-ul","description":"List wrapper that provides email-friendly enhancements","textdomain":"list","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"elColor":{"type":"string","default":"#000"}}}');(0,t.registerBlockType)(o,{apiVersion:2,edit:function(t){let{attributes:{elColor:o="#000"},setAttributes:i}=t;const s={color:o};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(r.InspectorControls,null,(0,e.createElement)(l.PanelBody,{title:"List Color"},(0,e.createElement)("h3",null,(0,n.__)("Text color","wp-newsletter-builder")),(0,e.createElement)(l.ColorPicker,{color:o,onChange:e=>i({elColor:e})}))),(0,e.createElement)("div",{...(0,r.useBlockProps)({className:"wp-block-wp-newsletter-builder-list",style:s})},(0,e.createElement)(r.InnerBlocks,{template:[["core/list"]],templateLock:"all"})))},save:()=>{const t=r.useBlockProps.save();return(0,e.createElement)("div",{...t},(0,e.createElement)(r.InnerBlocks.Content,null))},title:o.title})}},r={};function n(e){var l=r[e];if(void 0!==l)return l.exports;var o=r[e]={exports:{}};return t[e](o,o.exports,n),o.exports}n.m=t,e=[],n.O=function(t,r,l,o){if(!r){var i=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[c])}))?r.splice(c--,1):(s=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,l,o]},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={450:0,382:0};n.O.j=function(t){return 0===e[t]};var t=function(t,r){var l,o,i=r[0],s=r[1],c=r[2],a=0;if(i.some((function(t){return 0!==e[t]}))){for(l in s)n.o(s,l)&&(n.m[l]=s[l]);if(c)var u=c(n)}for(t&&t(r);a -

> - -

-{{/isDynamicVariant}} + +
+ +
diff --git a/build/list/style-index.css b/build/list/style-index.css new file mode 100644 index 00000000..570fb51b --- /dev/null +++ b/build/list/style-index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-list ol,.wp-block-wp-newsletter-builder-list ul{margin:0} diff --git a/build/newsletter-status/index.asset.php b/build/newsletter-status/index.asset.php new file mode 100644 index 00000000..20878f5d --- /dev/null +++ b/build/newsletter-status/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins'), 'version' => '6175e8205ed41b25433f'); diff --git a/build/newsletter-status/index.js b/build/newsletter-status/index.js new file mode 100644 index 00000000..55cdb977 --- /dev/null +++ b/build/newsletter-status/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e={n:function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,{a:n}),n},d:function(t,n){for(var l in n)e.o(n,l)&&!e.o(t,l)&&Object.defineProperty(t,l,{enumerable:!0,get:n[l]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t=window.wp.plugins,n=window.React,l=window.wp.element,r=window.wp.editPost,u=window.wp.i18n,a=window.wp.data,i=window.wp.apiFetch,d=e.n(i),c=window.wp.components;function w(){return(0,n.createElement)(c.Spinner,null)}(0,t.registerPlugin)("newsletter-status",{render:function(){const e=(0,a.select)("core/editor").getCurrentPostId(),[t,i]=(0,l.useState)({}),[o,s]=(0,l.useState)(!1),p=(0,l.useCallback)((async()=>{s(!0);const t=await d()({path:`/wp-newsletter-builder/v1/status/${e}`});i(t),s(!1)}),[e]);(0,l.useEffect)((()=>{p()}),[p]);const{Status:m="",Name:E="",Recipients:_=null,TotalOpened:b=null,UniqueOpened:f=null}=t;return(0,n.createElement)(r.PluginDocumentSettingPanel,{name:"rubric-selection",title:(0,u.__)("Newsletter Status","wp-newsletter-builder")},t?(0,n.createElement)(n.Fragment,null,(0,n.createElement)("dl",null,(0,n.createElement)("dt",null,(0,u.__)("Status","wp-newsletter-builder")),(0,n.createElement)("dd",null,m),(0,n.createElement)("dt",null,(0,u.__)("Campaign Name","wp-newsletter-builder")),(0,n.createElement)("dd",null,E),(0,n.createElement)("dt",null,(0,u.__)("Recipients","wp-newsletter-builder")),(0,n.createElement)("dd",null,_),(0,n.createElement)("dt",null,(0,u.__)("Total Opened","wp-newsletter-builder")),(0,n.createElement)("dd",null,b),(0,n.createElement)("dt",null,(0,u.__)("Unique Opened","wp-newsletter-builder")),(0,n.createElement)("dd",null,f)),(0,n.createElement)(c.Button,{onClick:p,variant:"secondary",disabled:o},(0,u.__)("Refresh","wp-newsletter-builder"))):(0,n.createElement)(w,null))}})}(); \ No newline at end of file diff --git a/build/paragraph/block.json b/build/paragraph/block.json new file mode 100644 index 00000000..335c7e60 --- /dev/null +++ b/build/paragraph/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wp-newsletter-builder/paragraph", + "version": "0.1.0", + "title": "Newsletter Paragraph", + "category": "text", + "icon": "editor-paragraph", + "description": "Paragraph wrapper that provides email-friendly enhancements", + "textdomain": "paragraph", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "elColor": { + "type": "string", + "default": "#000" + } + } +} \ No newline at end of file diff --git a/build/paragraph/index.asset.php b/build/paragraph/index.asset.php new file mode 100644 index 00000000..a7cd681b --- /dev/null +++ b/build/paragraph/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '6226b3a3689f4d3b2e19'); diff --git a/build/paragraph/index.js b/build/paragraph/index.js new file mode 100644 index 00000000..95884a2f --- /dev/null +++ b/build/paragraph/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,r={21:function(){var e=window.React,r=window.wp.blocks,t=window.wp.blockEditor,n=window.wp.i18n,o=window.wp.components,l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"wp-newsletter-builder/paragraph","version":"0.1.0","title":"Newsletter Paragraph","category":"text","icon":"editor-paragraph","description":"Paragraph wrapper that provides email-friendly enhancements","textdomain":"paragraph","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"elColor":{"type":"string","default":"#000"}}}');(0,r.registerBlockType)(l,{apiVersion:2,edit:function(r){let{attributes:{elColor:l="#000"},setAttributes:a}=r;const i={color:l};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(o.PanelBody,{title:"Paragraph Color"},(0,e.createElement)("h3",null,(0,n.__)("Text color","wp-newsletter-builder")),(0,e.createElement)(o.ColorPicker,{color:l,onChange:e=>a({elColor:e})}))),(0,e.createElement)("div",{...(0,t.useBlockProps)({className:"wp-block-wp-newsletter-builder-paragraph",style:i})},(0,e.createElement)(t.InnerBlocks,{template:[["core/paragraph"]],templateLock:"all"})))},save:()=>{const r=t.useBlockProps.save();return(0,e.createElement)("div",{...r},(0,e.createElement)(t.InnerBlocks.Content,null))},title:l.title})}},t={};function n(e){var o=t[e];if(void 0!==o)return o.exports;var l=t[e]={exports:{}};return r[e](l,l.exports,n),l.exports}n.m=r,e=[],n.O=function(r,t,o,l){if(!t){var a=1/0;for(p=0;p=l)&&Object.keys(n.O).every((function(e){return n.O[e](t[s])}))?t.splice(s--,1):(i=!1,l0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[t,o,l]},n.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},function(){var e={930:0,766:0};n.O.j=function(r){return 0===e[r]};var r=function(r,t){var o,l,a=t[0],i=t[1],s=t[2],c=0;if(a.some((function(r){return 0!==e[r]}))){for(o in i)n.o(i,o)&&(n.m[o]=i[o]);if(s)var p=s(n)}for(r&&r(t);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_paragraph_color = $attributes['elColor'] ?? ''; +?> + +
+ +
diff --git a/build/paragraph/style-index.css b/build/paragraph/style-index.css new file mode 100644 index 00000000..2d19f596 --- /dev/null +++ b/build/paragraph/style-index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-paragraph p{margin:0} diff --git a/build/post-byline/block.json b/build/post-byline/block.json new file mode 100644 index 00000000..05570b3d --- /dev/null +++ b/build/post-byline/block.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post-byline", + "version": "0.1.0", + "title": "Newsletter Post Byline", + "category": "design", + "icon": "admin-post", + "description": "Displays a post byline", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "overrideByline": { + "type": "string", + "default": "" + } + }, + "usesContext": [ + "postId" + ] +} \ No newline at end of file diff --git a/build/post-byline/index.asset.php b/build/post-byline/index.asset.php new file mode 100644 index 00000000..4c70daf5 --- /dev/null +++ b/build/post-byline/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '836c5eea0a5aba577896'); diff --git a/build/post-byline/index.js b/build/post-byline/index.js new file mode 100644 index 00000000..163e0eb1 --- /dev/null +++ b/build/post-byline/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=w(Array.prototype.forEach),d=w(Array.prototype.pop),p=w(Array.prototype.push),f=w(String.prototype.toLowerCase),h=w(String.prototype.toString),m=w(String.prototype.match),g=w(String.prototype.replace),y=w(String.prototype.indexOf),v=w(String.prototype.trim),b=w(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function x(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return w(n.get);if("function"==typeof n.value)return w(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:w,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=C({},[...k,...E,...R,...I,...P]);let me=null;const ge=C({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,we=!1,Ce=!0,xe=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=C({},["audio","video","img","source","image","track"]);let Fe=null;const ze=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=C({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=x(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?C({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?C({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?C({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?C(x(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?C(x(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?C({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?C({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?C({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,xe=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),xe&&(_e=!1),Te&&(Re=!0),je&&(fe=C({},[...P]),me=[],!0===je.html&&(C(fe,k),C(me,O)),!0===je.svg&&(C(fe,E),C(me,L),C(me,D)),!0===je.svgFilters&&(C(fe,R),C(me,L),C(me,D)),!0===je.mathMl&&(C(fe,I),C(me,j),C(me,D))),e.ADD_TAGS&&(fe===he&&(fe=x(fe)),C(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=x(me)),C(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&C(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=x(De)),C(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&C(fe,["html","head","body"]),fe.table&&(C(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=C({},["mi","mo","mn","ms","mtext"]),rt=C({},["foreignobject","desc","title","annotation-xml"]),st=C({},["title","style","font","a","script"]),ot=C({},E);C(ot,R),C(ot,T);const it=C({},I);C(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof w&&e instanceof w},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(xe&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(we&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!Ce&&b(/\/>/i,p)){lt(i,e);continue}xe&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!xe&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),xe&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,C())w();else{if(w(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function w(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),C()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;C()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=x(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||w.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}w.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),x=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),C.push(e),u=m,q(C),b&&Y()),G()}function W(e){u=e,q(C),C=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:w,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:x+(p||0)}}}function Y(){o(G()),A=[],w=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return C(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?Z(C(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return C(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return C(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return C(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return C(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return C(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:C(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(w(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[C(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[C(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,w=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=x(R+=C(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=C(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(C(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],w=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,w);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,w),w),s,w,d,a,r?_:w);break;default:ne(R,k,k,k,[""],w,0,a,w)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+w:C(w,/&\f/g,h[A])))&&(l[b++]=x);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function we(e){return"string"==typeof e&&!0}var Ce="function"==typeof Symbol&&Symbol.for,xe=Ce?Symbol.for("react.memo"):60115,Se=Ce?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[xe]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===xe?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function wt(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!we(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return we(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),w=n(9680),C={};C.styleTagTransform=_(),C.setAttributes=y(),C.insert=m().bind(null,"head"),C.domAPI=f(),C.insertStyleElement=b(),d()(w.c,C),w.c&&w.c.locals&&w.c.locals;var x=n(4632),S=n.n(x),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:w=0})=>{const[C,x]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(w):(0,c.usePostById)(w,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{x(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==w&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==w&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),w)})}),N()]}):null,0!==w&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===w?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,C?(0,r.jsx)(j,{closeModal:()=>{x(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const w=_;var C=n(2108),x=n.n(C),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),x()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[C,x]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{x((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():x([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(w,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:C,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>w.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),w=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},499:function(e,t,n){"use strict";var r=window.wp.blocks,s=window.React,o=n(265),i=window.wp.i18n,a=window.wp.blockEditor,l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-byline","version":"0.1.0","title":"Newsletter Post Byline","category":"design","icon":"admin-post","description":"Displays a post byline","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","style":["file:style-index.css"],"render":"file:render.php","attributes":{"overrideByline":{"type":"string","default":""}},"usesContext":["postId"]}');(0,r.registerBlockType)(l,{edit:function(e){var t;let{attributes:{overrideByline:n},context:{postId:r},setAttributes:l}=e;const c=null!==(t=(0,o.usePostById)(r))&&void 0!==t?t:null;let u=c?c.wp_newsletter_builder_byline:(0,i.__)("Post Byline","wp-newsletter-builder");return u=n||u,(0,s.createElement)("p",{...(0,a.useBlockProps)({className:"post__byline"})},(0,s.createElement)(a.RichText,{value:u,tagName:"span",onChange:e=>l({overrideByline:e}),allowedFormats:[]}))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={446:0,34:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +use function WP_Newsletter_Builder\get_byline; + +$wp_newsletter_builder_block_post = $block->context['postId'] ?? null; + +$wp_newsletter_builder_block_post = get_post( $wp_newsletter_builder_block_post ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} +$wp_newsletter_builder_byline = ! empty( $attributes['overrideByline'] ) ? $attributes['overrideByline'] : get_byline( $wp_newsletter_builder_block_post ); + +?> + diff --git a/build/post-byline/style-index.css b/build/post-byline/style-index.css new file mode 100644 index 00000000..0b11bc06 --- /dev/null +++ b/build/post-byline/style-index.css @@ -0,0 +1 @@ +.post__byline{font-family:Georgia,serif;font-size:15px;font-weight:700;text-align:center} diff --git a/build/post-content/block.json b/build/post-content/block.json new file mode 100644 index 00000000..4e0656e8 --- /dev/null +++ b/build/post-content/block.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post-content", + "version": "0.1.0", + "title": "Newsletter Post Content", + "category": "design", + "icon": "admin-post", + "description": "Displays the contents of a post.", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "overrideContent": { + "type": "string", + "default": "" + } + }, + "usesContext": [ + "postId" + ] +} \ No newline at end of file diff --git a/build/post-content/index.asset.php b/build/post-content/index.asset.php new file mode 100644 index 00000000..6681b4d7 --- /dev/null +++ b/build/post-content/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => 'aafc1c8d2ef025ed8fe2'); diff --git a/build/post-content/index.js b/build/post-content/index.js new file mode 100644 index 00000000..471f147f --- /dev/null +++ b/build/post-content/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=C(Array.prototype.forEach),d=C(Array.prototype.pop),p=C(Array.prototype.push),f=C(String.prototype.toLowerCase),h=C(String.prototype.toString),m=C(String.prototype.match),g=C(String.prototype.replace),y=C(String.prototype.indexOf),v=C(String.prototype.trim),b=C(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function x(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return C(n.get);if("function"==typeof n.value)return C(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:C,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=w({},[...k,...E,...R,...I,...P]);let me=null;const ge=w({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,Ce=!1,we=!0,xe=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=w({},["audio","video","img","source","image","track"]);let Fe=null;const ze=w({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=w({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=x(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?w({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?w({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?w({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?w(x(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?w(x(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?w({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?w({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?w({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,Ce=e.ALLOW_UNKNOWN_PROTOCOLS||!1,we=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,xe=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),xe&&(_e=!1),Te&&(Re=!0),je&&(fe=w({},[...P]),me=[],!0===je.html&&(w(fe,k),w(me,O)),!0===je.svg&&(w(fe,E),w(me,L),w(me,D)),!0===je.svgFilters&&(w(fe,R),w(me,L),w(me,D)),!0===je.mathMl&&(w(fe,I),w(me,j),w(me,D))),e.ADD_TAGS&&(fe===he&&(fe=x(fe)),w(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=x(me)),w(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&w(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=x(De)),w(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&w(fe,["html","head","body"]),fe.table&&(w(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=w({},["mi","mo","mn","ms","mtext"]),rt=w({},["foreignobject","desc","title","annotation-xml"]),st=w({},["title","style","font","a","script"]),ot=w({},E);w(ot,R),w(ot,T);const it=w({},I);w(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof C&&e instanceof C},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(xe&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(Ce&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!we&&b(/\/>/i,p)){lt(i,e);continue}xe&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof C)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!xe&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),xe&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,w())C();else{if(C(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function C(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),w()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;w()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=x(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||C.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}C.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),x=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),w.push(e),u=m,q(w),b&&Y()),G()}function W(e){u=e,q(w),w=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:C,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:x+(p||0)}}}function Y(){o(G()),A=[],C=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return w(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?Z(w(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return w(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return w(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return w(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return w(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return w(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:w(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(C(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[w(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[w(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[w(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[w(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,C=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=x(R+=w(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=w(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(w(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],C=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,C);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,C),C),s,C,d,a,r?_:C);break;default:ne(R,k,k,k,[""],C,0,a,C)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+C:w(C,/&\f/g,h[A])))&&(l[b++]=x);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function Ce(e){return"string"==typeof e&&!0}var we="function"==typeof Symbol&&Symbol.for,xe=we?Symbol.for("react.memo"):60115,Se=we?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[xe]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===xe?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function Ct(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!Ce(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return Ce(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),C=n(9680),w={};w.styleTagTransform=_(),w.setAttributes=y(),w.insert=m().bind(null,"head"),w.domAPI=f(),w.insertStyleElement=b(),d()(C.c,w),C.c&&C.c.locals&&C.c.locals;var x=n(4632),S=n.n(x),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:C=0})=>{const[w,x]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(C):(0,c.usePostById)(C,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{x(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==C&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==C&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),C)})}),N()]}):null,0!==C&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===C?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,w?(0,r.jsx)(j,{closeModal:()=>{x(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const C=_;var w=n(2108),x=n.n(w),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),x()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[w,x]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{x((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():x([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(C,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:w,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>C.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),C=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},177:function(e,t,n){"use strict";var r=window.wp.blocks,s=window.React,o=n(265),i=window.wp.i18n,a=window.wp.blockEditor,l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-content","version":"0.1.0","title":"Newsletter Post Content","category":"design","icon":"admin-post","description":"Displays the contents of a post.","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","style":["file:style-index.css"],"render":"file:render.php","attributes":{"overrideContent":{"type":"string","default":""}},"usesContext":["postId"]}');(0,r.registerBlockType)(l,{edit:function(e){var t;let{attributes:{overrideContent:n},context:{postId:r},setAttributes:l}=e;const c=null!==(t=(0,o.usePostById)(r))&&void 0!==t?t:null;let u=c?c.content.rendered:(0,i.__)("

This block will display the content.

","wp-newsletter-builder");const d=u.match(//gi)||[];var p;return u=n||(p=d?.slice(0,2).join(""),p?p.replace(/]*?>(.*?)<\/a>/gi,"$1"):""),(0,s.createElement)("div",{...(0,a.useBlockProps)({className:"post__content"})},(0,s.createElement)(a.RichText,{value:u,tagName:"div",multiline:!0,onChange:e=>l({overrideContent:e})}))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={324:0,980:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_block_post = $block->context['postId'] ?? null; + +$wp_newsletter_builder_block_post = get_post( $wp_newsletter_builder_block_post ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} +$wp_newsletter_builder_content = $wp_newsletter_builder_block_post->post_content; +preg_match_all( '//iU', $wp_newsletter_builder_content, $matches ); +$wp_newsletter_builder_paragraphs = $matches[0]; +$wp_newsletter_builder_content = implode( '', array_slice( $wp_newsletter_builder_paragraphs, 0, 2 ) ); +$wp_newsletter_builder_content = preg_replace( '/]*?>(.*?)<\/a>/i', '$1', $wp_newsletter_builder_content ); +$wp_newsletter_builder_content = ! empty( $attributes['overrideContent'] ) ? $attributes['overrideContent'] : $wp_newsletter_builder_content; + +?> +
'post__content' ] ) ); ?>> + +
diff --git a/build/post-content/style-index.css b/build/post-content/style-index.css new file mode 100644 index 00000000..a7a3213a --- /dev/null +++ b/build/post-content/style-index.css @@ -0,0 +1 @@ +a.post__title-link{color:#000;display:block;margin:20px auto;text-decoration:none}a.post__title-link h2{margin-bottom:0;text-align:center}a.post__title-link h2.post__title--small{font-size:24px} diff --git a/build/post-excerpt/block.json b/build/post-excerpt/block.json new file mode 100644 index 00000000..d89c4994 --- /dev/null +++ b/build/post-excerpt/block.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post-excerpt", + "version": "0.1.0", + "title": "Newsletter Post Excerpt", + "category": "design", + "icon": "admin-post", + "description": "Displays a post excerpt", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "overrideExcerpt": { + "type": "string", + "default": "" + } + }, + "usesContext": [ + "postId" + ] +} \ No newline at end of file diff --git a/build/post-excerpt/index.asset.php b/build/post-excerpt/index.asset.php new file mode 100644 index 00000000..c440a514 --- /dev/null +++ b/build/post-excerpt/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => 'be6514c0d12a94ea1ec2'); diff --git a/build/post-excerpt/index.js b/build/post-excerpt/index.js new file mode 100644 index 00000000..14d4f3f9 --- /dev/null +++ b/build/post-excerpt/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=x(Array.prototype.forEach),d=x(Array.prototype.pop),p=x(Array.prototype.push),f=x(String.prototype.toLowerCase),h=x(String.prototype.toString),m=x(String.prototype.match),g=x(String.prototype.replace),y=x(String.prototype.indexOf),v=x(String.prototype.trim),b=x(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function w(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return x(n.get);if("function"==typeof n.value)return x(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:x,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=C({},[...k,...E,...R,...I,...P]);let me=null;const ge=C({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,xe=!1,Ce=!0,we=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=C({},["audio","video","img","source","image","track"]);let Fe=null;const ze=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=C({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=w(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?C({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?C({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?C({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?C(w(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?C(w(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?C({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?C({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?C({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,we=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),we&&(_e=!1),Te&&(Re=!0),je&&(fe=C({},[...P]),me=[],!0===je.html&&(C(fe,k),C(me,O)),!0===je.svg&&(C(fe,E),C(me,L),C(me,D)),!0===je.svgFilters&&(C(fe,R),C(me,L),C(me,D)),!0===je.mathMl&&(C(fe,I),C(me,j),C(me,D))),e.ADD_TAGS&&(fe===he&&(fe=w(fe)),C(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=w(me)),C(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&C(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=w(De)),C(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&C(fe,["html","head","body"]),fe.table&&(C(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=C({},["mi","mo","mn","ms","mtext"]),rt=C({},["foreignobject","desc","title","annotation-xml"]),st=C({},["title","style","font","a","script"]),ot=C({},E);C(ot,R),C(ot,T);const it=C({},I);C(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof x&&e instanceof x},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(we&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(xe&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!Ce&&b(/\/>/i,p)){lt(i,e);continue}we&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof x)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!we&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),we&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,C())x();else{if(x(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function x(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),C()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;C()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=w(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||x.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}x.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),w=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),C.push(e),u=m,q(C),b&&Y()),G()}function W(e){u=e,q(C),C=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:x,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:w+(p||0)}}}function Y(){o(G()),A=[],x=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return C(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~w(e,"stretch")?Z(C(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return C(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return C(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return C(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return C(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return C(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:C(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(x(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[C(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[C(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,x=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=w(R+=C(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=C(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(C(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],x=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,x);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,x),x),s,x,d,a,r?_:x);break;default:ne(R,k,k,k,[""],x,0,a,x)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+x:C(x,/&\f/g,h[A])))&&(l[b++]=w);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function xe(e){return"string"==typeof e&&!0}var Ce="function"==typeof Symbol&&Symbol.for,we=Ce?Symbol.for("react.memo"):60115,Se=Ce?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[we]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===we?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function xt(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!xe(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return xe(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),x=n(9680),C={};C.styleTagTransform=_(),C.setAttributes=y(),C.insert=m().bind(null,"head"),C.domAPI=f(),C.insertStyleElement=b(),d()(x.c,C),x.c&&x.c.locals&&x.c.locals;var w=n(4632),S=n.n(w),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:x=0})=>{const[C,w]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(x):(0,c.usePostById)(x,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{w(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==x&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==x&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),x)})}),N()]}):null,0!==x&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===x?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,C?(0,r.jsx)(j,{closeModal:()=>{w(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const x=_;var C=n(2108),w=n.n(C),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),w()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[C,w]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{w((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():w([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(x,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:C,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>x.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),x=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},429:function(e,t,n){"use strict";var r=window.wp.blocks,s=window.React,o=n(265),i=window.wp.i18n,a=window.wp.blockEditor,l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-excerpt","version":"0.1.0","title":"Newsletter Post Excerpt","category":"design","icon":"admin-post","description":"Displays a post excerpt","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"overrideExcerpt":{"type":"string","default":""}},"usesContext":["postId"]}');(0,r.registerBlockType)(l,{edit:function(e){var t;let{attributes:{overrideExcerpt:n},context:{postId:r},setAttributes:l}=e;const c=null!==(t=(0,o.usePostById)(r))&&void 0!==t?t:null;let u=c?c.excerpt.rendered:(0,i.__)("This block will display the excerpt.","wp-newsletter-builder");return u=n||u,(0,s.createElement)("div",{...(0,a.useBlockProps)({className:"post__dek"})},(0,s.createElement)(a.RichText,{value:u,tagName:"p",multiline:!1,onChange:e=>l({overrideExcerpt:e})}))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={528:0,640:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_block_post = $block->context['postId'] ?? null; + +$wp_newsletter_builder_block_post = get_post( $wp_newsletter_builder_block_post ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} +$wp_newsletter_builder_excerpt = ! empty( $attributes['overrideExcerpt'] ) ? $attributes['overrideExcerpt'] : get_the_excerpt( $wp_newsletter_builder_block_post ); + +?> +
'post__dek' ] ) ); ?>> +

+
diff --git a/build/post-excerpt/style-index.css b/build/post-excerpt/style-index.css new file mode 100644 index 00000000..a7a3213a --- /dev/null +++ b/build/post-excerpt/style-index.css @@ -0,0 +1 @@ +a.post__title-link{color:#000;display:block;margin:20px auto;text-decoration:none}a.post__title-link h2{margin-bottom:0;text-align:center}a.post__title-link h2.post__title--small{font-size:24px} diff --git a/build/post-featured-image/block.json b/build/post-featured-image/block.json new file mode 100644 index 00000000..037c719a --- /dev/null +++ b/build/post-featured-image/block.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post-featured-image", + "version": "0.1.0", + "title": "Newsletter Post Featured Image", + "category": "design", + "icon": "admin-post", + "description": "Displays a post featured image", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "overrideImage": { + "type": "number", + "default": 0 + }, + "imgSizes": { + "type": "string", + "default": "" + } + }, + "usesContext": [ + "postId" + ] +} \ No newline at end of file diff --git a/build/post-featured-image/index.asset.php b/build/post-featured-image/index.asset.php new file mode 100644 index 00000000..48db9660 --- /dev/null +++ b/build/post-featured-image/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '98b09193dda6d80d581c'); diff --git a/build/post-featured-image/index.js b/build/post-featured-image/index.js new file mode 100644 index 00000000..742a6c29 --- /dev/null +++ b/build/post-featured-image/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=w(Array.prototype.forEach),d=w(Array.prototype.pop),p=w(Array.prototype.push),f=w(String.prototype.toLowerCase),h=w(String.prototype.toString),m=w(String.prototype.match),g=w(String.prototype.replace),y=w(String.prototype.indexOf),v=w(String.prototype.trim),b=w(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function x(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return w(n.get);if("function"==typeof n.value)return w(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:w,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=C({},[...k,...E,...R,...I,...P]);let me=null;const ge=C({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,we=!1,Ce=!0,xe=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=C({},["audio","video","img","source","image","track"]);let Fe=null;const ze=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=C({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=x(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?C({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?C({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?C({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?C(x(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?C(x(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?C({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?C({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?C({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,xe=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),xe&&(_e=!1),Te&&(Re=!0),je&&(fe=C({},[...P]),me=[],!0===je.html&&(C(fe,k),C(me,O)),!0===je.svg&&(C(fe,E),C(me,L),C(me,D)),!0===je.svgFilters&&(C(fe,R),C(me,L),C(me,D)),!0===je.mathMl&&(C(fe,I),C(me,j),C(me,D))),e.ADD_TAGS&&(fe===he&&(fe=x(fe)),C(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=x(me)),C(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&C(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=x(De)),C(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&C(fe,["html","head","body"]),fe.table&&(C(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=C({},["mi","mo","mn","ms","mtext"]),rt=C({},["foreignobject","desc","title","annotation-xml"]),st=C({},["title","style","font","a","script"]),ot=C({},E);C(ot,R),C(ot,T);const it=C({},I);C(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof w&&e instanceof w},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(xe&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(we&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!Ce&&b(/\/>/i,p)){lt(i,e);continue}xe&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!xe&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),xe&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,C())w();else{if(w(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function w(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),C()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;C()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=x(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||w.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}w.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),x=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),C.push(e),u=m,q(C),b&&Y()),G()}function W(e){u=e,q(C),C=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:w,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:x+(p||0)}}}function Y(){o(G()),A=[],w=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return C(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?Z(C(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return C(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return C(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return C(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return C(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return C(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:C(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(w(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[C(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[C(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,w=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=x(R+=C(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=C(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(C(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],w=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,w);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,w),w),s,w,d,a,r?_:w);break;default:ne(R,k,k,k,[""],w,0,a,w)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+w:C(w,/&\f/g,h[A])))&&(l[b++]=x);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function we(e){return"string"==typeof e&&!0}var Ce="function"==typeof Symbol&&Symbol.for,xe=Ce?Symbol.for("react.memo"):60115,Se=Ce?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[xe]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===xe?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function wt(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!we(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return we(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),w=n(9680),C={};C.styleTagTransform=_(),C.setAttributes=y(),C.insert=m().bind(null,"head"),C.domAPI=f(),C.insertStyleElement=b(),d()(w.c,C),w.c&&w.c.locals&&w.c.locals;var x=n(4632),S=n.n(x),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:w=0})=>{const[C,x]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(w):(0,c.usePostById)(w,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{x(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==w&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==w&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),w)})}),N()]}):null,0!==w&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===w?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,C?(0,r.jsx)(j,{closeModal:()=>{x(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const w=_;var C=n(2108),x=n.n(C),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),x()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[C,x]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{x((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():x([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(w,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:C,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>w.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),w=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},681:function(e,t,n){"use strict";var r=window.wp.blocks,s=window.React,o=n(265),i=window.wp.components,a=window.wp.i18n,l=window.wp.blockEditor,c=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-featured-image","version":"0.1.0","title":"Newsletter Post Featured Image","category":"design","icon":"admin-post","description":"Displays a post featured image","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","style":["file:style-index.css"],"render":"file:render.php","attributes":{"overrideImage":{"type":"number","default":0},"imgSizes":{"type":"string","default":""}},"usesContext":["postId"]}');(0,r.registerBlockType)(c,{edit:function(e){var t;let{attributes:{overrideImage:n},context:{postId:r},setAttributes:c}=e;const u=null!==(t=(0,o.usePostById)(r))&&void 0!==t?t:null;let d=u?u.featured_media:null;const p=u?u.title.rendered:"";d=n||d;const f=(0,o.useMedia)(d),h=f?f.source_url:"";return(0,s.createElement)(s.Fragment,null,(0,s.createElement)("div",{...(0,l.useBlockProps)({className:"image-container"})},u&&""!==h?(0,s.createElement)("img",{src:h,alt:p}):null,u?null:(0,s.createElement)(i.Placeholder,{className:"block-editor-media-placeholder",style:{aspectRatio:"16 / 9"},withIllustration:!0})),(0,s.createElement)(l.InspectorControls,null,r?(0,s.createElement)(i.PanelBody,{title:(0,a.__)("Override Image","wp-newsletter-builder"),initialOpen:!0},(0,s.createElement)(i.PanelRow,null,(0,s.createElement)(o.ImagePicker,{value:null!=n?n:0,onUpdate:e=>{let{id:t}=e;return c({overrideImage:t})},onReset:()=>c({overrideImage:0})}))):null))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={345:0,797:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_block_post = $block->context['postId'] ?? null; + +$wp_newsletter_builder_block_post = get_post( $wp_newsletter_builder_block_post ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} +$wp_newsletter_builder_img_sizes = $attributes['imgSizes'] ?? ''; +$wp_newsletter_builder_post_image = ! empty( $attributes['overrideImage'] ) ? $attributes['overrideImage'] : get_post_thumbnail_id( $wp_newsletter_builder_block_post->ID ); + +$wp_newsletter_builder_post_permalink = (string) get_the_permalink(); +?> + 'post__image-link' ] ) ); ?> href=""> + $wp_newsletter_builder_img_sizes ] ); ?> + diff --git a/build/post-featured-image/style-index.css b/build/post-featured-image/style-index.css new file mode 100644 index 00000000..a7a3213a --- /dev/null +++ b/build/post-featured-image/style-index.css @@ -0,0 +1 @@ +a.post__title-link{color:#000;display:block;margin:20px auto;text-decoration:none}a.post__title-link h2{margin-bottom:0;text-align:center}a.post__title-link h2.post__title--small{font-size:24px} diff --git a/build/post-item/block.json b/build/post-item/block.json new file mode 100644 index 00000000..384f5885 --- /dev/null +++ b/build/post-item/block.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post-item", + "version": "0.1.0", + "title": "Newsletter Post Item", + "category": "design", + "icon": "editor-table", + "description": "Displays a post block inside a table cell.", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php" +} \ No newline at end of file diff --git a/build/post-item/index.asset.php b/build/post-item/index.asset.php new file mode 100644 index 00000000..5f22c83a --- /dev/null +++ b/build/post-item/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks'), 'version' => '90ccb8979d4f2ba493d9'); diff --git a/build/post-item/index.js b/build/post-item/index.js new file mode 100644 index 00000000..f9ada94a --- /dev/null +++ b/build/post-item/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e=window.React,t=window.wp.blocks,n=window.wp.blockEditor;const o=[["wp-newsletter-builder/post",{showContent:!1,showExcerpt:!1,showByline:!1,showCta:!1,order:["image","title","excerpt","content","byline"]}]];var r=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-item","version":"0.1.0","title":"Newsletter Post Item","category":"design","icon":"editor-table","description":"Displays a post block inside a table cell.","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php"}');(0,t.registerBlockType)(r,{apiVersion:2,edit:function(){return(0,e.createElement)("td",{...(0,n.useBlockProps)()},(0,e.createElement)(n.InnerBlocks,{orientation:"horizontal",template:o,templateLock:"all"}))},save:()=>{const t=n.useBlockProps.save();return(0,e.createElement)("td",{...t},(0,e.createElement)(n.InnerBlocks.Content,null))}})}(); \ No newline at end of file diff --git a/build/post-item/index.php b/build/post-item/index.php new file mode 100644 index 00000000..6f975d3d --- /dev/null +++ b/build/post-item/index.php @@ -0,0 +1,21 @@ + -

> - -

-{{/isDynamicVariant}} + array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '92c0e28b18f7ea8e05b6'); diff --git a/build/post-read-more/index.js b/build/post-read-more/index.js new file mode 100644 index 00000000..cda4c0dc --- /dev/null +++ b/build/post-read-more/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,t={712:function(){var e=window.wp.blocks,t=window.React,r=window.wp.i18n,n=window.wp.blockEditor,o=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-read-more","version":"0.1.0","title":"Newsletter Post Read More","category":"design","icon":"admin-post","description":"Displays a post read more button","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","style":["file:style-index.css"],"render":"file:render.php","attributes":{"readMoreText":{"type":"string","default":""}},"usesContext":["postId"]}');(0,e.registerBlockType)(o,{edit:function(e){let{attributes:{readMoreText:o},setAttributes:i}=e;const s=o||(0,r.__)("Read More","wp-newsletter-builder");return(0,t.createElement)("div",{...(0,n.useBlockProps)({className:"newsletter-read-more has-text-align-center"})},(0,t.createElement)(n.RichText,{tagName:"span",className:"read-more-button",value:s,onChange:e=>i({readMoreText:e})}))}})}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.m=t,e=[],n.O=function(t,r,o,i){if(!r){var s=1/0;for(c=0;c=i)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(a=!1,i0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[r,o,i]},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={581:0,201:0};n.O.j=function(t){return 0===e[t]};var t=function(t,r){var o,i,s=r[0],a=r[1],l=r[2],u=0;if(s.some((function(t){return 0!==e[t]}))){for(o in a)n.o(a,o)&&(n.m[o]=a[o]);if(l)var c=l(n)}for(t&&t(r);u. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_block_post = $block->context['postId'] ?? null; + +$wp_newsletter_builder_block_post = get_post( $wp_newsletter_builder_block_post ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} +$wp_newsletter_builder_read_more_text = $attributes['readMoreText'] ?? ''; +if ( empty( $wp_newsletter_builder_read_more_text ) ) { + $wp_newsletter_builder_read_more_text = __( 'Read More', 'wp-newsletter-builder' ); +} +$wp_newsletter_builder_post_permalink = (string) get_the_permalink(); +?> +
'wp-block-button has-text-align-center' ] ) ); ?>> + + + + + +
diff --git a/build/post-read-more/style-index.css b/build/post-read-more/style-index.css new file mode 100644 index 00000000..a7a3213a --- /dev/null +++ b/build/post-read-more/style-index.css @@ -0,0 +1 @@ +a.post__title-link{color:#000;display:block;margin:20px auto;text-decoration:none}a.post__title-link h2{margin-bottom:0;text-align:center}a.post__title-link h2.post__title--small{font-size:24px} diff --git a/build/post-title/block.json b/build/post-title/block.json new file mode 100644 index 00000000..00f74347 --- /dev/null +++ b/build/post-title/block.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post-title", + "version": "0.1.0", + "title": "Newsletter Post Title", + "category": "design", + "icon": "admin-post", + "description": "Displays a post title", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "overrideTitle": { + "type": "string", + "default": "" + }, + "smallerFont": { + "type": "boolean", + "default": false + } + }, + "usesContext": [ + "postId" + ] +} \ No newline at end of file diff --git a/build/post-title/index.asset.php b/build/post-title/index.asset.php new file mode 100644 index 00000000..2f6858f0 --- /dev/null +++ b/build/post-title/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '50630b8ffad9a4d6adef'); diff --git a/build/post-title/index.js b/build/post-title/index.js new file mode 100644 index 00000000..64aa4727 --- /dev/null +++ b/build/post-title/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=C(Array.prototype.forEach),d=C(Array.prototype.pop),p=C(Array.prototype.push),f=C(String.prototype.toLowerCase),h=C(String.prototype.toString),m=C(String.prototype.match),g=C(String.prototype.replace),y=C(String.prototype.indexOf),v=C(String.prototype.trim),b=C(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function x(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return C(n.get);if("function"==typeof n.value)return C(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:C,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=w({},[...k,...E,...R,...I,...P]);let me=null;const ge=w({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,Ce=!1,we=!0,xe=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=w({},["audio","video","img","source","image","track"]);let Fe=null;const ze=w({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=w({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=x(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?w({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?w({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?w({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?w(x(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?w(x(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?w({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?w({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?w({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,Ce=e.ALLOW_UNKNOWN_PROTOCOLS||!1,we=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,xe=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),xe&&(_e=!1),Te&&(Re=!0),je&&(fe=w({},[...P]),me=[],!0===je.html&&(w(fe,k),w(me,O)),!0===je.svg&&(w(fe,E),w(me,L),w(me,D)),!0===je.svgFilters&&(w(fe,R),w(me,L),w(me,D)),!0===je.mathMl&&(w(fe,I),w(me,j),w(me,D))),e.ADD_TAGS&&(fe===he&&(fe=x(fe)),w(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=x(me)),w(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&w(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=x(De)),w(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&w(fe,["html","head","body"]),fe.table&&(w(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=w({},["mi","mo","mn","ms","mtext"]),rt=w({},["foreignobject","desc","title","annotation-xml"]),st=w({},["title","style","font","a","script"]),ot=w({},E);w(ot,R),w(ot,T);const it=w({},I);w(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof C&&e instanceof C},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(xe&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(Ce&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!we&&b(/\/>/i,p)){lt(i,e);continue}xe&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof C)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!xe&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),xe&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,w())C();else{if(C(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function C(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),w()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;w()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=x(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||C.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}C.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),x=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),w.push(e),u=m,q(w),b&&Y()),G()}function W(e){u=e,q(w),w=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:C,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:x+(p||0)}}}function Y(){o(G()),A=[],C=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return w(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?Z(w(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return w(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return w(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return w(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return w(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return w(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:w(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(C(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[w(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[w(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[w(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[w(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,C=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=x(R+=w(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=w(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(w(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],C=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,C);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,C),C),s,C,d,a,r?_:C);break;default:ne(R,k,k,k,[""],C,0,a,C)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+C:w(C,/&\f/g,h[A])))&&(l[b++]=x);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function Ce(e){return"string"==typeof e&&!0}var we="function"==typeof Symbol&&Symbol.for,xe=we?Symbol.for("react.memo"):60115,Se=we?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[xe]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===xe?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function Ct(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!Ce(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return Ce(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),C=n(9680),w={};w.styleTagTransform=_(),w.setAttributes=y(),w.insert=m().bind(null,"head"),w.domAPI=f(),w.insertStyleElement=b(),d()(C.c,w),C.c&&C.c.locals&&C.c.locals;var x=n(4632),S=n.n(x),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:C=0})=>{const[w,x]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(C):(0,c.usePostById)(C,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{x(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==C&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==C&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),C)})}),N()]}):null,0!==C&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===C?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,w?(0,r.jsx)(j,{closeModal:()=>{x(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const C=_;var w=n(2108),x=n.n(w),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),x()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[w,x]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{x((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():x([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(C,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:w,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>C.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),C=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},812:function(e,t,n){"use strict";var r=window.wp.blocks,s=window.React,o=n(265),i=window.wp.i18n,a=window.wp.blockEditor,l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post-title","version":"0.1.0","title":"Newsletter Post Title","category":"design","icon":"admin-post","description":"Displays a post title","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","style":["file:style-index.css"],"render":"file:render.php","attributes":{"overrideTitle":{"type":"string","default":""},"smallerFont":{"type":"boolean","default":false}},"usesContext":["postId"]}');(0,r.registerBlockType)(l,{edit:function(e){var t;let{attributes:{overrideTitle:n,smallerFont:r},context:{postId:l},setAttributes:c}=e;const u=null!==(t=(0,o.usePostById)(l))&&void 0!==t?t:null;let d=u?u.title.rendered:(0,i.__)("Post Title","wp-newsletter-builder");d=n||d;const p=r?"post__title--small":"";return(0,s.createElement)("h2",{...(0,a.useBlockProps)({className:p})},(0,s.createElement)(a.RichText,{value:d,tagName:"span",onChange:e=>c({overrideTitle:e})}))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={969:0,621:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_block_post = $block->context['postId'] ?? null; + +$wp_newsletter_builder_block_post = get_post( $wp_newsletter_builder_block_post ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} +$wp_newsletter_builder_post_title = ! empty( $attributes['overrideTitle'] ) ? $attributes['overrideTitle'] : $wp_newsletter_builder_block_post->post_title; + +$wp_newsletter_builder_smaller_font = $attributes['smallerFont'] ?? false; +$wp_newsletter_builder_title_class = $wp_newsletter_builder_smaller_font ? 'post__title--small' : ''; + +$wp_newsletter_builder_post_permalink = (string) get_the_permalink(); +?> + 'post__title-link' ] ) ); ?> href=""> +

+ + + + +

+
diff --git a/build/post-title/style-index.css b/build/post-title/style-index.css new file mode 100644 index 00000000..1575d7ad --- /dev/null +++ b/build/post-title/style-index.css @@ -0,0 +1 @@ +a.post__title-link{color:#000;display:block;margin:20px auto;text-decoration:none}a.post__title-link h2{margin-bottom:0;text-align:center}a.post__title-link h2.post__title--small{font-size:18px} diff --git a/build/post/block.json b/build/post/block.json new file mode 100644 index 00000000..aa7ae4e6 --- /dev/null +++ b/build/post/block.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/post", + "version": "0.1.0", + "title": "Newsletter Single Post", + "category": "design", + "icon": "admin-post", + "description": "Displays a post", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "postId": { + "type": "number", + "default": 0 + }, + "postType": { + "type": "string", + "default": "post" + }, + "overrideUrl": { + "type": "string", + "default": "" + } + }, + "providesContext": { + "postId": "postId", + "postType": "postType", + "queryId": "0", + "overrideUrl": "overrideUrl" + } +} \ No newline at end of file diff --git a/build/post/index.asset.php b/build/post/index.asset.php new file mode 100644 index 00000000..6f61696a --- /dev/null +++ b/build/post/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-i18n'), 'version' => '5100400aebe8ab217b74'); diff --git a/build/post/index.css b/build/post/index.css new file mode 100644 index 00000000..b3867829 --- /dev/null +++ b/build/post/index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-post{font-family:Georgia,serif;margin:0 auto}.wp-block-wp-newsletter-builder-post .newsletter-remove-post{border-radius:50%;display:flex;height:36px;margin:0;place-content:center;position:absolute;right:3px;top:3px;width:36px;z-index:1}.wp-block-wp-newsletter-builder-post.edit-nb_template{border:1px dashed #ddd;padding:.5rem}.wp-block-wp-newsletter-builder-post.edit-nb_template .block-list-appender{display:block;position:relative}.image-container{line-height:0}.newsletter-read-more{margin-bottom:30px} diff --git a/build/post/index.js b/build/post/index.js new file mode 100644 index 00000000..cff58cdd --- /dev/null +++ b/build/post/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=w(Array.prototype.forEach),d=w(Array.prototype.pop),p=w(Array.prototype.push),f=w(String.prototype.toLowerCase),h=w(String.prototype.toString),m=w(String.prototype.match),g=w(String.prototype.replace),y=w(String.prototype.indexOf),v=w(String.prototype.trim),b=w(RegExp.prototype.test),A=(_=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function x(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return w(n.get);if("function"==typeof n.value)return w(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),P=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),N=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:_,Node:w,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,Y=S(H,"cloneNode"),V=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof _){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=C({},[...k,...E,...R,...I,...N]);let me=null;const ge=C({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,Ae=!0,_e=!0,we=!1,Ce=!0,xe=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Pe=!0,Ne=!1,Oe=!0,Le=!1,je={},De=null;const Ue=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=C({},["audio","video","img","source","image","track"]);let Fe=null;const ze=C({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ye=null;const Ve=C({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=x(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?C({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?C({},e.ALLOWED_ATTR,Je):ge,Ye="ALLOWED_NAMESPACES"in e?C({},e.ALLOWED_NAMESPACES,h):Ve,Fe="ADD_URI_SAFE_ATTR"in e?C(x(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?C(x(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?C({},e.FORBID_CONTENTS,Je):Ue,ve="FORBID_TAGS"in e?C({},e.FORBID_TAGS,Je):{},be="FORBID_ATTR"in e?C({},e.FORBID_ATTR,Je):{},je="USE_PROFILES"in e&&e.USE_PROFILES,Ae=!1!==e.ALLOW_ARIA_ATTR,_e=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,xe=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Pe=!1!==e.SANITIZE_DOM,Ne=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),xe&&(_e=!1),Te&&(Re=!0),je&&(fe=C({},[...N]),me=[],!0===je.html&&(C(fe,k),C(me,O)),!0===je.svg&&(C(fe,E),C(me,L),C(me,D)),!0===je.svgFilters&&(C(fe,R),C(me,L),C(me,D)),!0===je.mathMl&&(C(fe,I),C(me,j),C(me,D))),e.ADD_TAGS&&(fe===he&&(fe=x(fe)),C(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=x(me)),C(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&C(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=x(De)),C(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&C(fe,["html","head","body"]),fe.table&&(C(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw A('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},nt=C({},["mi","mo","mn","ms","mtext"]),rt=C({},["foreignobject","desc","title","annotation-xml"]),st=C({},["title","style","font","a","script"]),ot=C({},E);C(ot,R),C(ot,T);const it=C({},I);C(it,P);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=J?J.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof w&&e instanceof w},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(Y(n[r],!0),V(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ye[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(xe&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Pe&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(_e&&!be[t]&&b(le,t));else if(Ae&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(we&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!Ce&&b(/\/>/i,p)){lt(i,e);continue}xe&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Ne||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!r.isSupported)return e;if(ke||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||ve[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!xe&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?X:""}n&&Ee&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),xe&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},r.clearConfig=function(){Xe=null,ke=!1},r.isValidAttribute=function(e,t,n){Xe||tt({});const r=Je(e),s=Je(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(_(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!_(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=_(r.step),r.chunk=_(r.chunk),r.complete=_(r.complete),r.error=_(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&_(n.read)&&_(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(_(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!_(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){_(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=A(this._chunkLoaded,this),t.onerror=A(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=A((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=A((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=A((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=A((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(_(e.step)){var v=e.step;e.step=function(t){if(y=t,C())w();else{if(w(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function A(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function w(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!A(e)}))),C()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;C()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=x(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)_(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||w.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:A.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}w.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:A.length,index:u}),B++}}else B++}return H();function q(e){A.push(e),x=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),C.push(e),u=m,q(C),b&&Y()),G()}function W(e){u=e,q(C),C=[],U=i.indexOf(r,u)}function G(e){return{data:A,errors:w,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:x+(p||0)}}}function Y(){o(G()),A=[],w=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(_(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function Y(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function V(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&V(j);break;case 40:41===e&&V(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function J(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return C(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?Z(C(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return C(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return C(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return C(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return C(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return C(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return J([M(e,{value:C(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(w(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[C(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[C(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[C(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),A(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return P=N=1,O=E(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,A="",_=s,w=o,k=r,R=A;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=x(R+=C(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=Y(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=C(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(C(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(k=re(R,t,n,c,u,s,a,A,_=[],w=[],d,o),o),123===v)if(0===u)ne(R,t,k,k,_,o,d,a,w);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,k,k,r&&T(re(e,k,k,0,0,s,a,A,s,_=[],d,w),w),s,w,d,a,r?_:w);break;default:ne(R,k,k,k,[""],w,0,a,w)}}c=u=f=0,m=y=1,A=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,N--,10===j&&(N=1,P--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(A=R+=Q(q())),v++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[A]+" "+w:C(w,/&\f/g,h[A])))&&(l[b++]=x);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),k(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,k(e,0,r),k(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,Ae=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},_e=function(e){return Ae(5381,e)};function we(e){return"string"==typeof e&&!0}var Ce="function"==typeof Symbol&&Symbol.for,xe=Ce?Symbol.for("react.memo"):60115,Se=Ce?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[xe]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===xe?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Pe=Object.defineProperty,Ne=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Ne(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function wt(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=Ae(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Pt(e,t,n){var s=Be(e),a=e,l=!we(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(_e(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return we(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var A=new Rt(n,m,s?a.componentStyle:void 0);function _(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const A=b?(0,d.getMediaUrl)(b,s):v;return A?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:A}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:A,children:A})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:A,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:A}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),A=n(9296),_=n.n(A),w=n(9680),C={};C.styleTagTransform=_(),C.setAttributes=y(),C.insert=m().bind(null,"head"),C.domAPI=f(),C.insertStyleElement=b(),d()(w.c,C),w.c&&w.c.locals&&w.c.locals;var x=n(4632),S=n.n(x),k=n(6484),E=n.n(k),R=n(7424),T={};T.styleTagTransform=_(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var P=n(9160);const N=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(N,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(P.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),A=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),A(v,e)),()=>{e=!0}}),[A,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),A(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),A(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=_(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:A=[],title:_="",value:w=0})=>{const[C,x]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(w):(0,c.usePostById)(w,n),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{x(!0)},P=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==w&&null===k?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[_?(0,r.jsx)("h4",{children:_}):null,0!==w&&void 0===k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),w)})}),P()]}):null,0!==w&&void 0!==k?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(k):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:E})}),P()]}):null,0===w?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,C?(0,r.jsx)(j,{closeModal:()=>{x(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:A}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var A=n(2e3);const _=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};_.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const w=_;var C=n(2108),x=n.n(C),S=n(7020),k=n.n(S),E=n(7240),R=n.n(E),T=n(9516),I=n.n(T),P=n(2940),N=n.n(P),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=N(),x()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,_]=(0,i.useState)(""),[C,x]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[P,N]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,A.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{x((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&P.length>0)&&j(t+1)})).catch((e=>_(e.message)))}),[L,e,o,a,h,P.length,g]);(0,i.useEffect)((()=>{N(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():x([])}),[L,j,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(P.some((t=>t.id===e.id))){const n=P.findIndex((t=>t.id===e.id));t=[...P.slice(0,n),...P.slice(n+1,P.length)]}else a?t=[...P,e]:(t=[e],k(!1));N(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),P.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:P.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(w,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&L,onSelect:M,options:C,selectedItems:P,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>A.default,useTerm:()=>_.default,useTerms:()=>w.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),A=n(7532),_=n(7712),w=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},990:function(e,t,n){"use strict";var r=window.React,s=window.wp.blocks,o=window.wp.blockEditor,i=window.wp.i18n,a=n(265),l=window.wp.data,c=window.wp.components;const{newsletterBuilder:{allowedPostTypes:u=["post"]}={}}=window;var d=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/post","version":"0.1.0","title":"Newsletter Single Post","category":"design","icon":"admin-post","description":"Displays a post","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"postId":{"type":"number","default":0},"postType":{"type":"string","default":"post"},"overrideUrl":{"type":"string","default":""}},"providesContext":{"postId":"postId","postType":"postType","queryId":"0","overrideUrl":"overrideUrl"}}');(0,s.registerBlockType)(d,{edit:function(e){let{attributes:{postId:t=0,overrideUrl:n=""},setAttributes:s}=e;const d=e=>{s({postId:e})},p=(0,l.useSelect)((e=>e("core/editor").getCurrentPostType()),[]);return(0,r.createElement)("div",{...(0,o.useBlockProps)({className:`edit-${p}`})},t&&"nb_template"!==p?(0,r.createElement)(r.Fragment,null,(0,r.createElement)(c.Button,{variant:"primary",isDestructive:!0,onClick:()=>d(0),className:"newsletter-remove-post","aria-label":(0,i.__)("Remove Post","wp-newsletter-builder")},"X")):null,t||"nb_template"===p?null:(0,r.createElement)("div",null,(0,r.createElement)(a.PostPicker,{onUpdate:d,allowedTypes:u,onReset:()=>d(0),params:{per_page:20},title:(0,i.__)("Please select a post","wp-newsletter-builder"),value:t})),t||"nb_template"===p?(0,r.createElement)("table",{role:"presentation"},(0,r.createElement)("tbody",null,(0,r.createElement)("tr",null,(0,r.createElement)("td",null,(0,r.createElement)(o.InnerBlocks,{template:[["wp-newsletter-builder/post-featured-image",{}],["wp-newsletter-builder/post-title",{}],["wp-newsletter-builder/post-byline",{}],["wp-newsletter-builder/post-excerpt",{}],["wp-newsletter-builder/post-read-more",{}]],allowedBlocks:["wp-newsletter-builder/post-byline","wp-newsletter-builder/post-content","wp-newsletter-builder/post-excerpt","wp-newsletter-builder/post-featured-image","wp-newsletter-builder/post-read-more","wp-newsletter-builder/post-title"],templateLock:!1}))))):null,(0,r.createElement)(o.InspectorControls,null,t?(0,r.createElement)(c.PanelBody,{title:(0,i.__)("Override URL","wp-newsletter-builder"),initialOpen:!0},(0,r.createElement)(c.PanelRow,null,(0,r.createElement)(c.TextControl,{value:null!=n?n:"",onChange:e=>s({overrideUrl:e}),type:"url"}))):null))},save:()=>{const e=o.useBlockProps.save();return(0,r.createElement)("table",{...e,role:"presentation"},(0,r.createElement)("tbody",null,(0,r.createElement)("tr",null,(0,r.createElement)(o.InnerBlocks.Content,null))))}})}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={588:0,500:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +if ( empty( $attributes['postId'] ) ) { + return; +} + +$wp_newsletter_builder_block_post = get_post( $attributes['postId'] ); +if ( empty( $wp_newsletter_builder_block_post ) ) { + return; +} + +?> +
> + +
diff --git a/build/post/style-index.css b/build/post/style-index.css new file mode 100644 index 00000000..6404a2e2 --- /dev/null +++ b/build/post/style-index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-post>*{margin:15px 0}.wp-block-wp-newsletter-builder-post .post__title-link{color:#000;display:block;margin:20px auto;text-decoration:none}.wp-block-wp-newsletter-builder-post h2{margin-bottom:0;text-align:center}.wp-block-wp-newsletter-builder-post h2.post__title--small{font-size:24px}.wp-block-wp-newsletter-builder-post .post__byline{font-family:Georgia,serif;font-size:15px;font-weight:700;text-align:center}.wp-block-wp-newsletter-builder-post .post__image-link{display:block;margin:20px auto}.wp-block-wp-newsletter-builder-post .wp-block-button{margin:20px auto}.wp-block-wp-newsletter-builder-post .newsletter-post__number{color:#d62827}.wp-block-wp-newsletter-builder-post table{width:100%}.wp-block-wp-newsletter-builder-post li{font-size:16px} diff --git a/build/section/block.json b/build/section/block.json new file mode 100644 index 00000000..7b0983ff --- /dev/null +++ b/build/section/block.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/section", + "version": "0.1.0", + "title": "Newsletter Section", + "category": "design", + "icon": "layout", + "description": "Section to contain other blocks and allow for choosing multiple posts.", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "attributes": { + "showNumbers": { + "type": "boolean", + "default": false + }, + "heading": { + "type": "string", + "default": "" + }, + "adAfter": { + "type": "boolean", + "default": false + } + } +} \ No newline at end of file diff --git a/build/section/index.asset.php b/build/section/index.asset.php new file mode 100644 index 00000000..a9d4abfc --- /dev/null +++ b/build/section/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '2177b7d37d0f544195d1'); diff --git a/build/section/index.css b/build/section/index.css new file mode 100644 index 00000000..e7750993 --- /dev/null +++ b/build/section/index.css @@ -0,0 +1,5 @@ +.components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}.nb-multi-post-picker-modal{display:flex;flex-direction:row;height:90%;justify-content:space-between;margin-bottom:10px;width:100%}.nb-multi-post-picker-modal__search-results,.nb-multi-post-picker-modal__selected{border:1px solid #ccc;height:100%;padding:5px;width:49%} +.nb-multi-post-picker-modal .alley-scripts-post-picker__post-list{float:left;height:calc(70vh - 250px);overflow-y:auto}.alley-scripts-post-picker__post{align-items:center;border:1px solid #eee;display:flex;float:left;height:150px;margin:5px;overflow:hidden;padding:.5rem .75rem;transition:background-color .2s ease-in-out;width:150px}.alley-scripts-post-picker__post.is-selected,.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%} +.nb-multi-post-picker-modal .alley-scripts-post-picker__post-list.nb-sortable-list{height:calc(70vh - 170px);width:100%}.nb-post-picker-draggable{align-items:center;border:1px solid #ccc;display:flex;flex-direction:row;margin:5px 0;min-height:60px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nb-post-picker-draggable>span{cursor:move;height:100%} +.post-type-nb_newsletter .alley-scripts-post-picker__post-list .alley-scripts-post-picker__post{height:auto;padding:0 5px 0 0}.post-type-nb_newsletter .nb-post-picker-result{align-items:center;display:flex;flex-direction:row;gap:10px;justify-content:flex-start;width:100%}.post-type-nb_newsletter .nb-post-picker-result-image__container{height:56px;width:100px}.post-type-nb_newsletter .nb-post-picker-result-image__container img{max-height:56px;max-width:100px}.post-type-nb_newsletter .nb-post-picker-result-title{font-weight:600;margin:5px 0;text-align:left}.post-type-nb_newsletter .nb-post-picker-result-date{margin-left:auto;text-align:right} +.wp-block-wp-newsletter-builder-section{border:1px dashed #ccc;padding:2px} diff --git a/build/section/index.js b/build/section/index.js new file mode 100644 index 00000000..c1ed4e26 --- /dev/null +++ b/build/section/index.js @@ -0,0 +1,42 @@ +!function(){var e,t={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(2876),s=n.n(r),o=n(1849),i=n.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,n){return e.apply(t,n)}),c||(c=function(e,t){return new e(...t)});const u=w(Array.prototype.forEach),d=w(Array.prototype.pop),p=w(Array.prototype.push),f=w(String.prototype.toLowerCase),h=w(String.prototype.toString),m=w(String.prototype.match),g=w(String.prototype.replace),y=w(String.prototype.indexOf),v=w(String.prototype.trim),b=w(RegExp.prototype.test),_=(A=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=r.length;for(;o--;){let t=r[o];if("string"==typeof t){const e=s(t);e!==t&&(n(r)||(r[o]=e),t=e)}e[t]=!0}return e}function C(t){const n=a(null);for(const[r,o]of e(t))void 0!==s(t,r)&&(n[r]=o);return n}function S(e,t){for(;null!==e;){const n=s(e,t);if(n){if(n.get)return w(n.get);if("function"==typeof n.value)return w(n.value)}e=r(e)}return function(e){return console.warn("fallback value for",e),null}}const E=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),k=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),H=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:H,DOCTYPE_NAME:W});return function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const r=e=>t(e);if(r.version="3.0.6",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;let{document:s}=n;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:A,Node:w,Element:U,NodeFilter:M,NamedNodeMap:B=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:$}=n,H=U.prototype,V=S(H,"cloneNode"),Y=S(H,"nextSibling"),K=S(H,"childNodes"),Q=S(H,"parentNode");if("function"==typeof A){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let X,J="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=s,{importNode:re}=i;let se={};r.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=x({},[...E,...k,...R,...I,...P]);let me=null;const ge=x({},[...O,...L,...j,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,_e=!0,Ae=!0,we=!1,xe=!0,Ce=!1,Se=!1,Ee=!1,ke=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,Le=!1,je={},De=null;const Ue=x({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=x({},["audio","video","img","source","image","track"]);let Fe=null;const ze=x({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",He="http://www.w3.org/1999/xhtml";let We=He,Ge=!1,Ve=null;const Ye=x({},[qe,$e,He],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Xe=null,Je=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Je||Je!==e){if(e&&"object"==typeof e||(e={}),e=C(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Xe="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?x({},e.ALLOWED_TAGS,Xe):he,me="ALLOWED_ATTR"in e?x({},e.ALLOWED_ATTR,Xe):ge,Ve="ALLOWED_NAMESPACES"in e?x({},e.ALLOWED_NAMESPACES,h):Ye,Fe="ADD_URI_SAFE_ATTR"in e?x(C(ze),e.ADD_URI_SAFE_ATTR,Xe):ze,Me="ADD_DATA_URI_TAGS"in e?x(C(Be),e.ADD_DATA_URI_TAGS,Xe):Be,De="FORBID_CONTENTS"in e?x({},e.FORBID_CONTENTS,Xe):Ue,ve="FORBID_TAGS"in e?x({},e.FORBID_TAGS,Xe):{},be="FORBID_ATTR"in e?x({},e.FORBID_ATTR,Xe):{},je="USE_PROFILES"in e&&e.USE_PROFILES,_e=!1!==e.ALLOW_ARIA_ATTR,Ae=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,xe=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Ce=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,ke=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,Le=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||He,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ce&&(Ae=!1),Te&&(Re=!0),je&&(fe=x({},[...P]),me=[],!0===je.html&&(x(fe,E),x(me,O)),!0===je.svg&&(x(fe,k),x(me,L),x(me,D)),!0===je.svgFilters&&(x(fe,R),x(me,L),x(me,D)),!0===je.mathMl&&(x(fe,I),x(me,j),x(me,D))),e.ADD_TAGS&&(fe===he&&(fe=C(fe)),x(fe,e.ADD_TAGS,Xe)),e.ADD_ATTR&&(me===ge&&(me=C(me)),x(me,e.ADD_ATTR,Xe)),e.ADD_URI_SAFE_ATTR&&x(Fe,e.ADD_URI_SAFE_ATTR,Xe),e.FORBID_CONTENTS&&(De===Ue&&(De=C(De)),x(De,e.FORBID_CONTENTS,Xe)),Oe&&(fe["#text"]=!0),Se&&x(fe,["html","head","body"]),fe.table&&(x(fe,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');X=e.TRUSTED_TYPES_POLICY,J=X.createHTML("")}else void 0===X&&(X=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}($,l)),null!==X&&"string"==typeof J&&(J=X.createHTML(""));o&&o(e),Je=e}},nt=x({},["mi","mo","mn","ms","mtext"]),rt=x({},["foreignobject","desc","title","annotation-xml"]),st=x({},["title","style","font","a","script"]),ot=x({},k);x(ot,R),x(ot,T);const it=x({},I);x(it,N);const at=function(e){p(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,n=null;if(ke)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ke&&We===He&&(e=''+e+"");const r=X?X.createHTML(e):e;if(We===He)try{t=(new z).parseFromString(r,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?J:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(s.createTextNode(n),o.childNodes[0]||null),We===He?ne.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof w&&e instanceof w},pt=function(e,t,n){se[e]&&u(se[e],(e=>{e.call(r,t,n,Je)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(n=e)instanceof F&&("string"!=typeof n.nodeName||"string"!=typeof n.textContent||"function"!=typeof n.removeChild||!(n.attributes instanceof B)||"function"!=typeof n.removeAttribute||"function"!=typeof n.setAttribute||"string"!=typeof n.namespaceURI||"function"!=typeof n.insertBefore||"function"!=typeof n.hasChildNodes))return at(e),!0;var n;const s=Xe(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||ve[s]){if(!ve[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,n=K(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(V(n[r],!0),Y(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const n=f(e.tagName),r=f(t.tagName);return!!Ve[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===He?"svg"===n:t.namespaceURI===qe?"svg"===n&&("annotation-xml"===r||nt[r]):Boolean(ot[n]):e.namespaceURI===qe?t.namespaceURI===He?"math"===n:t.namespaceURI===$e?"math"===n&&rt[r]:Boolean(it[n]):e.namespaceURI===He?!(t.namespaceURI===$e&&!rt[r])&&!(t.namespaceURI===qe&&!nt[r])&&!it[n]&&(st[n]||!ot[n]):!("application/xhtml+xml"!==Ke||!Ve[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!b(/<\/no(script|embed|frames)/i,e.innerHTML)?(Ce&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(r.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in s||n in Ze))return!1;if(Ae&&!be[t]&&b(le,t));else if(_e&&b(ce,t));else if(!me[t]||be[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(Fe[t]);else if(b(pe,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Me[e])if(we&&!b(ue,g(n,de,"")));else if(n)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Xe(i);let p="value"===i?l:v(l);if(n.attrName=c,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(lt(i,e),!n.keepAttr)continue;if(!xe&&b(/\/>/i,p)){lt(i,e);continue}Ce&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Xe(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),X&&"object"==typeof $&&"function"==typeof $.getAttributeType)if(a);else switch($.getAttributeType(f,c)){case"TrustedHTML":p=X.createHTML(p);break;case"TrustedScriptURL":p=X.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(r.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let n=null;const r=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)pt("uponSanitizeShadowNode",n,null),ft(n)||(n.content instanceof c&&e(n.content),gt(n));pt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw _("toString is not a function");if("string"!=typeof(e=e.toString()))throw _("dirty is not a string, aborting")}if(!r.isSupported)return e;if(Ee||tt(t),r.removed=[],"string"==typeof e&&(Le=!1),Le){if(e.nodeName){const t=Xe(e.nodeName);if(!fe[t]||ve[t])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)n=ct("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!Re&&!Ce&&!Se&&-1===e.indexOf("<"))return X&&Ie?X.createHTML(e):e;if(n=ct(e),!n)return Re?null:Ie?J:""}n&&ke&&at(n.firstChild);const l=ut(Le?e:n);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(Le)return e;if(Re){if(Te)for(a=te.call(n.ownerDocument);n.firstChild;)a.appendChild(n.firstChild);else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=re.call(i,a,!0)),a}let d=Se?n.outerHTML:n.innerHTML;return Se&&fe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&b(W,n.ownerDocument.doctype.name)&&(d="\n"+d),Ce&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),X&&Ie?X.createHTML(d):d},r.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ee=!0},r.clearConfig=function(){Je=null,Ee=!1},r.isValidAttribute=function(e,t,n){Je||tt({});const r=Xe(e),s=Xe(t);return ht(r,s,n)},r.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},r.removeHook=function(e){if(se[e])return d(se[e])},r.removeHooks=function(e){se[e]&&(se[e]=[])},r.removeAllHooks=function(){se={}},r}()}()},2232:function(e,t){var n,r;n=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},n=!t.document&&!!t.postMessage,r=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(n,r){var a=(r=r||{}).dynamicTyping||!1;if(A(a)&&(r.dynamicTypingFunction=a,a={}),r.dynamicTyping=a,r.transform=!!A(r.transform)&&r.transform,r.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var n,r,a=(n=t.URL||t.webkitURL||null,r=e.toString(),i.BLOB_URL||(i.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",r,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=r.step,l.userChunk=r.chunk,l.userComplete=r.complete,l.userError=r.error,r.step=A(r.step),r.chunk=A(r.chunk),r.complete=A(r.complete),r.error=A(r.error),delete r.worker,void l.postMessage({input:n,config:r,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof n?(n=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(n),f=r.download?new c(r):new d(r)):!0===n.readable&&A(n.read)&&A(n.on)?f=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(f=new u(r)),f.stream(n)},unparse:function(e,t){var n=!1,r=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(r=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,n){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(r)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(A(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!A(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){A(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=_(this._chunkLoaded,this),t.onerror=_(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=_(this._chunkLoaded,this),t.onerror=_(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=_((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=_((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=_((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=_((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(A(e.step)){var v=e.step;e.step=function(t){if(y=t,x())w();else{if(w(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],v(y,c))}}}function _(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function w(){return y&&r&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!_(e)}))),x()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;x()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(i=e.transform(i,o)),i=C(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(r>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(s,l)),r=!1,e.delimiter)A(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||w.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:_.length,index:u}),H();if(B===m-1)return H(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}w.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:_.length,index:u}),B++}}else B++}return H();function q(e){_.push(e),C=u}function $(e){var t=0;if(-1!==e){var n=i.substring(B+1,e);n&&""===n.trim()&&(t=n.length)}return t}function H(e){return f||(void 0===e&&(e=i.substring(u)),x.push(e),u=m,q(x),b&&V()),G()}function W(e){u=e,q(x),x=[],U=i.indexOf(r,u)}function G(e){return{data:_,errors:w,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:C+(p||0)}}}function V(){o(G()),_=[],w=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=s[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(A(n.userStep)){for(var i=0;i{"use strict";var r=n(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,n,s,o,i){if(i!==r){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return n.PropTypes=n,n}},900:(e,t,n)=>{e.exports=n(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,n)=>{"use strict";var r=n(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,n)=>{"use strict";e.exports=n(4108)},3736:e=>{e.exports=function(e,t,n,r){var s=n?n.call(r,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var s=void 0!==n.layer;s&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,s&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,n)=>{"use strict";n.d(t,{cp:()=>Ut});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2||H(j)>3?"":" "}function V(e,t){for(;--t&&F()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return $(e,q()+(t<6&&32==z()&&32==F()))}function Y(e){for(;F();)switch(j){case e:return L;case 34:case 39:34!==e&&39!==e&&Y(j);break;case 40:41===e&&Y(e);break;case 92:F()}return L}function K(e,t){for(;F()&&e+j!==57&&(e+j!==84||47!==z()););return"/*"+$(t,L-1)+"*"+b(47===e?e:F())}function Q(e){for(;!H(z());)F();return $(e,L)}function X(e,t){for(var n="",r=0;r6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return x(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~C(e,"stretch")?Z(x(e,"stretch","fill-available"),t,n)+e:e}break;case 5152:case 5920:return x(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,n,r,s,o,i,a){return c+n+":"+r+a+(s?c+n+"-span:"+(o?i:+i-+r)+a:"")+e}));case 4949:if(121===S(e,t+6))return x(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return x(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return x(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return x(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,n));case g:return X([M(e,{value:x(e.value,"@","@"+d)})],r);case f:if(e.length)return function(e,t){return e.map(t).join("")}(n=e.props,(function(t){switch(w(t,r=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[x(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),_(e,{props:I(n,r)});break;case"::placeholder":B(M(e,{props:[x(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[x(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[x(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),_(e,{props:I(n,r)})}return""}))}}function te(e){return function(e){return D="",e}(ne("",null,null,null,[""],e=function(e){return N=P=1,O=k(D=e),L=0,[]}(e),0,[0],e))}function ne(e,t,n,r,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,v=0,_="",A=s,w=o,E=r,R=_;g;)switch(h=v,v=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=C(R+=x(W(v),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(v);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=V(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,n,l),l);break;default:R+="/"}break;case 123*m:a[c++]=k(R)*y;case 125*m:case 59:case 0:switch(v){case 0:case 125:g=0;case 59+u:-1==y&&(R=x(R,/\f/g,"")),f>0&&k(R)-d&&T(f>32?oe(R+";",r,n,d-1,l):oe(x(R," ","")+";",r,n,d-2,l),l);break;case 59:R+=";";default:if(T(E=re(R,t,n,c,u,s,a,_,A=[],w=[],d,o),o),123===v)if(0===u)ne(R,t,E,E,A,o,d,a,w);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:ne(e,E,E,r&&T(re(e,E,E,0,0,s,a,_,s,A=[],d,w),w),s,w,d,a,r?A:w);break;default:ne(R,E,E,E,[""],w,0,a,w)}}c=u=f=0,m=y=1,_=R="",d=i;break;case 58:d=1+k(R),f=h;default:if(m<1)if(123==v)--m;else if(125==v&&0==m++&&125==(j=L>0?S(D,--L):0,P--,10===j&&(P=1,N--),j))continue;switch(R+=b(v),v*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(k(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=k(_=R+=Q(q())),v++;break;case 45:45===h&&2==k(R)&&(m=0)}}return o}function re(e,t,n,r,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,b=0;g0?h[_]+" "+w:x(w,/&\f/g,h[_])))&&(l[b++]=C);return U(e,t,n,0===s?f:a,l,c,u,d)}function se(e,t,n,r){return U(e,t,n,p,b(j),E(e,2,-2),0,r)}function oe(e,t,n,r,s){return U(e,t,n,h,E(e,0,r),E(e,r+1,-1),r,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function ve(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=ye(t%52)+n;return(ye(t%52)+n).replace(ge,"$1-$2")}var be,_e=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},Ae=function(e){return _e(5381,e)};function we(e){return"string"==typeof e&&!0}var xe="function"==typeof Symbol&&Symbol.for,Ce=xe?Symbol.for("react.memo"):60115,Se=xe?Symbol.for("react.forward_ref"):60112,Ee={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},ke={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((be={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},be[Ce]=Re,be);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===Ce?Re:"$$typeof"in e?Te[e.$$typeof]:Ee;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,Le=Object.getOwnPropertyDescriptor,je=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,n){if("string"!=typeof t){if(De){var r=je(t);r&&r!==De&&Ue(e,r,n)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,s=r;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(n),this.length=s;for(var o=r;o=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),s=r+n,o=r;o=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),r+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,n).replace(r,c))})),i.prefix&&u.push(ee),u.push(J);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,n=s,r=new RegExp("\\".concat(n,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return X(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,n,r){for(var s="",o=0;o="A"&&e<="Z"};function wt(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,o)){var i=n(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}r=Fe(r,o),this.staticRulesId=o}else{for(var a=_e(this.baseHash,n.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,n(l,".".concat(p),void 0,this.componentId)),r=Fe(r,p)}}return r},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,n){var s=Be(e),a=e,l=!we(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var n="string"!=typeof e?"sc":me(e);It[n]=(It[n]||0)+1;var r="".concat(n,"-").concat(function(e){return ve(Ae(e)>>>0)}("6.1.1"+n+It[n]));return t?"".concat(t,"-").concat(r):r}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return we(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var b=t.shouldForwardProp;y=function(e,t){return v(e,t)&&b(e,t)}}else y=v}var _=new Rt(n,m,s?a.componentStyle:void 0);function A(e,t){return function(e,t,n){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=vt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,n){for(var s,o=r(r({},t),{className:void 0,theme:n}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),n=nt(),r=ze([n&&'nonce="'.concat(n,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var n=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=nt();return s&&(n.nonce=s),[i().createElement("style",r({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(bt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(7e3),s=n(900),o=n.n(s),i=n(7287);const a=({label:e,value:t,options:n,onChange:s})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.BaseControl,{label:e}),n.map((e=>(0,r.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:n=>{s(n?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,n)=>{"use strict";n.d(t,{default:()=>u});var r=n(7e3),s=n(1280),o=n.n(s),i=n(3396),a=n(900),l=n.n(a),c=n(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:n,setAttributes:r}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>n?n(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),r({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,r.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,r.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,r.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,r.jsxs)("div",{style:{color:"#c00"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,r.jsxs)("div",{style:{color:"#0c0"},children:[(0,r.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,r.jsx)("div",{children:(0,r.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,r.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,r.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,n)=>{"use strict";n.d(t,{default:()=>p});var r=n(7e3),s=n(3396),o=n(900),i=n.n(o),a=n(3376),l=n(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,r.jsx)(c,{children:(0,r.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,r.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:n,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,n)=>{"use strict";n.d(t,{AudioPicker:()=>r.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var r=n(4928),s=n(2312),o=n(8312),i=n(8348),a=n(5680),l=n(9160),c=n(4808),u=n(8800),d=n(9064),p=n(8504),f=n(1917),h=n(668),m=n(5316)},5680:(e,t,n)=>{"use strict";n.d(t,{default:()=>m});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(9528),l=n(7287),c=n(7752),u=n(3396),d=n(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:n,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:v})=>{const{media:b}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===b)return(0,r.jsx)(l.Spinner,{});const _=b?(0,d.getMediaUrl)(b,s):v;return _?(0,r.jsxs)(p,{className:t,children:[g?(0,r.jsx)(g,{src:_}):(0,r.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,r.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,r.jsx)("p",{children:(0,r.jsx)("a",{href:_,children:_})})]}),o?(0,r.jsx)(a.BlockControls,{group:"other",children:(0,r.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:_,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,r.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,r.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,r.jsx)(p,{className:t,children:(0,r.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!v,icon:(0,r.jsx)(a.BlockIcon,{icon:n}),onSelect:h,onSelectURL:m,value:{id:y,src:_}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,n)=>{"use strict";n.d(t,{default:()=>F});var r=n(7e3),s=n(1280),o=n(3376),i=n(7287),a=n(3396),l=n(7204),c=n(2e3),u=n(2108),d=n.n(u),p=n(7020),f=n.n(p),h=n(7240),m=n.n(h),g=n(9516),y=n.n(g),v=n(2940),b=n.n(v),_=n(9296),A=n.n(_),w=n(9680),x={};x.styleTagTransform=A(),x.setAttributes=y(),x.insert=m().bind(null,"head"),x.domAPI=f(),x.insertStyleElement=b(),d()(w.c,x),w.c&&w.c.locals&&w.c.locals;var C=n(4632),S=n.n(C),E=n(6484),k=n.n(E),R=n(7424),T={};T.styleTagTransform=A(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=b(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=n(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:n})=>{const s=(0,c.useMedia)(n),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,r.jsxs)(P,{children:[o?(0,r.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,r.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},L=({baseUrl:e,searchRender:t,selected:n,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)({searchValue:"",page:1}),_=(0,s.useCallback)((async(t,n=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const r=function(){let n=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(n=(0,l.addQueryArgs)(n,{search:t.searchValue})),n}();d(!0);const s=await S()({path:r,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),n||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),_(v,e)),()=>{e=!0}}),[_,h,v]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.TextControl,{value:v.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...v,searchValue:e,page:1};b(t),_(t)}}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,r.jsx)(i.Button,{className:k()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===n}),onClick:()=>o(e.id),children:t?t(e):(0,r.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,r.jsx)(i.Spinner,{}):null,g>0&&v.page{const e={...v,page:v.page+1};b(e),_(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},j=({baseUrl:e,closeModal:t,modalTitle:n,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,r.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:n,onRequestClose:t,closeButtonLabel:"Close",children:[(0,r.jsx)(L,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,r.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,r.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=n(3800),U={};U.styleTagTransform=A(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=b(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:n,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:v,selectText:b=(0,a.__)("Select","alley-scripts"),suppressPostIds:_=[],title:A="",value:w=0})=>{const[x,C]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),E=f?f(w):(0,c.usePostById)(w,n),{featured_media:k,title:{rendered:R=""}={},type:T=""}=E||{},I=()=>{C(!0)},N=()=>(0,r.jsxs)(i.ButtonGroup,{children:[(0,r.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,r.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==w&&null===E?(0,r.jsx)(i.Spinner,{}):(0,r.jsxs)(M,{className:t,children:[A?(0,r.jsx)("h4",{children:A}):null,0!==w&&void 0===E?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,r.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),w)})}),N()]}):null,0!==w&&void 0!==E?(0,r.jsxs)(r.Fragment,{children:[void 0!==h?h(E):(0,r.jsx)(B,{children:(0,r.jsx)(O,{title:R,postType:T,attachmentID:k})}),N()]}):null,0===w?(0,r.jsx)(i.Button,{onClick:I,variant:"secondary",children:b}):null,x?(0,r.jsx)(j,{closeModal:()=>{C(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:v,suppressPostIds:_}):null]})}},8800:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(6595),o=n.n(s),i=n(900),a=n.n(i);const l=({className:e,html:t,tag:n})=>(0,r.jsx)(n,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(7e3),s=n(900),o=n.n(s),i=n(1280),a=n(4632),l=n.n(a),c=n(6484),u=n.n(c),d=n(7287),p=n(3396),f=n(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const v=[];for(let e=0;e<256;++e)v.push((e+256).toString(16).slice(1));const b=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||y)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return function(e,t=0){return v[e[t+0]]+v[e[t+1]]+v[e[t+2]]+v[e[t+3]]+"-"+v[e[t+4]]+v[e[t+5]]+"-"+v[e[t+6]]+v[e[t+7]]+"-"+v[e[t+8]]+v[e[t+9]]+"-"+v[e[t+10]]+v[e[t+11]]+v[e[t+12]]+v[e[t+13]]+v[e[t+14]]+v[e[t+15]]}(r)};var _=n(2e3);const A=({emptyLabel:e,error:t,id:n,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,r.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,r.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,r.jsx)("ul",{role:"listbox","aria-labelledby":o,id:n,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,r.jsx)("li",{className:"autocomplete__list--item",children:(0,r.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};A.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const w=A;var x=n(2108),C=n.n(x),S=n(7020),E=n.n(S),k=n(7240),R=n.n(k),T=n(9516),I=n.n(T),N=n(2940),P=n.n(N),O=n(9296),L=n.n(O),j=n(5500),D={};D.styleTagTransform=L(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=E(),D.insertStyleElement=P(),C()(j.c,D),j.c&&j.c.locals&&j.c.locals;const U=({type:e,className:t,emptyLabel:n,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=b(),[v,A]=(0,i.useState)(""),[x,C]=(0,i.useState)([]),[S,E]=(0,i.useState)(!1),[k,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),L=(0,_.useDebounce)(T,750),j=(0,i.useCallback)((async(t=1)=>{if(L.length0?h.join(","):"any",type:e});await l()({path:r,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return n=t>o?o:t,e.json()})).then((e=>{C((t=>[...t,...e])),R(!1),(n&&n>t||t>=1&&a&&N.length>0)&&j(t+1)})).catch((e=>A(e.message)))}),[L,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{L&&g<=L.length?j():C([])}),[L,j,g]);const D=e=>{E(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&E(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const n=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,n),...N.slice(n+1,N.length)]}else a?t=[...N,e]:(t=[e],E(!1));P(t),c(t)};return(0,r.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,r.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,r.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,r.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,r.jsx)("div",{children:s})}),N.length>0?(0,r.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,r.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,r.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,r.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>E(!0),placeholder:p,type:"text",value:T})]}),(0,r.jsx)(w,{emptyLabel:n,error:v,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:k&&L,onSelect:M,options:x,selectedItems:N,threshold:g,value:L})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,index:t,list:n,setList:i}){return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{disabled:t===n.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,r.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...n];e.splice(t,1),i(e)}})]}),(0,r.jsx)("div",{children:e})]})}},8504:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var r=n(7e3),s=n(7287),o=n(3396);function i({children:e,emptyItem:t,list:n,setList:i}){return(0,r.jsxs)(r.Fragment,{children:[e,(0,r.jsx)("div",{style:{margin:"1em 0"},children:(0,r.jsx)(s.Button,{icon:"plus",onClick:()=>i([...n,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,n)=>{"use strict";n.d(t,{default:()=>c});var r=n(7e3),s=n(900),o=n.n(s),i=n(3396),a=n(7720);const l=({className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,r.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:n,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(7e3),s=n(900),o=n.n(s),i=n(3376),a=n(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,r.jsx)(l,{children:(0,r.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:n,onUpdateURL:s,value:o,valueURL:i})=>(0,r.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:n,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,n)=>{"use strict";n.d(t,{useCurrentPostId:()=>r.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>v.default,usePosts:()=>b.default,usePreviewLink:()=>_.default,useTerm:()=>A.default,useTerms:()=>w.default});var r=n(9695),s=n(5904),o=n(7112),i=n(6980),a=n(864),l=n(8512),c=n(1344),u=n(6644),d=n(592),p=n(7188),f=n(224),h=n(8004),m=n(1744),g=n(9480),y=n(6504),v=n(3772),b=n(4704),_=n(7532),A=n(7712),w=n(1848)},9695:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=()=>(0,r.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(r.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(1280);const s=(e,t)=>{const[n,s]=(0,r.useState)(e);return(0,r.useEffect)((()=>{const n=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(n)}}),[e,t]),n}},6980:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocksCount)(e)>0},6644:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>{const t=(0,r.useParentBlock)(e),n=(0,r.useInnerBlocks)(t);return n?n.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=e=>(0,r.useInnerBlocks)(e).length},864:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getBlocks(e)),[e])},592:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=e=>(0,s.useSelect)((t=>t(r.store).getMedia(e)),[e])},7188:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(7752);const s=function(e){const t=(0,r.useSelect)((t=>{const{getEditedEntityRecord:n,getEntityRecordEdits:r,isSavingEntityRecord:s}=t("core"),o=n("root","site"),i=r("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:n,saveEntityRecord:s}=(0,r.useDispatch)("core");return{...t,onChange:function(t){n("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},224:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(9528),s=n(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:n,getBlockRootClientId:s}=t(r.store),o=s(e);return o?n(o):null}),[e])},9480:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(1280),s=n(4632),o=n.n(s),i=n(7204),a=n(1744);const l=(e,t=null,n={context:"view"})=>{const[s,l]=(0,r.useState)({}),[c,u]=(0,r.useState)(!0);(0,r.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const n=await t(e);n?l((t=>({...t,[e]:n}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),n=await o()({path:t});n.length>0&&l((t=>({...t,[e]:n[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",n);return c||!d&&s[e]?null:d}},3772:(e,t,n)=>{"use strict";n.d(t,{default:()=>s});var r=n(2e3);const s=(e,t=null,n=null)=>{const[s,o]=(0,r.usePostMeta)(t,n);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null)=>{const n=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,r.useEntityProp)("postType",n,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${n}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("postType",t,e,n)),[e,t])},4704:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="post")=>(0,s.useSelect)((n=>{const{getEntityRecords:s}=n(r.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=()=>(0,s.useSelect)((e=>e(r.store).getEditedPostPreviewLink()),[])},7712:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e,t="category",n={context:"view"})=>(0,s.useSelect)((s=>s(r.store).getEntityRecord("taxonomy",t,e,n)),[e,t])},1848:(e,t,n)=>{"use strict";n.d(t,{default:()=>o});var r=n(3048),s=n(7752);const o=(e=null,t=null,n="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,r.useEntityProp)("postType",o,n,t);return[i,e=>a(e)]}},5328:(e,t,n)=>{"use strict";n.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var r=n(2232),s=n.n(r);const o=e=>new Promise(((t,n)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>n(e),header:!0,skipEmptyLines:!0})}));var i=n(6199)},6199:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:n=""}={},full:{source_url:r=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||n||o||r||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var o=t[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0;var r={};return(()=>{"use strict";n.r(r),n.d(r,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=n(7720),t=n(2e3),s=n(5328)})(),r})(),e.exports=t()},959:function(e,t,n){"use strict";var r=window.React,s=n.n(r),o=window.wp.blocks,i=window.wp.blockEditor,a=window.wp.data,l=window.wp.i18n,c=window.wp.components,u=window.wp.element,d=window.wp.url,p=window.wp.apiFetch,f=n.n(p),h=function(e){let{baseUrl:t,searchRender:n,selected:s,setSelected:o}=e;const[i,a]=(0,u.useState)(!1),[p,h]=(0,u.useState)([]),[m,g]=(0,u.useState)(!1),[y,v]=(0,u.useState)(0),[b,_]=(0,u.useState)({searchValue:"",page:1}),A=(0,u.useCallback)((async function(e){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e.searchValue&&e.searchValue.length<=2)return;const r=function(){let n=(0,d.addQueryArgs)(t,{page:e.page});return e.searchValue&&e.searchValue.length>2&&(n=(0,d.addQueryArgs)(n,{search:e.searchValue})),n}();a(!0);const s=await f()({path:r,parse:!1});v(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;e.page>1&&(i=[...p,...o]),n||(h(i),a(!1))}),[p,t]);return(0,u.useEffect)((()=>{let e=!1;return m||(g(!0),A(b,e)),()=>{e=!0}}),[A,m,b]),(0,r.createElement)(r.Fragment,null,(0,r.createElement)(c.TextControl,{value:b.searchValue,placeholder:(0,l.__)("Search...","alley-scripts"),label:(0,l.__)("Search","alley-scripts"),onChange:e=>{const t={...b,searchValue:e,page:1};_(t),A(t)}}),(0,r.createElement)("div",{className:"alley-scripts-post-picker__post-list"},p?p.map((e=>s&&s.includes(e)?null:(0,r.createElement)(c.Button,{key:e.id,className:"alley-scripts-post-picker__post",onClick:()=>o(e)},n?n(e):(0,r.createElement)("div",null,(0,r.createElement)("strong",null,e.title),(0,l.sprintf)(" (%s)",e.subtype))))):null,i?(0,r.createElement)(c.Spinner,null):null,y>0&&b.page{const e={...b,page:b.page+1};_(e),A(e)}},(0,l.__)("Load More","alley-scripts"))):null))},m=function(){return m=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=u.left&&r=u.top&&s=r&&l<=i||!a&&l>=i&&l<=r){var p=S.current[a?l-1:l+1];if(p){var f=p.left-u.left,h=p.top-u.top;c.style.transform="translate3d("+f+"px, "+h+"px, 0px)"}}else c.style.transform="translate3d(0,0,0)";c.style.transitionDuration="300ms"}null===(t=P.setPosition)||void 0===t||t.call(P,I.current,S.current,d)}}},onEnd:function(){for(var e,t=0;t{const r=(o=[...n],i=e,a=t,function(e,t,n){const r=t<0?e.length+t:t;if(r>=0&&r(0,r.createElement)(S,{key:e.id},(0,r.createElement)("div",{className:"nb-post-picker-draggable"},(0,r.createElement)(E,null,(0,r.createElement)("span",{"aria-label":(0,l.__)("Move item","wp-newsletter-builder")},"::")),(0,r.createElement)(c.Button,{className:"nb-post-picker__post",onClick:()=>{return t=e,void s(n?n.filter((e=>e.id!==t.id)):[]);var t}},t(e)))))):null)},T=function(e){let{baseUrl:t,closeModal:n,onUpdate:s,searchRender:o}=e;const[i,a]=(0,u.useState)([]);return(0,r.createElement)(c.Modal,{isDismissible:!0,title:(0,l.__)("Select Post","alley-scripts"),onRequestClose:n,closeButtonLabel:"Close"},(0,r.createElement)("div",{className:"nb-multi-post-picker-modal"},(0,r.createElement)("div",{className:"nb-multi-post-picker-modal__search-results"},(0,r.createElement)(h,{baseUrl:t,selected:null!=i?i:[],setSelected:e=>{a([...i,e])},searchRender:o})),(0,r.createElement)("div",{className:"nb-multi-post-picker-modal__selected"},(0,r.createElement)(R,{selected:i,setSelected:a,searchRender:o}))),(0,r.createElement)("div",{className:"alley-scripts-post-picker__buttons"},(0,r.createElement)(c.Button,{variant:"secondary",onClick:n},(0,l.__)("Cancel","alley-scripts")),(0,r.createElement)(c.Button,{variant:"primary",onClick:()=>{if(!i)return;const e=i.map((e=>e.id));s(e),n()},disabled:!i},(0,l.__)("Select","alley-scripts"))))},I=function(e){let{allowedTypes:t,onUpdate:n,params:s={},searchEndpoint:o="/wp/v2/search",searchRender:i}=e;const[a,p]=(0,u.useState)(!1),f=(0,d.addQueryArgs)(o,{type:"post",subtype:null!=t?t:"any",...s});return(0,r.createElement)(r.Fragment,null,(0,r.createElement)(c.Button,{onClick:()=>{p(!0)},variant:"secondary"},(0,l.__)("Select Posts","alley-scripts")),a?(0,r.createElement)(T,{closeModal:()=>{p(!1)},baseUrl:f,onUpdate:n,searchRender:i}):null)},N=n(265),P=function(e){let{featured_image:t,post_date:n,title:s}=e;return(0,r.createElement)("div",{className:"nb-post-picker-result"},(0,r.createElement)("div",{className:"nb-post-picker-result-image__container"},t?(0,r.createElement)("img",{className:"nb-post-picker-result-image",src:t,alt:""}):null),(0,r.createElement)(N.SafeHtml,{html:s,className:"nb-post-picker-result-title",tag:"div"}),(0,r.createElement)("span",{className:"nb-post-picker-result-date"},n))};const{newsletterBuilder:{allowedPostTypes:O=["post"]}={}}=window;var L=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/section","version":"0.1.0","title":"Newsletter Section","category":"design","icon":"layout","description":"Section to contain other blocks and allow for choosing multiple posts.","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","attributes":{"showNumbers":{"type":"boolean","default":false},"heading":{"type":"string","default":""},"adAfter":{"type":"boolean","default":false}}}');(0,o.registerBlockType)(L,{edit:function(e){let{clientId:t,attributes:{showNumbers:n=!1,heading:s=""},setAttributes:o}=e;const d=new Date;d.setMonth(d.getMonth()-3);const p=(0,a.select)("core/block-editor").getBlocksByClientId(t)[0]||null,f=function e(t,n,r){return t.forEach((t=>(n.includes(t.name)&&r.push(t.clientId),t.innerBlocks&&t.innerBlocks.length>0?e(t.innerBlocks,n,r):r))),r}(p?p.innerBlocks:[],["wp-newsletter-builder/post"],[]);return(0,u.useEffect)((()=>{n&&f.forEach(((e,t)=>{(0,a.dispatch)("core/block-editor").updateBlockAttributes(e,{number:t+1})}))}),[f,n]),(0,r.createElement)(r.Fragment,null,(0,r.createElement)("div",{...(0,i.useBlockProps)()},s?(0,r.createElement)(i.RichText,{tagName:"h2",value:s,onChange:e=>o({heading:e}),className:"wp-newsletter-builder-section__heading"}):null,(0,r.createElement)(i.InnerBlocks,null)),(0,r.createElement)(i.InspectorControls,null,(0,r.createElement)(c.PanelBody,{title:(0,l.__)("Post Selection","wp-newsletter-builder"),initialOpen:!0},(0,r.createElement)(c.PanelRow,null,(0,r.createElement)(I,{onUpdate:e=>{f.forEach((t=>{const n=e.shift();(0,a.dispatch)("core/block-editor").updateBlockAttributes(t,{postId:n})}))},allowedTypes:O,params:{after:d.toISOString(),per_page:20},searchRender:P})))))},save:()=>{const e=i.useBlockProps.save();return(0,r.createElement)("div",{...e},(0,r.createElement)(i.InnerBlocks.Content,null))}})},50:function(e){"use strict";const t=(e,t,n)=>{const r=t<0?e.length+t:t;if(r>=0&&r(e=[...e],t(e,n,r),e),e.exports.mutate=t}},n={};function r(e){var s=n[e];if(void 0!==s)return s.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=function(t,n,s,o){if(!n){var i=1/0;for(u=0;u=o)&&Object.keys(r.O).every((function(e){return r.O[e](n[l])}))?n.splice(l--,1):(a=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,s,o]},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={405:0,881:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var s,o,i=n[0],a=n[1],l=n[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(s in a)r.o(a,s)&&(r.m[s]=a[s]);if(l)var u=l(r)}for(t&&t(n);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_heading = $attributes['heading'] ?? ''; +$wp_newsletter_builder_content = $content ?? ''; + +// Check if the content is empty. +if ( empty( trim( wp_strip_all_tags( $wp_newsletter_builder_content ) ) ) ) { + return; +} +if ( ! empty( $wp_newsletter_builder_heading ) ) { + printf( '

%s

', esc_html( $wp_newsletter_builder_heading ) ); +} + +echo $wp_newsletter_builder_content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped diff --git a/build/section/style-index.css b/build/section/style-index.css new file mode 100644 index 00000000..a61b1ce2 --- /dev/null +++ b/build/section/style-index.css @@ -0,0 +1 @@ +h2.wp-newsletter-builder-section__heading{color:#d62827;font-size:40px;line-height:47px;text-align:center;text-transform:uppercase} diff --git a/build/signup-form-list/block.json b/build/signup-form-list/block.json new file mode 100644 index 00000000..c5f5af66 --- /dev/null +++ b/build/signup-form-list/block.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/signup-form-list", + "version": "0.1.0", + "title": "Newsletter Signup Form List", + "category": "widgets", + "icon": "yes", + "description": "Child block of Newsletter Signup Form to show a single list", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "render": "file:render.php", + "attributes": { + "logo": { + "type": "number", + "default": 0 + }, + "title": { + "type": "string" + }, + "frequency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "listId": { + "type": "string" + }, + "initialChecked": { + "type": "boolean", + "default": false + } + } +} \ No newline at end of file diff --git a/build/signup-form-list/index.asset.php b/build/signup-form-list/index.asset.php new file mode 100644 index 00000000..8bb064dc --- /dev/null +++ b/build/signup-form-list/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => '8c1b544918527779dfeb'); diff --git a/build/signup-form-list/index.js b/build/signup-form-list/index.js new file mode 100644 index 00000000..185b28a6 --- /dev/null +++ b/build/signup-form-list/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e={n:function(t){var l=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(l,{a:l}),l},d:function(t,l){for(var n in l)e.o(l,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:l[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t=window.wp.blocks,l=window.React,n=window.wp.i18n,i=window.wp.data,r=window.wp.components,o=window.wp.blockEditor,a=window.wp.element,s=window.wp.apiFetch,c=e.n(s);function u(e){let{selected:t,updateFunction:i}=e;const[o,s]=(0,a.useState)([]),u=o.length>0?(e=>{const t=e.map((e=>({label:e.Name,value:e.ListID})));return t.unshift({label:(0,n.__)("Select a list","wp-newsletter-builder"),value:""}),t})(o):[];return(0,a.useEffect)((()=>{o.length>0||c()({path:"/wp-newsletter-builder/v1/lists"}).then((e=>{s(e)}))}),[o]),(0,l.createElement)(r.SelectControl,{value:t,options:u,onChange:i})}var d=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/signup-form-list","version":"0.1.0","title":"Newsletter Signup Form List","category":"widgets","icon":"yes","description":"Child block of Newsletter Signup Form to show a single list","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","render":"file:render.php","attributes":{"logo":{"type":"number","default":0},"title":{"type":"string"},"frequency":{"type":"string"},"description":{"type":"string"},"listId":{"type":"string"},"initialChecked":{"type":"boolean","default":false}}}');(0,t.registerBlockType)(d,{edit:function(e){let{attributes:{logo:t=0,title:a="",frequency:s="",description:c="",listId:d="",initialChecked:p=!1},setAttributes:w}=e;const{logoMedia:m=null}=(0,i.useSelect)((e=>({logoMedia:t?e("core").getMedia(t):null})),[t]);return(0,l.createElement)("div",{...(0,o.useBlockProps)()},m?(0,l.createElement)(l.Fragment,null,(0,l.createElement)(r.Button,{type:"button",onClick:()=>w({logo:null}),"aria-label":(0,n.__)("Remove Logo","wp-newsletter-builder"),isDestructive:!0,variant:"primary",className:"wp-block-wp-newsletter-builder-signup-form-list__image_delete"},"X"),(0,l.createElement)("img",{src:m.media_details?.sizes?.medium?.source_url||m.source_url,alt:(0,n.__)("Newsletter Logo","wp-newsletter-builder")})):(0,l.createElement)(o.MediaPlaceholder,{icon:"format-image",labels:{title:(0,n.__)("Image","wp-newsletter-builder"),instructions:(0,n.__)("Drag an image, upload a new one or select a file from your library.","wp-newsletter-builder")},onSelect:e=>w({logo:e.id}),accept:"image/*",allowedTypes:["image"]}),(0,l.createElement)("div",{className:"wp-block-wp-newsletter-builder-signup-form-list__content"},(0,l.createElement)(o.RichText,{tagName:"h3",value:a,onChange:e=>w({title:e}),placeholder:(0,n.__)("Title","wp-newsletter-builder")}),(0,l.createElement)(o.RichText,{tagName:"div",value:s,className:"wp-block-wp-newsletter-builder-signup-form-list__frequency",onChange:e=>w({frequency:e}),placeholder:(0,n.__)("Frequency","wp-newsletter-builder")}),(0,l.createElement)(o.RichText,{tagName:"div",value:c,className:"wp-block-wp-newsletter-builder-signup-form-list__description",onChange:e=>w({description:e}),placeholder:(0,n.__)("Description","wp-newsletter-builder")}),(0,l.createElement)(r.CheckboxControl,{checked:p,onChange:e=>w({initialChecked:e})})),(0,l.createElement)(o.InspectorControls,null,(0,l.createElement)(r.PanelBody,{title:(0,n.__)("List Settings","wp-newsletter-builder")},(0,l.createElement)(r.PanelRow,null,(0,l.createElement)(u,{selected:d,updateFunction:e=>w({listId:e})})))))}})}(); \ No newline at end of file diff --git a/build/signup-form-list/index.php b/build/signup-form-list/index.php new file mode 100644 index 00000000..8c9bbfa5 --- /dev/null +++ b/build/signup-form-list/index.php @@ -0,0 +1,21 @@ +. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_title = $attributes['title'] ?? ''; +$wp_newsletter_builder_frequency = $attributes['frequency'] ?? ''; +$wp_newsletter_builder_description = $attributes['description'] ?? ''; +$wp_newsletter_builder_list_id = $attributes['listId'] ?? ''; +$wp_newsletter_builder_logo_id = $attributes['logo'] ?? null; +$wp_newsletter_builder_checked = $attributes['initialChecked'] ?? false; +$wp_newsletter_builder_checked_str = $wp_newsletter_builder_checked ? 'checked="checked"' : ''; + +if ( empty( $wp_newsletter_builder_title ) || empty( $wp_newsletter_builder_list_id ) ) { + return; +} +?> +
> + +
diff --git a/build/signup-form/block.json b/build/signup-form/block.json new file mode 100644 index 00000000..123dee95 --- /dev/null +++ b/build/signup-form/block.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/signup-form", + "version": "0.1.0", + "title": "Newsletter Signup Form", + "category": "widgets", + "icon": "forms", + "description": "Shows a form to allow users to subscribe to newsletter lists", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php", + "viewScript": [ + "file:view.js" + ], + "attributes": { + "headerText": { + "type": "string" + }, + "subheaderText": { + "type": "string" + }, + "disclaimerText": { + "type": "string" + }, + "buttonText": { + "type": "string" + }, + "listId": { + "type": "string" + } + } +} \ No newline at end of file diff --git a/build/signup-form/index.asset.php b/build/signup-form/index.asset.php new file mode 100644 index 00000000..331999db --- /dev/null +++ b/build/signup-form/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => 'e330b9150caac8261756'); diff --git a/build/signup-form/index.css b/build/signup-form/index.css new file mode 100644 index 00000000..58035aaf --- /dev/null +++ b/build/signup-form/index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-signup-form div.block-editor-block-list__layout{display:grid;grid-gap:1rem;grid-template-columns:1fr 1fr 1fr}.wp-block-wp-newsletter-builder-signup-form-list__image_delete{position:absolute;right:0;top:0}.wp-block-wp-newsletter-builder-signup-form__fake-text-input{border:1px solid #000;display:block;font-family:sans-serif;font-size:16px;padding:6px 4px 2px;width:300px}.wp-block-wp-newsletter-builder-signup-form__fake-button{background:#fff;border:1px solid var(--primary-black,#1d1d1f)} diff --git a/build/signup-form/index.js b/build/signup-form/index.js new file mode 100644 index 00000000..c172c95e --- /dev/null +++ b/build/signup-form/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e={n:function(t){var l=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(l,{a:l}),l},d:function(t,l){for(var n in l)e.o(l,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:l[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t=window.React,l=window.wp.blocks,n=window.wp.blockEditor,r=window.wp.i18n,i=window.wp.components,s=window.wp.element,a=window.wp.apiFetch,o=e.n(a);function c(e){let{selected:l,updateFunction:n}=e;const[a,c]=(0,s.useState)([]),u=a.length>0?(e=>{const t=e.map((e=>({label:e.Name,value:e.ListID})));return t.unshift({label:(0,r.__)("Select a list","wp-newsletter-builder"),value:""}),t})(a):[];return(0,s.useEffect)((()=>{a.length>0||o()({path:"/wp-newsletter-builder/v1/lists"}).then((e=>{c(e)}))}),[a]),(0,t.createElement)(i.SelectControl,{value:l,options:u,onChange:n})}var u=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/signup-form","version":"0.1.0","title":"Newsletter Signup Form","category":"widgets","icon":"forms","description":"Shows a form to allow users to subscribe to newsletter lists","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php","viewScript":["file:view.ts"],"attributes":{"headerText":{"type":"string"},"subheaderText":{"type":"string"},"disclaimerText":{"type":"string"},"buttonText":{"type":"string"},"listId":{"type":"string"}}}');(0,l.registerBlockType)(u,{edit:function(e){let{attributes:{headerText:l,subheaderText:s="",disclaimerText:a="",buttonText:o,listId:u},setAttributes:d}=e;return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{...(0,n.useBlockProps)()},(0,t.createElement)("div",{className:"wp-block-wp-newsletter-builder-signup-form__header"},(0,t.createElement)("div",null,(0,t.createElement)(n.RichText,{tagName:"h2",value:l,onChange:e=>d({headerText:e}),placeholder:(0,r.__)("Header Text","wp-newsletter-builder")}),(0,t.createElement)(n.RichText,{tagName:"div",value:s,className:"wp-block-wp-newsletter-builder-signup-form__subheader",onChange:e=>d({subheaderText:e}),placeholder:(0,r.__)("Subheader Text","wp-newsletter-builder")})),(0,t.createElement)("div",null,(0,t.createElement)("div",null,(0,t.createElement)("span",{className:"wp-block-wp-newsletter-builder-signup-form__fake-text-input wp-block-wp-newsletter-builder-signup-form__email-input"},(0,r.__)("Email","wp-newsletter-builder"))),(0,t.createElement)(n.RichText,{tagName:"div",value:a,className:"wp-block-wp-newsletter-builder-signup-form__disclaimer",onChange:e=>d({disclaimerText:e}),placeholder:(0,r.__)("Disclaimer Text","wp-newsletter-builder")}),(0,t.createElement)("div",{className:"wp-block-button is-style-subscribe"},(0,t.createElement)("div",{className:"wp-block-wp-newsletter-builder-signup-form__fake-button wp-block-button__link wp-element-button"},(0,t.createElement)(n.RichText,{tagName:"span",value:o,onChange:e=>d({buttonText:e}),placeholder:(0,r.__)("Button Text","wp-newsletter-builder")}))))),u?null:(0,t.createElement)(n.InnerBlocks,{allowedBlocks:["wp-newsletter-builder/signup-form-list"]})),(0,t.createElement)(n.InspectorControls,null,(0,t.createElement)(i.PanelBody,{title:(0,r.__)("List Settings","wp-newsletter-builder")},(0,t.createElement)(i.PanelRow,null,(0,t.createElement)(c,{selected:null!=u?u:"",updateFunction:e=>d({listId:e})})))))},save:()=>{const e=n.useBlockProps.save();return(0,t.createElement)("div",{...e},(0,t.createElement)(n.InnerBlocks.Content,null))}})}(); \ No newline at end of file diff --git a/build/signup-form/index.php b/build/signup-form/index.php new file mode 100644 index 00000000..61aa832e --- /dev/null +++ b/build/signup-form/index.php @@ -0,0 +1,40 @@ +|bool>> $tags The allowed tags. + * @return array|bool>> + */ +function wp_newsletter_builder_modify_wpkses_post_allowed_tags( array $tags ): array { + $tags['input'] = [ + 'type' => true, + 'name' => true, + 'value' => [], + 'placeholder' => true, + 'class' => true, + 'checked' => true, + ]; + return $tags; +} +add_filter( 'wp_kses_allowed_html', 'wp_newsletter_builder_modify_wpkses_post_allowed_tags' ); diff --git a/build/signup-form/render.php b/build/signup-form/render.php new file mode 100644 index 00000000..6322632a --- /dev/null +++ b/build/signup-form/render.php @@ -0,0 +1,56 @@ +. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +$wp_newsletter_builder_header_text = $attributes['headerText'] ?? ''; +$wp_newsletter_builder_subheader_text = $attributes['subheaderText'] ?? ''; +$wp_newsletter_builder_disclaimer_text = $attributes['disclaimerText'] ?? ''; +$wp_newsletter_builder_button_text = $attributes['buttonText'] ?? __( 'Subscribe', 'wp-newsletter-builder' ); +$wp_newsletter_builder_list_id = $attributes['listId'] ?? ''; +$wp_newsletter_builder_content = $content ?? ''; +?> +
data-component="wp-newsletter-builder-signup"> + + ', esc_attr( $wp_newsletter_builder_list_id ) ); + } else { + echo wp_kses_post( $wp_newsletter_builder_content ); + } + ?> +
diff --git a/build/signup-form/view.asset.php b/build/signup-form/view.asset.php new file mode 100644 index 00000000..1616c8c5 --- /dev/null +++ b/build/signup-form/view.asset.php @@ -0,0 +1 @@ + array(), 'version' => '04ecbe14f3ebccb80f72'); diff --git a/build/signup-form/view.js b/build/signup-form/view.js new file mode 100644 index 00000000..3c570a7b --- /dev/null +++ b/build/signup-form/view.js @@ -0,0 +1 @@ +window.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll('[data-component="wp-newsletter-builder-signup"]').forEach((e=>{const r=e.querySelector("button");r&&r.addEventListener("click",(r=>{r.preventDefault();const t=e.querySelector('input[type="email"]'),n=e.querySelectorAll('input[type="checkbox"]:checked'),s=e.querySelector('input[name="wp-newsletter-builder-hidden"]'),l=e.querySelector(".wp-block-wp-newsletter-builder-signup-form__response");if(!l||!t)return;if(l.innerHTML="",l.classList.remove("success","error"),!t.value)return l.classList.add("error"),l.innerHTML="Email is required",void t.focus();if(!n.length&&!s)return l.classList.add("error"),void(l.innerHTML="Please select a newsletter");const o=new URLSearchParams;var i;o.append("email",t.value),s?o.append("listIds",s.value):o.append("listIds",(null!==(i=Array.from(n).map((e=>e.value)))&&void 0!==i?i:[]).join(",")),fetch("/wp-json/wp-newsletter-builder/v1/subscribe",{method:"POST",body:o,headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>e.json())).then((e=>{const{success:r,message:t}=e;l.classList.add(r?"success":"error"),l.innerHTML=t}))}))}))})); \ No newline at end of file diff --git a/build/two-up-post/block.json b/build/two-up-post/block.json new file mode 100644 index 00000000..44b9b5f5 --- /dev/null +++ b/build/two-up-post/block.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "wp-newsletter-builder/two-up-post", + "version": "0.1.0", + "title": "Two Up Newsletter Post", + "category": "design", + "icon": "editor-table", + "description": "Displays two posts, side by side", + "textdomain": "wp-newsletter-builder", + "editorScript": "file:index.js", + "editorStyle": "file:index.css", + "style": [ + "file:style-index.css" + ], + "render": "file:render.php" +} \ No newline at end of file diff --git a/build/two-up-post/index.asset.php b/build/two-up-post/index.asset.php new file mode 100644 index 00000000..5bb09e97 --- /dev/null +++ b/build/two-up-post/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-block-editor', 'wp-blocks'), 'version' => 'a6375aeff75acece83d5'); diff --git a/build/two-up-post/index.css b/build/two-up-post/index.css new file mode 100644 index 00000000..e1da11d9 --- /dev/null +++ b/build/two-up-post/index.css @@ -0,0 +1 @@ +.wp-block-wp-newsletter-builder-two-up-post>.block-editor-inner-blocks{max-width:none;width:100%} diff --git a/build/two-up-post/index.js b/build/two-up-post/index.js new file mode 100644 index 00000000..2f348748 --- /dev/null +++ b/build/two-up-post/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e,t={220:function(){var e=window.React,t=window.wp.blocks,r=window.wp.blockEditor;const n=[["wp-newsletter-builder/post-item",{}],["wp-newsletter-builder/post-item",{}]];var o=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"wp-newsletter-builder/two-up-post","version":"0.1.0","title":"Two Up Newsletter Post","category":"design","icon":"editor-table","description":"Displays two posts, side by side","textdomain":"wp-newsletter-builder","editorScript":"file:index.ts","editorStyle":"file:index.css","style":["file:style-index.css"],"render":"file:render.php"}');(0,t.registerBlockType)(o,{apiVersion:2,edit:function(){return(0,e.createElement)("table",{...(0,r.useBlockProps)(),role:"presentation"},(0,e.createElement)("tbody",null,(0,e.createElement)("tr",null,(0,e.createElement)(r.InnerBlocks,{orientation:"horizontal",template:n,templateLock:"all"}))))},title:o.title,save:()=>{const t=r.useBlockProps.save();return(0,e.createElement)("table",{...t,role:"presentation"},(0,e.createElement)("tbody",null,(0,e.createElement)("tr",null,(0,e.createElement)(r.InnerBlocks.Content,null))))}})}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var l=r[e]={exports:{}};return t[e](l,l.exports,n),l.exports}n.m=t,e=[],n.O=function(t,r,o,l){if(!r){var i=1/0;for(u=0;u=l)&&Object.keys(n.O).every((function(e){return n.O[e](r[a])}))?r.splice(a--,1):(s=!1,l0&&e[u-1][2]>l;u--)e[u]=e[u-1];e[u]=[r,o,l]},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={747:0,611:0};n.O.j=function(t){return 0===e[t]};var t=function(t,r){var o,l,i=r[0],s=r[1],a=r[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(a)var u=a(n)}for(t&&t(r);c. + * @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered. + * + * @package wp-newsletter-builder + */ + +?> + array('wp-blocks', 'wp-dom-ready', 'wp-hooks'), 'version' => '9a7f35cb4f2089222312'); diff --git a/build/wp-newsletter-builder-button/index.js b/build/wp-newsletter-builder-button/index.js new file mode 100644 index 00000000..0814f9a1 --- /dev/null +++ b/build/wp-newsletter-builder-button/index.js @@ -0,0 +1 @@ +!function(){"use strict";var e={n:function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,{a:r}),r},d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t=window.wp.hooks,r=window.wp.domReady,n=e.n(r),o=window.wp.blocks;(0,t.addFilter)("blocks.registerBlockType","wp-newsletter-builder/button",(function(e,t){return!e?.supports||"core/button"!==t&&"core/buttons"!==t?e:{...e,supports:Object.assign(e.supports,{anchor:!1,color:{background:!1,text:!1},customClassName:!1,inserter:!1,layout:!1,shadow:!1,spacing:!1,styles:[],typography:{__experimentalFontSize:!1,__experimentalLineHeight:!1,__experimentalLetterSpacing:!0,__experimentalFontFamily:!1,__experimentalFontWeight:!1,__experimentalFontStyle:!1,__experimentalTextTransform:!0},__experimentalBorder:{color:!1,radius:!0,style:!0,width:!1,__experimentalSkipSerialization:!0,__experimentalDefaultControls:{color:!1,radius:!0,style:!0,width:!1}}})}})),n()((()=>{(0,o.unregisterBlockStyle)("core/button",["fill","outline"])}))}(); \ No newline at end of file diff --git a/build/wp-newsletter-builder-from-post/index.asset.php b/build/wp-newsletter-builder-from-post/index.asset.php new file mode 100644 index 00000000..e0953f0c --- /dev/null +++ b/build/wp-newsletter-builder-from-post/index.asset.php @@ -0,0 +1 @@ + array('react', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins'), 'version' => '3d50a0558364ddb36813'); diff --git a/build/wp-newsletter-builder-from-post/index.js b/build/wp-newsletter-builder-from-post/index.js new file mode 100644 index 00000000..c3d7fa87 --- /dev/null +++ b/build/wp-newsletter-builder-from-post/index.js @@ -0,0 +1,42 @@ +!function(){var e={265:function(e){var t;self,t=()=>(()=>{var e={6484:(e,t)=>{var r;!function(){"use strict";var n={}.hasOwnProperty;function s(){for(var e=[],t=0;t{"use strict";r.d(t,{c:()=>a});var n=r(2876),s=r.n(n),o=r(1849),i=r.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__post-list{display:flex;flex-wrap:wrap;float:left;height:calc(70vh - 200px);justify-content:flex-start;overflow-y:auto;padding:8px;width:100%}.alley-scripts-post-picker__post{border:1px solid #eee;height:auto;justify-content:center;margin:0 8px 8px 0;transition:background-color .2s ease-in-out;width:calc((100% - 40px)/3)}@media(min-width: 780px){.alley-scripts-post-picker__post{width:calc((100% - 40px)/5)}}.alley-scripts-post-picker__post:hover{background-color:#f5f5f5}.alley-scripts-post-picker__post.is-selected{background-color:#f5f5f5}.alley-scripts-post-picker__load-more{clear:both;float:left;text-align:center;width:100%}","",{version:3,sources:["webpack://./src/components/post-picker/post-list.scss"],names:[],mappings:"AAAA,sCACE,YAAA,CACA,cAAA,CACA,UAAA,CACA,yBAAA,CACA,0BAAA,CACA,eAAA,CACA,WAAA,CACA,UAAA,CAGF,iCACE,qBAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,2CAAA,CACA,2BAAA,CAGA,yBATF,iCAUI,2BAAA,CAAA,CAGF,uCACE,wBAAA,CAGF,6CACE,wBAAA,CAIJ,sCACE,UAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:[".alley-scripts-post-picker__post-list {\n display: flex;\n flex-wrap: wrap;\n float: left;\n height: calc(70vh - 200px);\n justify-content: flex-start;\n overflow-y: auto;\n padding: 8px;\n width: 100%;\n}\n\n.alley-scripts-post-picker__post {\n border: 1px solid #eee;\n height: auto;\n justify-content: center;\n margin: 0 8px 8px 0;\n transition: background-color 0.2s ease-in-out;\n width: calc((100% - 40px) / 3);\n\n\n @media (min-width: 780px) {\n width: calc((100% - 40px) / 5);\n }\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &.is-selected {\n background-color: #f5f5f5;\n }\n}\n\n.alley-scripts-post-picker__load-more {\n clear: both;\n float: left;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const a=i},9680:(e,t,r)=>{"use strict";r.d(t,{c:()=>a});var n=r(2876),s=r.n(n),o=r(1849),i=r.n(o)()(s());i.push([e.id,".alley-scripts-post-picker__modal .components-modal__content{width:90vw}.alley-scripts-post-picker__buttons{clear:both;display:block;text-align:right;width:100%}.alley-scripts-post-picker__buttons button{margin:5px}","",{version:3,sources:["webpack://./src/components/post-picker/search-modal.scss"],names:[],mappings:"AACE,6DACE,UAAA,CAIJ,oCACE,UAAA,CACA,aAAA,CACA,gBAAA,CACA,UAAA,CAEA,2CACE,UAAA",sourcesContent:[".alley-scripts-post-picker__modal {\n .components-modal__content {\n width: 90vw;\n }\n}\n\n.alley-scripts-post-picker__buttons {\n clear: both;\n display: block;\n text-align: right;\n width: 100%;\n\n button {\n margin: 5px;\n }\n}\n"],sourceRoot:""}]);const a=i},3800:(e,t,r)=>{"use strict";r.d(t,{c:()=>a});var n=r(2876),s=r.n(n),o=r(1849),i=r.n(o)()(s());i.push([e.id,".post-picker-notice{margin:0 0 .5rem 0}","",{version:3,sources:["webpack://./src/components/post-picker/style.scss"],names:[],mappings:"AAAA,oBACE,kBAAA",sourcesContent:[".post-picker-notice {\n margin: 0 0 0.5rem 0;\n}\n"],sourceRoot:""}]);const a=i},5500:(e,t,r)=>{"use strict";r.d(t,{c:()=>a});var n=r(2876),s=r.n(n),o=r(1849),i=r.n(o)()(s());i.push([e.id,'.edit-post-sidebar .autocomplete__component,.editor-styles-wrapper .autocomplete__component{margin-bottom:20px}.edit-post-sidebar .autocomplete-base-control,.editor-styles-wrapper .autocomplete-base-control{position:relative}.edit-post-sidebar .autocomplete-text-control__input,.editor-styles-wrapper .autocomplete-text-control__input{margin:0}.edit-post-sidebar .autocomplete__selection-list,.editor-styles-wrapper .autocomplete__selection-list{list-style-type:none;margin:0 0 6px;padding:0}.edit-post-sidebar .autocomplete__selection-list--item,.editor-styles-wrapper .autocomplete__selection-list--item{display:inline-block;list-style:none}.edit-post-sidebar .autocomplete__selection-list--item--button,.editor-styles-wrapper .autocomplete__selection-list--item--button{margin-bottom:4px;margin-right:3px}.edit-post-sidebar .autocomplete__selection-list--item--button::after,.editor-styles-wrapper .autocomplete__selection-list--item--button::after{content:"×";font-size:16px;line-height:20px;margin-left:5px}.edit-post-sidebar .autocomplete__dropdown,.editor-styles-wrapper .autocomplete__dropdown{background-color:#fff;border-color:rgba(0,0,0,0) #e2e4e7 #e2e4e7;border-radius:0 0 4px 4px;border-style:solid;border-width:0 1px 1px;left:0;max-height:0;overflow-y:hidden;position:absolute;top:calc(100% + 1px);visibility:hidden;width:100%;z-index:10}.edit-post-sidebar .autocomplete__dropdown--is-open,.editor-styles-wrapper .autocomplete__dropdown--is-open{box-shadow:0 3px 30px rgba(25,30,35,.1);max-height:225px;overflow-y:scroll;visibility:visible}.edit-post-sidebar .autocomplete__dropdown--notice,.editor-styles-wrapper .autocomplete__dropdown--notice{padding:15px}.edit-post-sidebar .autocomplete__dropdown--results,.editor-styles-wrapper .autocomplete__dropdown--results{list-style:none;margin:0;padding:0}.edit-post-sidebar .autocomplete__list--item,.editor-styles-wrapper .autocomplete__list--item{list-style:none}.edit-post-sidebar .autocomplete__list--item>button,.editor-styles-wrapper .autocomplete__list--item>button{background:rgba(0,0,0,0);border-color:#e2e4e7;border-style:solid;border-width:0 0 1px;height:100%;line-height:1.25;text-align:left;white-space:inherit;width:100%}.edit-post-sidebar .autocomplete__list--item:last-child>button,.editor-styles-wrapper .autocomplete__list--item:last-child>button{border-bottom:0}',"",{version:3,sources:["webpack://./src/components/selector/styles.scss"],names:[],mappings:"AAAA,4FAgBI,kBACE,CAAA,gGAMF,iBACE,CAAA,8GAMF,QACE,CAAA,sGAMF,oBACE,CAAA,cACA,CAAA,SACA,CAAA,kHAEA,oBACE,CAAA,eACA,CAAA,kIAEA,iBACE,CAAA,gBACA,CAAA,gJAEA,WACE,CAAA,cACA,CAAA,gBACA,CAAA,eACA,CAAA,0FASR,qBACE,CAAA,0CACA,CAAA,yBACA,CAAA,kBACA,CAAA,sBACA,CAAA,MACA,CAAA,YACA,CAAA,iBACA,CAAA,iBACA,CAAA,oBACA,CAAA,iBACA,CAAA,UACA,CAAA,UACA,CAAA,4GAGA,uCACE,CAAA,gBACA,CAAA,iBACA,CAAA,kBACA,CAAA,0GAIF,YACE,CAAA,4GAIF,eACE,CAAA,QACA,CAAA,SACA,CAAA,8FAOJ,eACE,CAAA,4GAEA,wBACE,CAAA,oBACA,CAAA,kBACA,CAAA,oBACA,CAAA,WACA,CAAA,gBACA,CAAA,eACA,CAAA,mBACA,CAAA,UACA,CAAA,kIAGF,eACE",sourcesContent:["//--------------------------------------------------------------\n// AutoComplete Styles\n//--------------------------------------------------------------\n\n/* stylelint-disable max-nesting-depth */\n\n//-----------------------------------------\n// Accommodate editor well, or the sidebar.\n//-----------------------------------------\n.edit-post-sidebar,\n.editor-styles-wrapper {\n .autocomplete {\n\n //-----------------------------------------\n // Parent form wrapper.\n //-----------------------------------------\n &__component {\n margin-bottom: 20px;\n }\n\n //-----------------------------------------\n // Wrapper\n //-----------------------------------------\n &-base-control {\n position: relative;\n }\n\n //-----------------------------------------\n // Input\n //-----------------------------------------\n &-text-control__input {\n margin: 0;\n }\n\n //-----------------------------------------\n // Selected buttons.\n //-----------------------------------------\n &__selection-list {\n list-style-type: none;\n margin: 0 0 6px;\n padding: 0;\n\n &--item {\n display: inline-block;\n list-style: none;\n\n &--button {\n margin-bottom: 4px;\n margin-right: 3px;\n\n &::after {\n content: '×';\n font-size: 16px;\n line-height: 20px;\n margin-left: 5px;\n }\n }\n }\n }\n\n //-----------------------------------------\n // Results\n //-----------------------------------------\n &__dropdown {\n background-color: #fff;\n border-color: transparent #e2e4e7 #e2e4e7;\n border-radius: 0 0 4px 4px;\n border-style: solid;\n border-width: 0 1px 1px;\n left: 0;\n max-height: 0;\n overflow-y: hidden;\n position: absolute;\n top: calc(100% + 1px); // Offset focus border.\n visibility: hidden;\n width: 100%;\n z-index: 10;\n\n // Container is open.\n &--is-open {\n box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1);\n max-height: 225px;\n overflow-y: scroll;\n visibility: visible;\n }\n\n // Notice handler.\n &--notice {\n padding: 15px;\n }\n\n // Results container.\n &--results {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n }\n\n //-----------------------------------------\n // List/Results\n //-----------------------------------------\n &__list--item {\n list-style: none;\n\n > button {\n background: transparent;\n border-color: #e2e4e7;\n border-style: solid;\n border-width: 0 0 1px;\n height: 100%;\n line-height: 1.25;\n text-align: left;\n white-space: inherit;\n width: 100%;\n }\n\n &:last-child > button {\n border-bottom: 0;\n }\n }\n }\n}\n"],sourceRoot:""}]);const a=i},1849:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r="",n=void 0!==t[5];return t[4]&&(r+="@supports (".concat(t[4],") {")),t[2]&&(r+="@media ".concat(t[2]," {")),n&&(r+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),r+=e(t),n&&(r+="}"),t[2]&&(r+="}"),t[4]&&(r+="}"),r})).join("")},t.i=function(e,r,n,s,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(n)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),r&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=r):u[2]=r),s&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=s):u[4]="".concat(s)),t.push(u))}},t}},2876:e=>{"use strict";e.exports=function(e){var t=e[1],r=e[3];if(!r)return t;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),o="/*# ".concat(s," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},6595:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:r,getPrototypeOf:n,getOwnPropertyDescriptor:s}=Object;let{freeze:o,seal:i,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(e){return e}),i||(i=function(e){return e}),l||(l=function(e,t,r){return e.apply(t,r)}),c||(c=function(e,t){return new e(...t)});const u=w(Array.prototype.forEach),d=w(Array.prototype.pop),p=w(Array.prototype.push),f=w(String.prototype.toLowerCase),h=w(String.prototype.toString),m=w(String.prototype.match),g=w(String.prototype.replace),y=w(String.prototype.indexOf),b=w(String.prototype.trim),v=w(RegExp.prototype.test),_=(A=TypeError,function(){for(var e=arguments.length,t=new Array(e),r=0;r1?r-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let o=n.length;for(;o--;){let t=n[o];if("string"==typeof t){const e=s(t);e!==t&&(r(n)||(n[o]=e),t=e)}e[t]=!0}return e}function C(t){const r=a(null);for(const[n,o]of e(t))void 0!==s(t,n)&&(r[n]=o);return r}function S(e,t){for(;null!==e;){const r=s(e,t);if(r){if(r.get)return w(r.get);if("function"==typeof r.value)return w(r.value)}e=n(e)}return function(e){return console.warn("fallback value for",e),null}}const k=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),T=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),P=o(["#text"]),O=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),j=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),L=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),D=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),U=i(/\{\{[\w\W]*|[\w\W]*\}\}/gm),M=i(/<%[\w\W]*|[\w\W]*%>/gm),B=i(/\${[\w\W]*}/gm),F=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=i(/^(?:\w+script|data):/i),$=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var G=Object.freeze({__proto__:null,MUSTACHE_EXPR:U,ERB_EXPR:M,TMPLIT_EXPR:B,DATA_ATTR:F,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:$,DOCTYPE_NAME:W});return function t(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"undefined"==typeof window?null:window;const n=e=>t(e);if(n.version="3.0.6",n.removed=[],!r||!r.document||9!==r.document.nodeType)return n.isSupported=!1,n;let{document:s}=r;const i=s,l=i.currentScript,{DocumentFragment:c,HTMLTemplateElement:A,Node:w,Element:U,NodeFilter:M,NamedNodeMap:B=r.NamedNodeMap||r.MozNamedAttrMap,HTMLFormElement:F,DOMParser:z,trustedTypes:H}=r,$=U.prototype,V=S($,"cloneNode"),Y=S($,"nextSibling"),K=S($,"childNodes"),Q=S($,"parentNode");if("function"==typeof A){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let J,X="";const{implementation:Z,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:re}=s,{importNode:ne}=i;let se={};n.isSupported="function"==typeof e&&"function"==typeof Q&&Z&&void 0!==Z.createHTMLDocument;const{MUSTACHE_EXPR:oe,ERB_EXPR:ie,TMPLIT_EXPR:ae,DATA_ATTR:le,ARIA_ATTR:ce,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:de}=G;let{IS_ALLOWED_URI:pe}=G,fe=null;const he=x({},[...k,...E,...R,...I,...P]);let me=null;const ge=x({},[...O,...j,...L,...D]);let ye=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),be=null,ve=null,_e=!0,Ae=!0,we=!1,xe=!0,Ce=!1,Se=!1,ke=!1,Ee=!1,Re=!1,Te=!1,Ie=!1,Ne=!0,Pe=!1,Oe=!0,je=!1,Le={},De=null;const Ue=x({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Me=null;const Be=x({},["audio","video","img","source","image","track"]);let Fe=null;const ze=x({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",He="http://www.w3.org/2000/svg",$e="http://www.w3.org/1999/xhtml";let We=$e,Ge=!1,Ve=null;const Ye=x({},[qe,He,$e],h);let Ke=null;const Qe=["application/xhtml+xml","text/html"];let Je=null,Xe=null;const Ze=s.createElement("form"),et=function(e){return e instanceof RegExp||e instanceof Function},tt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Xe||Xe!==e){if(e&&"object"==typeof e||(e={}),e=C(e),Ke=Ke=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,Je="application/xhtml+xml"===Ke?h:f,fe="ALLOWED_TAGS"in e?x({},e.ALLOWED_TAGS,Je):he,me="ALLOWED_ATTR"in e?x({},e.ALLOWED_ATTR,Je):ge,Ve="ALLOWED_NAMESPACES"in e?x({},e.ALLOWED_NAMESPACES,h):Ye,Fe="ADD_URI_SAFE_ATTR"in e?x(C(ze),e.ADD_URI_SAFE_ATTR,Je):ze,Me="ADD_DATA_URI_TAGS"in e?x(C(Be),e.ADD_DATA_URI_TAGS,Je):Be,De="FORBID_CONTENTS"in e?x({},e.FORBID_CONTENTS,Je):Ue,be="FORBID_TAGS"in e?x({},e.FORBID_TAGS,Je):{},ve="FORBID_ATTR"in e?x({},e.FORBID_ATTR,Je):{},Le="USE_PROFILES"in e&&e.USE_PROFILES,_e=!1!==e.ALLOW_ARIA_ATTR,Ae=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,xe=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Ce=e.SAFE_FOR_TEMPLATES||!1,Se=e.WHOLE_DOCUMENT||!1,Re=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,Ee=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,Oe=!1!==e.KEEP_CONTENT,je=e.IN_PLACE||!1,pe=e.ALLOWED_URI_REGEXP||q,We=e.NAMESPACE||$e,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&et(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ce&&(Ae=!1),Te&&(Re=!0),Le&&(fe=x({},[...P]),me=[],!0===Le.html&&(x(fe,k),x(me,O)),!0===Le.svg&&(x(fe,E),x(me,j),x(me,D)),!0===Le.svgFilters&&(x(fe,R),x(me,j),x(me,D)),!0===Le.mathMl&&(x(fe,I),x(me,L),x(me,D))),e.ADD_TAGS&&(fe===he&&(fe=C(fe)),x(fe,e.ADD_TAGS,Je)),e.ADD_ATTR&&(me===ge&&(me=C(me)),x(me,e.ADD_ATTR,Je)),e.ADD_URI_SAFE_ATTR&&x(Fe,e.ADD_URI_SAFE_ATTR,Je),e.FORBID_CONTENTS&&(De===Ue&&(De=C(De)),x(De,e.FORBID_CONTENTS,Je)),Oe&&(fe["#text"]=!0),Se&&x(fe,["html","head","body"]),fe.table&&(x(fe,["tbody"]),delete be.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');J=e.TRUSTED_TYPES_POLICY,X=J.createHTML("")}else void 0===J&&(J=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let r=null;const n="data-tt-policy-suffix";t&&t.hasAttribute(n)&&(r=t.getAttribute(n));const s="dompurify"+(r?"#"+r:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}(H,l)),null!==J&&"string"==typeof X&&(X=J.createHTML(""));o&&o(e),Xe=e}},rt=x({},["mi","mo","mn","ms","mtext"]),nt=x({},["foreignobject","desc","title","annotation-xml"]),st=x({},["title","style","font","a","script"]),ot=x({},E);x(ot,R),x(ot,T);const it=x({},I);x(it,N);const at=function(e){p(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},lt=function(e,t){try{p(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Re||Te)try{at(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ct=function(e){let t=null,r=null;if(Ee)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);r=t&&t[0]}"application/xhtml+xml"===Ke&&We===$e&&(e=''+e+"");const n=J?J.createHTML(e):e;if(We===$e)try{t=(new z).parseFromString(n,Ke)}catch(e){}if(!t||!t.documentElement){t=Z.createDocument(We,"template",null);try{t.documentElement.innerHTML=Ge?X:n}catch(e){}}const o=t.body||t.documentElement;return e&&r&&o.insertBefore(s.createTextNode(r),o.childNodes[0]||null),We===$e?re.call(t,Se?"html":"body")[0]:Se?t.documentElement:o},ut=function(e){return ee.call(e.ownerDocument||e,e,M.SHOW_ELEMENT|M.SHOW_COMMENT|M.SHOW_TEXT,null)},dt=function(e){return"function"==typeof w&&e instanceof w},pt=function(e,t,r){se[e]&&u(se[e],(e=>{e.call(n,t,r,Xe)}))},ft=function(e){let t=null;if(pt("beforeSanitizeElements",e,null),(r=e)instanceof F&&("string"!=typeof r.nodeName||"string"!=typeof r.textContent||"function"!=typeof r.removeChild||!(r.attributes instanceof B)||"function"!=typeof r.removeAttribute||"function"!=typeof r.setAttribute||"string"!=typeof r.namespaceURI||"function"!=typeof r.insertBefore||"function"!=typeof r.hasChildNodes))return at(e),!0;var r;const s=Je(e.nodeName);if(pt("uponSanitizeElement",e,{tagName:s,allowedTags:fe}),e.hasChildNodes()&&!dt(e.firstElementChild)&&v(/<[/\w]/g,e.innerHTML)&&v(/<[/\w]/g,e.textContent))return at(e),!0;if(!fe[s]||be[s]){if(!be[s]&&mt(s)){if(ye.tagNameCheck instanceof RegExp&&v(ye.tagNameCheck,s))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(s))return!1}if(Oe&&!De[s]){const t=Q(e)||e.parentNode,r=K(e)||e.childNodes;if(r&&t)for(let n=r.length-1;n>=0;--n)t.insertBefore(V(r[n],!0),Y(e))}return at(e),!0}return e instanceof U&&!function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});const r=f(e.tagName),n=f(t.tagName);return!!Ve[e.namespaceURI]&&(e.namespaceURI===He?t.namespaceURI===$e?"svg"===r:t.namespaceURI===qe?"svg"===r&&("annotation-xml"===n||rt[n]):Boolean(ot[r]):e.namespaceURI===qe?t.namespaceURI===$e?"math"===r:t.namespaceURI===He?"math"===r&&nt[n]:Boolean(it[r]):e.namespaceURI===$e?!(t.namespaceURI===He&&!nt[n])&&!(t.namespaceURI===qe&&!rt[n])&&!it[r]&&(st[r]||!ot[r]):!("application/xhtml+xml"!==Ke||!Ve[e.namespaceURI]))}(e)?(at(e),!0):"noscript"!==s&&"noembed"!==s&&"noframes"!==s||!v(/<\/no(script|embed|frames)/i,e.innerHTML)?(Ce&&3===e.nodeType&&(t=e.textContent,u([oe,ie,ae],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(n.removed,{element:e.cloneNode()}),e.textContent=t)),pt("afterSanitizeElements",e,null),!1):(at(e),!0)},ht=function(e,t,r){if(Ne&&("id"===t||"name"===t)&&(r in s||r in Ze))return!1;if(Ae&&!ve[t]&&v(le,t));else if(_e&&v(ce,t));else if(!me[t]||ve[t]){if(!(mt(e)&&(ye.tagNameCheck instanceof RegExp&&v(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&v(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&v(ye.tagNameCheck,r)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(r))))return!1}else if(Fe[t]);else if(v(pe,g(r,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(r,"data:")||!Me[e])if(we&&!v(ue,g(r,de,"")));else if(r)return!1;return!0},mt=function(e){return e.indexOf("-")>0},gt=function(e){pt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};let s=t.length;for(;s--;){const o=t[s],{name:i,namespaceURI:a,value:l}=o,c=Je(i);let p="value"===i?l:b(l);if(r.attrName=c,r.attrValue=p,r.keepAttr=!0,r.forceKeepAttr=void 0,pt("uponSanitizeAttribute",e,r),p=r.attrValue,r.forceKeepAttr)continue;if(lt(i,e),!r.keepAttr)continue;if(!xe&&v(/\/>/i,p)){lt(i,e);continue}Ce&&u([oe,ie,ae],(e=>{p=g(p,e," ")}));const f=Je(e.nodeName);if(ht(f,c,p)){if(!Pe||"id"!==c&&"name"!==c||(lt(i,e),p="user-content-"+p),J&&"object"==typeof H&&"function"==typeof H.getAttributeType)if(a);else switch(H.getAttributeType(f,c)){case"TrustedHTML":p=J.createHTML(p);break;case"TrustedScriptURL":p=J.createScriptURL(p)}try{a?e.setAttributeNS(a,i,p):e.setAttribute(i,p),d(n.removed)}catch(e){}}}pt("afterSanitizeAttributes",e,null)},yt=function e(t){let r=null;const n=ut(t);for(pt("beforeSanitizeShadowDOM",t,null);r=n.nextNode();)pt("uponSanitizeShadowNode",r,null),ft(r)||(r.content instanceof c&&e(r.content),gt(r));pt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,s=null,o=null,a=null;if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!=typeof e&&!dt(e)){if("function"!=typeof e.toString)throw _("toString is not a function");if("string"!=typeof(e=e.toString()))throw _("dirty is not a string, aborting")}if(!n.isSupported)return e;if(ke||tt(t),n.removed=[],"string"==typeof e&&(je=!1),je){if(e.nodeName){const t=Je(e.nodeName);if(!fe[t]||be[t])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof w)r=ct("\x3c!----\x3e"),s=r.ownerDocument.importNode(e,!0),1===s.nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?r=s:r.appendChild(s);else{if(!Re&&!Ce&&!Se&&-1===e.indexOf("<"))return J&&Ie?J.createHTML(e):e;if(r=ct(e),!r)return Re?null:Ie?X:""}r&&Ee&&at(r.firstChild);const l=ut(je?e:r);for(;o=l.nextNode();)ft(o)||(o.content instanceof c&&yt(o.content),gt(o));if(je)return e;if(Re){if(Te)for(a=te.call(r.ownerDocument);r.firstChild;)a.appendChild(r.firstChild);else a=r;return(me.shadowroot||me.shadowrootmode)&&(a=ne.call(i,a,!0)),a}let d=Se?r.outerHTML:r.innerHTML;return Se&&fe["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&v(W,r.ownerDocument.doctype.name)&&(d="\n"+d),Ce&&u([oe,ie,ae],(e=>{d=g(d,e," ")})),J&&Ie?J.createHTML(d):d},n.setConfig=function(){tt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),ke=!0},n.clearConfig=function(){Xe=null,ke=!1},n.isValidAttribute=function(e,t,r){Xe||tt({});const n=Je(e),s=Je(t);return ht(n,s,r)},n.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},n.removeHook=function(e){if(se[e])return d(se[e])},n.removeHooks=function(e){se[e]&&(se[e]=[])},n.removeAllHooks=function(){se={}},n}()}()},2232:function(e,t){var r,n;r=function e(){"use strict";var t="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t?t:{},r=!t.document&&!!t.postMessage,n=t.IS_PAPA_WORKER||!1,s={},o=0,i={parse:function(r,n){var a=(n=n||{}).dynamicTyping||!1;if(A(a)&&(n.dynamicTypingFunction=a,a={}),n.dynamicTyping=a,n.transform=!!A(n.transform)&&n.transform,n.worker&&i.WORKERS_SUPPORTED){var l=function(){if(!i.WORKERS_SUPPORTED)return!1;var r,n,a=(r=t.URL||t.webkitURL||null,n=e.toString(),i.BLOB_URL||(i.BLOB_URL=r.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",n,")();"],{type:"text/javascript"})))),l=new t.Worker(a);return l.onmessage=g,l.id=o++,s[l.id]=l}();return l.userStep=n.step,l.userChunk=n.chunk,l.userComplete=n.complete,l.userError=n.error,n.step=A(n.step),n.chunk=A(n.chunk),n.complete=A(n.complete),n.error=A(n.error),delete n.worker,void l.postMessage({input:r,config:n,workerId:l.id})}var f=null;return i.NODE_STREAM_INPUT,"string"==typeof r?(r=function(e){return 65279===e.charCodeAt(0)?e.slice(1):e}(r),f=n.download?new c(n):new d(n)):!0===r.readable&&A(r.read)&&A(r.on)?f=new p(n):(t.File&&r instanceof File||r instanceof Object)&&(f=new u(n)),f.stream(r)},unparse:function(e,t){var r=!1,n=!0,s=",",o="\r\n",a='"',l=a+a,c=!1,u=null,d=!1;!function(){if("object"==typeof t){if("string"!=typeof t.delimiter||i.BAD_DELIMITERS.filter((function(e){return-1!==t.delimiter.indexOf(e)})).length||(s=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(r=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(o=t.newline),"string"==typeof t.quoteChar&&(a=t.quoteChar),"boolean"==typeof t.header&&(n=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+a),("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(d=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/)}}();var p=new RegExp(h(a),"g");if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw new Error("Unable to serialize unrecognized input");function f(e,t,r){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var a=Array.isArray(e)&&0=this._config.preview;if(n)t.postMessage({results:a,workerId:i.WORKER_ID,finished:c});else if(A(this._config.chunk)&&!r){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!A(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){A(this._config.error)?this._config.error(e):n&&this._config.error&&t.postMessage({workerId:i.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=i.RemoteChunkSize),l.call(this,e),this._nextChunk=r?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),r||(t.onload=_(this._chunkLoaded,this),t.onerror=_(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!r),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var n in e)t.setRequestHeader(n,e[n])}if(this._config.chunkSize){var s=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+s)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}r&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var r=t.statusText||e;this._sendError(new Error(r))}}function u(e){var t,r;(e=e||{}).chunkSize||(e.chunkSize=i.LocalChunkSize),l.call(this,e);var n="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((t=new FileReader).onload=_(this._chunkLoaded,this),t.onerror=_(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,r=this._config.chunkSize;return r?(e=t.substring(0,r),t=t.substring(r)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function p(e){l.call(this,e=e||{});var t=[],r=!0,n=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){n&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=_((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=_((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=_((function(){this._streamCleanUp(),n=!0,this._streamData("")}),this),this._streamCleanUp=_((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,r,n,s=Math.pow(2,53),o=-s,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,p=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(A(e.step)){var b=e.step;e.step=function(t){if(y=t,x())w();else{if(w(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?r.abort():(y.data=y.data[0],b(y,c))}}}function _(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function w(){return y&&n&&(S("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+i.DefaultDelimiter+"'"),n=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!_(e)}))),x()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;x()&&t=g.length?"__parsed_extra":g[n]),e.transform&&(i=e.transform(i,o)),i=C(o,i),"__parsed_extra"===o?(s[o]=s[o]||[],s[o].push(i)):s[o]=i}return e.header&&(n>g.length?S("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+n,d+r):n=n.length/2?"\r\n":"\r"}(s,l)),n=!1,e.delimiter)A(e.delimiter)&&(e.delimiter=e.delimiter(s),y.meta.delimiter=e.delimiter);else{var c=function(t,r,n,s,o){var a,l,c,u;o=o||[",","\t","|",";",i.RECORD_SEP,i.UNIT_SEP];for(var d=0;d=a)return G(!0)}else for(B=u,u++;;){if(-1===(B=i.indexOf(t,B+1)))return f||w.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:_.length,index:u}),$();if(B===m-1)return $(i.substring(u,B).replace(M,t));if(t!==c||i[B+1]!==c){if(t===c||0===B||i[B-1]!==c){-1!==D&&D=a)return G(!0);break}w.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:_.length,index:u}),B++}}else B++}return $();function q(e){_.push(e),C=u}function H(e){var t=0;if(-1!==e){var r=i.substring(B+1,e);r&&""===r.trim()&&(t=r.length)}return t}function $(e){return f||(void 0===e&&(e=i.substring(u)),x.push(e),u=m,q(x),v&&V()),G()}function W(e){u=e,q(x),x=[],U=i.indexOf(n,u)}function G(e){return{data:_,errors:w,meta:{delimiter:r,linebreak:n,aborted:d,truncated:!!e,cursor:C+(p||0)}}}function V(){o(G()),_=[],w=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,r=s[t.workerId],n=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){n=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:b,resume:b};if(A(r.userStep)){for(var i=0;i{"use strict";var n=r(7200);function s(){}function o(){}o.resetWarningCache=s,e.exports=function(){function e(e,t,r,s,o,i){if(i!==n){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:s};return r.PropTypes=r,r}},900:(e,t,r)=>{e.exports=r(7336)()},7200:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4108:(e,t,r)=>{"use strict";var n=r(1280),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,o={},c=null,u=null;for(n in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,n)&&!l.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===o[n]&&(o[n]=t[n]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},7e3:(e,t,r)=>{"use strict";e.exports=r(4108)},3736:e=>{e.exports=function(e,t,r,n){var s=r?r.call(n,e,t):void 0;if(void 0!==s)return!!s;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),l=0;l{"use strict";var t=[];function r(e){for(var r=-1,n=0;n{"use strict";var t={};e.exports=function(e,r){var n=function(e){if(void 0===t[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(r)}},2940:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},9516:(e,t,r)=>{"use strict";e.exports=function(e){var t=r.nc;t&&e.setAttribute("nonce",t)}},7020:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(r){!function(e,t,r){var n="";r.supports&&(n+="@supports (".concat(r.supports,") {")),r.media&&(n+="@media ".concat(r.media," {"));var s=void 0!==r.layer;s&&(n+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),n+=r.css,s&&(n+="}"),r.media&&(n+="}"),r.supports&&(n+="}");var o=r.sourceMap;o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,r)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9296:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3376:(e,t,r)=>{"use strict";r.d(t,{cp:()=>Ut});var n=function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r2||$(L)>3?"":" "}function V(e,t){for(;--t&&F()&&!(L<48||L>102||L>57&&L<65||L>70&&L<97););return H(e,q()+(t<6&&32==z()&&32==F()))}function Y(e){for(;F();)switch(L){case e:return j;case 34:case 39:34!==e&&39!==e&&Y(L);break;case 40:41===e&&Y(e);break;case 92:F()}return j}function K(e,t){for(;F()&&e+L!==57&&(e+L!==84||47!==z()););return"/*"+H(t,j-1)+"*"+v(47===e?e:F())}function Q(e){for(;!$(z());)F();return H(e,j)}function J(e,t){for(var r="",n=0;n6)switch(S(e,t+1)){case 109:if(45!==S(e,t+4))break;case 102:return x(e,/(.+:)(.+)-([^]+)/,"$1"+d+"$2-$3$1"+u+(108==S(e,t+3)?"$3":"$2-$3"))+e;case 115:return~C(e,"stretch")?Z(x(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return x(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,(function(t,r,n,s,o,i,a){return c+r+":"+n+a+(s?c+r+"-span:"+(o?i:+i-+n)+a:"")+e}));case 4949:if(121===S(e,t+6))return x(e,":",":"+d)+e;break;case 6444:switch(S(e,45===S(e,14)?18:11)){case 120:return x(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+d+(45===S(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+c+"$2box$3")+e;case 100:return x(e,":",":"+c)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return x(e,"scroll-","scroll-snap-")+e}return e}function ee(e,t,r,n){if(e.length>-1&&!e.return)switch(e.type){case h:return void(e.return=Z(e.value,e.length,r));case g:return J([M(e,{value:x(e.value,"@","@"+d)})],n);case f:if(e.length)return function(e,t){return e.map(t).join("")}(r=e.props,(function(t){switch(w(t,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":B(M(e,{props:[x(t,/:(read-\w+)/,":"+u+"$1")]})),B(M(e,{props:[t]})),_(e,{props:I(r,n)});break;case"::placeholder":B(M(e,{props:[x(t,/:(plac\w+)/,":"+d+"input-$1")]})),B(M(e,{props:[x(t,/:(plac\w+)/,":"+u+"$1")]})),B(M(e,{props:[x(t,/:(plac\w+)/,c+"input-$1")]})),B(M(e,{props:[t]})),_(e,{props:I(r,n)})}return""}))}}function te(e){return function(e){return D="",e}(re("",null,null,null,[""],e=function(e){return N=P=1,O=E(D=e),j=0,[]}(e),0,[0],e))}function re(e,t,r,n,s,o,i,a,l){for(var c=0,u=0,d=i,p=0,f=0,h=0,m=1,g=1,y=1,b=0,_="",A=s,w=o,k=n,R=_;g;)switch(h=b,b=F()){case 40:if(108!=h&&58==S(R,d-1)){-1!=C(R+=x(W(b),"&","&\f"),"&\f")&&(y=-1);break}case 34:case 39:case 91:R+=W(b);break;case 9:case 10:case 13:case 32:R+=G(h);break;case 92:R+=V(q()-1,7);continue;case 47:switch(z()){case 42:case 47:T(se(K(F(),q()),t,r,l),l);break;default:R+="/"}break;case 123*m:a[c++]=E(R)*y;case 125*m:case 59:case 0:switch(b){case 0:case 125:g=0;case 59+u:-1==y&&(R=x(R,/\f/g,"")),f>0&&E(R)-d&&T(f>32?oe(R+";",n,r,d-1,l):oe(x(R," ","")+";",n,r,d-2,l),l);break;case 59:R+=";";default:if(T(k=ne(R,t,r,c,u,s,a,_,A=[],w=[],d,o),o),123===b)if(0===u)re(R,t,k,k,A,o,d,a,w);else switch(99===p&&110===S(R,3)?100:p){case 100:case 108:case 109:case 115:re(e,k,k,n&&T(ne(e,k,k,0,0,s,a,_,s,A=[],d,w),w),s,w,d,a,n?A:w);break;default:re(R,k,k,k,[""],w,0,a,w)}}c=u=f=0,m=y=1,_=R="",d=i;break;case 58:d=1+E(R),f=h;default:if(m<1)if(123==b)--m;else if(125==b&&0==m++&&125==(L=j>0?S(D,--j):0,P--,10===L&&(P=1,N--),L))continue;switch(R+=v(b),b*m){case 38:y=u>0?1:(R+="\f",-1);break;case 44:a[c++]=(E(R)-1)*y,y=1;break;case 64:45===z()&&(R+=W(F())),p=z(),u=d=E(_=R+=Q(q())),b++;break;case 45:45===h&&2==E(R)&&(m=0)}}return o}function ne(e,t,r,n,s,o,i,a,l,c,u,d){for(var p=s-1,h=0===s?o:[""],m=R(h),g=0,y=0,v=0;g0?h[_]+" "+w:x(w,/&\f/g,h[_])))&&(l[v++]=C);return U(e,t,r,0===s?f:a,l,c,u,d)}function se(e,t,r,n){return U(e,t,r,p,v(L),k(e,2,-2),0,n)}function oe(e,t,r,n,s){return U(e,t,r,h,k(e,0,n),k(e,n+1,-1),n,s)}const ie={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ae="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",le="undefined"!=typeof window&&"HTMLElement"in window,ce=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY&&"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY),ue=(new Set,Object.freeze([])),de=Object.freeze({}),pe=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),fe=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,he=/(^-|-$)/g;function me(e){return e.replace(fe,"-").replace(he,"")}var ge=/(a)(d)/gi,ye=function(e){return String.fromCharCode(e+(e>25?39:97))};function be(e){var t,r="";for(t=Math.abs(e);t>52;t=t/52|0)r=ye(t%52)+r;return(ye(t%52)+r).replace(ge,"$1-$2")}var ve,_e=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},Ae=function(e){return _e(5381,e)};function we(e){return"string"==typeof e&&!0}var xe="function"==typeof Symbol&&Symbol.for,Ce=xe?Symbol.for("react.memo"):60115,Se=xe?Symbol.for("react.forward_ref"):60112,ke={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Ee={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Re={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Te=((ve={})[Se]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},ve[Ce]=Re,ve);function Ie(e){return("type"in(t=e)&&t.type.$$typeof)===Ce?Re:"$$typeof"in e?Te[e.$$typeof]:ke;var t}var Ne=Object.defineProperty,Pe=Object.getOwnPropertyNames,Oe=Object.getOwnPropertySymbols,je=Object.getOwnPropertyDescriptor,Le=Object.getPrototypeOf,De=Object.prototype;function Ue(e,t,r){if("string"!=typeof t){if(De){var n=Le(t);n&&n!==De&&Ue(e,n,r)}var s=Pe(t);Oe&&(s=s.concat(Oe(t)));for(var o=Ie(e),i=Ie(t),a=0;a0?" Args: ".concat(t.join(", ")):""))}var Ge=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,r=0;r=this.groupSizes.length){for(var r=this.groupSizes,n=r.length,s=n;e>=s;)if((s<<=1)<0)throw We(16,"".concat(e));this.groupSizes=new Uint32Array(s),this.groupSizes.set(r),this.length=s;for(var o=n;o=this.length||0===this.groupSizes[e])return t;for(var r=this.groupSizes[e],n=this.indexOfGroup(e),s=n+r,o=n;o=0){var r=document.createTextNode(t);return this.element.insertBefore(r,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(l+="".concat(e,","))})),n+="".concat(i).concat(a,'{content:"').concat(l,'"}').concat("/*!sc*/\n")},o=0;o0?".".concat(t):e},u=l.slice();u.push((function(e){e.type===f&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(ut,r).replace(n,c))})),i.prefix&&u.push(ee),u.push(X);var d=function(e,s,o,a){void 0===s&&(s=""),void 0===o&&(o=""),void 0===a&&(a="&"),t=a,r=s,n=new RegExp("\\".concat(r,"\\b"),"g");var l=e.replace(dt,""),c=te(o||s?"".concat(o," ").concat(s," { ").concat(l," }"):l);i.namespace&&(c=pt(c,i.namespace));var d,p,f,h=[];return J(c,(d=u.concat((f=function(e){return h.push(e)},function(e){e.root||(e=e.return)&&f(e)})),p=R(d),function(e,t,r,n){for(var s="",o=0;o="A"&&e<="Z"};function wt(e){for(var t="",r=0;r>>0);if(!t.hasNameForId(this.componentId,o)){var i=r(s,".".concat(o),void 0,this.componentId);t.insertRules(this.componentId,o,i)}n=Fe(n,o),this.staticRulesId=o}else{for(var a=_e(this.baseHash,r.hash),l="",c=0;c>>0);t.hasNameForId(this.componentId,p)||t.insertRules(this.componentId,p,r(l,".".concat(p),void 0,this.componentId)),n=Fe(n,p)}}return n},e}(),Tt=i().createContext(void 0);Tt.Consumer;var It={};function Nt(e,t,r){var s=Be(e),a=e,l=!we(e),c=t.attrs,u=void 0===c?ue:c,d=t.componentId,p=void 0===d?function(e,t){var r="string"!=typeof e?"sc":me(e);It[r]=(It[r]||0)+1;var n="".concat(r,"-").concat(function(e){return be(Ae(e)>>>0)}("6.1.1"+r+It[r]));return t?"".concat(t,"-").concat(n):n}(t.displayName,t.parentComponentId):d,f=t.displayName,h=void 0===f?function(e){return we(e)?"styled.".concat(e):"Styled(".concat(function(e){return e.displayName||e.name||"Component"}(e),")")}(e):f,m=t.displayName&&t.componentId?"".concat(me(t.displayName),"-").concat(t.componentId):t.componentId||p,g=s&&a.attrs?a.attrs.concat(u).filter(Boolean):u,y=t.shouldForwardProp;if(s&&a.shouldForwardProp){var b=a.shouldForwardProp;if(t.shouldForwardProp){var v=t.shouldForwardProp;y=function(e,t){return b(e,t)&&v(e,t)}}else y=b}var _=new Rt(r,m,s?a.componentStyle:void 0);function A(e,t){return function(e,t,r){var s=e.attrs,a=e.componentStyle,l=e.defaultProps,c=e.foldedComponentIds,u=e.styledComponentId,d=e.target,p=i().useContext(Tt),f=bt(),h=e.shouldForwardProp||f.shouldForwardProp,m=function(e,t,r){for(var s,o=n(n({},t),{className:void 0,theme:r}),i=0;i2&&ct.registerId(this.componentId+e),this.removeStyles(e,r),this.createStyles(e,t,r,n)}}(),function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString(),r=rt(),n=ze([r&&'nonce="'.concat(r,'"'),"".concat(ae,'="true"'),"".concat("data-styled-version",'="').concat("6.1.1",'"')].filter(Boolean)," ");return"")},this.getStyleTags=function(){if(e.sealed)throw We(2);return e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)throw We(2);var r=((t={})[ae]="",t["data-styled-version"]="6.1.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),s=rt();return s&&(r.nonce=s),[i().createElement("style",n({},r,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ct({isServer:!0}),this.sealed=!1}e.prototype.collectStyles=function(e){if(this.sealed)throw We(2);return i().createElement(vt,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw We(3)}}(),"__sc-".concat(ae,"__")},4928:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var n=r(7e3),s=r(900),o=r.n(s),i=r(3376),a=r(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,n.jsx)(l,{children:(0,n.jsx)("audio",{className:"edit-audio-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:r,onUpdateURL:s,value:o,valueURL:i})=>(0,n.jsx)(a.MediaPicker,{allowedTypes:["audio"],className:e,icon:"format-audio",onReset:t,onUpdate:r,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2312:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var n=r(7e3),s=r(900),o=r.n(s),i=r(7287);const a=({label:e,value:t,options:r,onChange:s})=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.BaseControl,{label:e}),r.map((e=>(0,n.jsx)(i.CheckboxControl,{label:e.label,checked:t.includes(e.value),onChange:r=>{s(r?[...t,e.value]:[...t.filter((t=>t!==e.value))])}})))]});a.propTypes={label:o().string.isRequired,value:o().arrayOf(o().string).isRequired,options:o().arrayOf(o().shape({label:o().string.isRequired,value:o().string.isRequired})).isRequired,onChange:o().func.isRequired};const l=a},8312:(e,t,r)=>{"use strict";r.d(t,{default:()=>u});var n=r(7e3),s=r(1280),o=r.n(s),i=r(3396),a=r(900),l=r.n(a),c=r(5328);class u extends o().PureComponent{static handleSubmit(e){e.preventDefault()}constructor(e){super(e),this.handleChange=this.handleChange.bind(this),this.state={error:"",success:""}}handleChange(e){const{attributeName:t,callback:r,setAttributes:n}=this.props;e.target.files&&e.target.files[0]&&(0,c.parseCSVFile)(e.target.files[0]).then((e=>r?r(e):e)).then((e=>{Array.isArray(e)&&e.length>0?(this.setState({error:"",success:(0,i.__)("Successfully read CSV data.","alley-scripts")}),n({[t]:JSON.stringify(e)})):this.setState({error:(0,i.__)("Could not map CSV data. Please check the source file to ensure that it has the correct structure.","alley-scripts"),success:""})})).catch((e=>{this.setState({error:e,success:""})}))}render(){const{error:e="",success:t=""}=this.state;return(0,n.jsxs)("div",{className:"alley-scripts-block-csv-uploader",children:[(0,n.jsx)("h2",{children:(0,i.__)("Upload CSV","alley-scripts")}),(0,n.jsxs)("form",{onSubmit:this.handleSubmit,children:[""!==e?(0,n.jsxs)("div",{style:{color:"#c00"},children:[(0,n.jsx)("strong",{children:(0,i.__)("Error:","alley-scripts")})," ",e]}):null,""!==t?(0,n.jsxs)("div",{style:{color:"#0c0"},children:[(0,n.jsx)("strong",{children:(0,i.__)("Success:","alley-scripts")})," ",t]}):null,(0,n.jsx)("div",{children:(0,n.jsxs)("label",{htmlFor:"alley-scripts-block-csv-uploader-file",children:[(0,n.jsx)("p",{children:(0,i.__)("Select a file to load data.","alley-scripts")}),(0,n.jsx)("input",{id:"alley-scripts-block-csv-uploader-file",onChange:this.handleChange,type:"file"})]})})]})]})}}u.defaultProps={callback:null},u.propTypes={attributeName:l().string.isRequired,callback:l().func,setAttributes:l().func.isRequired}},8348:(e,t,r)=>{"use strict";r.d(t,{default:()=>p});var n=r(7e3),s=r(3396),o=r(900),i=r.n(o),a=r(3376),l=r(7720);const c=a.cp.div` + box-sizing: border-box; + flex-shrink: 0; + height: auto; + max-height: 1450px; + max-width: 1450px; + min-height: 20px; + min-width: 20px; + position: relative; + width: auto; +`,u=({src:e})=>(0,n.jsx)(c,{children:(0,n.jsx)("img",{alt:(0,s.__)("Edit image","alley-scripts"),className:"edit-image-preview",src:e,title:(0,s.__)("Edit image","alley-scripts")})});u.propTypes={src:i().string.isRequired};const d=({className:e,imageSize:t,displayControlsInToolbar:r,onReset:s,onUpdate:o,onUpdateURL:i,value:a,valueURL:c})=>(0,n.jsx)(l.MediaPicker,{allowedTypes:["image"],className:e,icon:"format-image",imageSize:t,displayControlsInToolbar:r,onReset:s,onUpdate:o,onUpdateURL:i,preview:u,value:a,valueURL:c});d.defaultProps={className:"",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,valueURL:""},d.propTypes={className:i().string,imageSize:i().string,displayControlsInToolbar:i().bool,onReset:i().func.isRequired,onUpdate:i().func.isRequired,onUpdateURL:i().func,value:i().number.isRequired,valueURL:i().string};const p=d},7720:(e,t,r)=>{"use strict";r.d(t,{AudioPicker:()=>n.default,CSVUploader:()=>o.default,Checkboxes:()=>s.default,ImagePicker:()=>i.default,MediaPicker:()=>a.default,PostPicker:()=>c.default,PostSelector:()=>u.default,SafeHtml:()=>l.default,Selector:()=>d.default,Sortable:()=>p.default,SortableItem:()=>f.default,TermSelector:()=>h.default,VideoPicker:()=>m.default});var n=r(4928),s=r(2312),o=r(8312),i=r(8348),a=r(5680),l=r(9160),c=r(4808),u=r(8800),d=r(9064),p=r(8504),f=r(1917),h=r(668),m=r(5316)},5680:(e,t,r)=>{"use strict";r.d(t,{default:()=>m});var n=r(7e3),s=r(900),o=r.n(s),i=r(3376),a=r(9528),l=r(7287),c=r(7752),u=r(3396),d=r(5328);const p=i.cp.div` + display: block; + position: relative; +`,f=i.cp.div` + background: white; + border: 1px solid black; + padding: 1em; +`,h=({allowedTypes:e,className:t,icon:r,imageSize:s,displayControlsInToolbar:o,onReset:i,onUpdate:h,onUpdateURL:m,preview:g,value:y,valueURL:b})=>{const{media:v}=(0,c.useSelect)((e=>({media:y?e("core").getMedia(y):void 0})),[y]);if(0!==y&&null===v)return(0,n.jsx)(l.Spinner,{});const _=v?(0,d.getMediaUrl)(v,s):b;return _?(0,n.jsxs)(p,{className:t,children:[g?(0,n.jsx)(g,{src:_}):(0,n.jsxs)(f,{className:"alley-scripts-media-picker__preview",children:[(0,n.jsx)("p",{children:(0,u.__)("Selected file:","alley-scripts")}),(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:_,children:_})})]}),o?(0,n.jsx)(a.BlockControls,{group:"other",children:(0,n.jsx)(a.MediaReplaceFlow,{name:(0,u.__)("Edit Media","alley-scripts"),mediaId:y,mediaURL:_,allowedTypes:e,onSelect:h,onSelectURL:m,children:(0,n.jsx)(l.ToolbarButton,{isDestructive:!0,text:(0,u.__)("Remove","alley-scripts"),onClick:i})})}):(0,n.jsx)(l.Button,{variant:"primary",onClick:i,children:(0,u.__)("Reset","alley-scripts")})]}):(0,n.jsx)(p,{className:t,children:(0,n.jsx)(a.MediaPlaceholder,{allowedTypes:e,disableMediaButtons:!!b,icon:(0,n.jsx)(a.BlockIcon,{icon:r}),onSelect:h,onSelectURL:m,value:{id:y,src:_}})})};h.defaultProps={allowedTypes:[],className:"",icon:"format-aside",imageSize:"thumbnail",displayControlsInToolbar:!1,onUpdateURL:null,preview:null,valueURL:""},h.propTypes={allowedTypes:o().arrayOf(o().string),className:o().string,icon:o().string,imageSize:o().string,displayControlsInToolbar:o().bool,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,preview:o().element,value:o().number.isRequired,valueURL:o().string};const m=h},4808:(e,t,r)=>{"use strict";r.d(t,{default:()=>F});var n=r(7e3),s=r(1280),o=r(3376),i=r(7287),a=r(3396),l=r(7204),c=r(2e3),u=r(2108),d=r.n(u),p=r(7020),f=r.n(p),h=r(7240),m=r.n(h),g=r(9516),y=r.n(g),b=r(2940),v=r.n(b),_=r(9296),A=r.n(_),w=r(9680),x={};x.styleTagTransform=A(),x.setAttributes=y(),x.insert=m().bind(null,"head"),x.domAPI=f(),x.insertStyleElement=v(),d()(w.c,x),w.c&&w.c.locals&&w.c.locals;var C=r(4632),S=r.n(C),k=r(6484),E=r.n(k),R=r(7424),T={};T.styleTagTransform=A(),T.setAttributes=y(),T.insert=m().bind(null,"head"),T.domAPI=f(),T.insertStyleElement=v(),d()(R.c,T),R.c&&R.c.locals&&R.c.locals;const I=window.wp.htmlEntities;var N=r(9160);const P=o.cp.div` + align-items: center; + gap: 4px; + overflow-wrap: anywhere; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0.5rem 0.75rem; +`,O=({title:e,postType:t,attachmentID:r})=>{const s=(0,c.useMedia)(r),o=s?.media_details?.sizes?.thumbnail?.source_url,i=s?.alt_text??"";return(0,n.jsxs)(P,{children:[o?(0,n.jsx)("img",{style:{maxWidth:"100%",height:"auto"},loading:"lazy",src:o,alt:i}):null,(0,n.jsx)(N.default,{html:(0,I.decodeEntities)(e),className:"post-picker-result-title",tag:"strong"}),(0,a.sprintf)(" (%s)",t)]})},j=({baseUrl:e,searchRender:t,selected:r,setSelected:o,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)(!1),[p,f]=(0,s.useState)([]),[h,m]=(0,s.useState)(!1),[g,y]=(0,s.useState)(0),[b,v]=(0,s.useState)({searchValue:"",page:1}),_=(0,s.useCallback)((async(t,r=!1)=>{if(t.searchValue&&t.searchValue.length<=2)return;const n=function(){let r=(0,l.addQueryArgs)(e,{page:t.page,_embed:1,exclude:c.join(",")});return t.searchValue&&t.searchValue.length>2&&(r=(0,l.addQueryArgs)(r,{search:t.searchValue})),r}();d(!0);const s=await S()({path:n,parse:!1});y(parseInt(s.headers.get("X-WP-TotalPages"),10));const o=await s.json();let i=o;t.page>1&&(i=[...p,...o]),r||(f(i),d(!1))}),[p,e,c]);return(0,s.useEffect)((()=>{let e=!1;return h||(m(!0),_(b,e)),()=>{e=!0}}),[_,h,b]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.TextControl,{value:b.searchValue,placeholder:(0,a.__)("Search...","alley-scripts"),label:(0,a.__)("Search","alley-scripts"),onChange:e=>{const t={...b,searchValue:e,page:1};v(t),_(t)}}),(0,n.jsxs)("div",{className:"alley-scripts-post-picker__post-list",children:[p?p.map((e=>(0,n.jsx)(i.Button,{className:E()({"alley-scripts-post-picker__post":!0,"is-selected":e.id===r}),onClick:()=>o(e.id),children:t?t(e):(0,n.jsx)(O,{title:e.title,postType:e.subtype,attachmentID:e?._embedded?.self[0]?.featured_media})},e.id))):null,u?(0,n.jsx)(i.Spinner,{}):null,g>0&&b.page{const e={...b,page:b.page+1};v(e),_(e)},children:(0,a.__)("Load More","alley-scripts")})}):null]})]})},L=({baseUrl:e,closeModal:t,modalTitle:r,onUpdate:o,searchRender:l,suppressPostIds:c=[]})=>{const[u,d]=(0,s.useState)();return(0,n.jsxs)(i.Modal,{className:"alley-scripts-post-picker__modal",isDismissible:!0,title:r,onRequestClose:t,closeButtonLabel:"Close",children:[(0,n.jsx)(j,{baseUrl:e,selected:u??0,setSelected:d,searchRender:l,suppressPostIds:c}),(0,n.jsxs)("div",{className:"alley-scripts-post-picker__buttons",children:[(0,n.jsx)(i.Button,{variant:"secondary",onClick:t,children:(0,a.__)("Cancel","alley-scripts")}),(0,n.jsx)(i.Button,{variant:"primary",onClick:()=>{u&&(o(u),t())},disabled:!u,children:(0,a.__)("Select","alley-scripts")})]})]})};var D=r(3800),U={};U.styleTagTransform=A(),U.setAttributes=y(),U.insert=m().bind(null,"head"),U.domAPI=f(),U.insertStyleElement=v(),d()(D.c,U),D.c&&D.c.locals&&D.c.locals;const M=o.cp.div` + display: block; + position: relative; +`,B=o.cp.div` + border: 1px solid #eee; + display: flex; + flex-direction: column; + margin: 5px 0; + padding: 0.5rem 0.75rem; + text-align: center; +`,F=({allowedTypes:e,className:t,getPostType:r,modalTitle:o=(0,a.__)("Select Post","alley-scripts"),onReset:u,onUpdate:d,params:p={},previewLookup:f,previewRender:h,replaceText:m=(0,a.__)("Replace","alley-scripts"),resetText:g=(0,a.__)("Reset","alley-scripts"),searchEndpoint:y="/wp/v2/search",searchRender:b,selectText:v=(0,a.__)("Select","alley-scripts"),suppressPostIds:_=[],title:A="",value:w=0})=>{const[x,C]=(0,s.useState)(!1),S=(0,l.addQueryArgs)(y,{type:"post",subtype:e??"any",...p}),k=f?f(w):(0,c.usePostById)(w,r),{featured_media:E,title:{rendered:R=""}={},type:T=""}=k||{},I=()=>{C(!0)},N=()=>(0,n.jsxs)(i.ButtonGroup,{children:[(0,n.jsx)(i.Button,{variant:"secondary",onClick:u,style:{margin:"0 4px"},children:g}),(0,n.jsx)(i.Button,{variant:"secondary",onClick:I,style:{margin:"0 4px"},children:m})]});return 0!==w&&null===k?(0,n.jsx)(i.Spinner,{}):(0,n.jsxs)(M,{className:t,children:[A?(0,n.jsx)("h4",{children:A}):null,0!==w&&void 0===k?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.Notice,{status:"error",isDismissible:!1,className:"post-picker-notice",children:(0,n.jsx)("p",{children:(0,a.sprintf)((0,a.__)("Post %d is no longer available; it has been unpublished or deleted","alley-scripts"),w)})}),N()]}):null,0!==w&&void 0!==k?(0,n.jsxs)(n.Fragment,{children:[void 0!==h?h(k):(0,n.jsx)(B,{children:(0,n.jsx)(O,{title:R,postType:T,attachmentID:E})}),N()]}):null,0===w?(0,n.jsx)(i.Button,{onClick:I,variant:"secondary",children:v}):null,x?(0,n.jsx)(L,{closeModal:()=>{C(!1)},baseUrl:S,modalTitle:o,onUpdate:d,searchRender:b,suppressPostIds:_}):null]})}},8800:(e,t,r)=>{"use strict";r.d(t,{default:()=>c});var n=r(7e3),s=r(900),o=r.n(s),i=r(3396),a=r(7720);const l=({className:e,emptyLabel:t,label:r,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,n.jsx)(a.Selector,{type:"post",className:e,emptyLabel:t,label:r,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No posts found","alley-scripts"),label:(0,i.__)("Search for posts","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for posts","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},9160:(e,t,r)=>{"use strict";r.d(t,{default:()=>c});var n=r(7e3),s=r(6595),o=r.n(s),i=r(900),a=r.n(i);const l=({className:e,html:t,tag:r})=>(0,n.jsx)(r,{className:e,dangerouslySetInnerHTML:{__html:o().sanitize(t)}});l.defaultProps={className:""},l.propTypes={className:a().string,html:a().string.isRequired,tag:a().string.isRequired};const c=l},9064:(e,t,r)=>{"use strict";r.d(t,{default:()=>M});var n=r(7e3),s=r(900),o=r.n(s),i=r(1280),a=r(4632),l=r.n(a),c=r(6484),u=r.n(c),d=r(7287),p=r(3396),f=r(7204);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let m;const g=new Uint8Array(16);function y(){if(!m&&(m="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(g)}const b=[];for(let e=0;e<256;++e)b.push((e+256).toString(16).slice(1));const v=function(e,t,r){if(h.randomUUID&&!t&&!e)return h.randomUUID();const n=(e=e||{}).random||(e.rng||y)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=n[e];return t}return function(e,t=0){return b[e[t+0]]+b[e[t+1]]+b[e[t+2]]+b[e[t+3]]+"-"+b[e[t+4]]+b[e[t+5]]+"-"+b[e[t+6]]+b[e[t+7]]+"-"+b[e[t+8]]+b[e[t+9]]+"-"+b[e[t+10]]+b[e[t+11]]+b[e[t+12]]+b[e[t+13]]+b[e[t+14]]+b[e[t+15]]}(n)};var _=r(2e3);const A=({emptyLabel:e,error:t,id:r,isOpen:s,labelledbyId:o,loading:i,onSelect:a,options:l,selectedItems:c,threshold:f,value:h})=>{if(!i&&(""===h||f>h.length))return null;let m="",g="";return i?(m="loading",g=(0,p.__)("Loading...","alley-scripts")):t?(m="error",g=t):i||0!==l.length||(m="no-posts",g=e),i||!i&&(h&&0===l.length||t)?(0,n.jsx)("div",{"aria-busy":!0,className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,n.jsx)("div",{className:u()("autocomplete__dropdown--notice",`autocomplete__${m}`),children:g})}):(0,n.jsx)("div",{className:u()("autocomplete__dropdown",{"autocomplete__dropdown--is-open":s}),children:(0,n.jsx)("ul",{role:"listbox","aria-labelledby":o,id:r,className:u()("autocomplete__dropdown--results","autocomplete__list"),children:l.map((e=>(0,n.jsx)("li",{className:"autocomplete__list--item",children:(0,n.jsx)(d.Button,{onClick:()=>a(e),type:"button",disabled:c.some((t=>t.id===e.id)),isTertiary:!0,children:e.title})},e.id)))})})};A.propTypes={emptyLabel:o().string.isRequired,error:o().string.isRequired,id:o().string.isRequired,isOpen:o().bool.isRequired,labelledbyId:o().string.isRequired,loading:o().bool.isRequired,options:o().arrayOf(o().shape({label:o().string,value:o().string})).isRequired,onSelect:o().func.isRequired,selectedItems:o().shape([]).isRequired,threshold:o().number.isRequired,value:o().string.isRequired};const w=A;var x=r(2108),C=r.n(x),S=r(7020),k=r.n(S),E=r(7240),R=r.n(E),T=r(9516),I=r.n(T),N=r(2940),P=r.n(N),O=r(9296),j=r.n(O),L=r(5500),D={};D.styleTagTransform=j(),D.setAttributes=I(),D.insert=R().bind(null,"head"),D.domAPI=k(),D.insertStyleElement=P(),C()(L.c,D),L.c&&L.c.locals&&L.c.locals;const U=({type:e,className:t,emptyLabel:r,label:s,maxPages:o,multiple:a,onSelect:c,placeholder:p,subTypes:h,selected:m,threshold:g})=>{const y=v(),[b,A]=(0,i.useState)(""),[x,C]=(0,i.useState)([]),[S,k]=(0,i.useState)(!1),[E,R]=(0,i.useState)(!1),[T,I]=(0,i.useState)(""),[N,P]=(0,i.useState)([]),O=(0,i.useRef)(),j=(0,_.useDebounce)(T,750),L=(0,i.useCallback)((async(t=1)=>{if(j.length0?h.join(","):"any",type:e});await l()({path:n,parse:!1}).then((e=>{const t=parseInt(e.headers.get("X-WP-TotalPages"),10);return r=t>o?o:t,e.json()})).then((e=>{C((t=>[...t,...e])),R(!1),(r&&r>t||t>=1&&a&&N.length>0)&&L(t+1)})).catch((e=>A(e.message)))}),[j,e,o,a,h,N.length,g]);(0,i.useEffect)((()=>{P(m)}),[m]),(0,i.useEffect)((()=>{j&&g<=j.length?L():C([])}),[j,L,g]);const D=e=>{k(O.current.contains(e.target))},U=e=>{"Escape"===e.key&&k(!1)};(0,i.useEffect)((()=>(document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)))),(0,i.useEffect)((()=>(O&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D))));const M=e=>{let t=[];if(N.some((t=>t.id===e.id))){const r=N.findIndex((t=>t.id===e.id));t=[...N.slice(0,r),...N.slice(r+1,N.length)]}else a?t=[...N,e]:(t=[e],k(!1));P(t),c(t)};return(0,n.jsx)("form",{className:"autocomplete__component",onSubmit:e=>e.preventDefault(),children:(0,n.jsxs)("div",{className:u()("components-base-control","autocomplete-base-control",t),ref:O,children:[(0,n.jsxs)("div",{"aria-expanded":S,"aria-haspopup":"listbox","aria-owns":`listbox-${y}`,className:u()("components-base-control__field","autocomplete-base-control__field"),role:"combobox",children:[(0,n.jsx)("label",{className:u()("components-base-control__label","autocomplete-base-control__label"),htmlFor:`autocomplete-${y}`,children:(0,n.jsx)("div",{children:s})}),N.length>0?(0,n.jsx)("ul",{role:"listbox","aria-labelledby":`autocomplete-${y}`,id:`selected-items-${y}`,className:u()("autocomplete__selection--results","autocomplete__selection-list"),children:N.map((e=>(0,n.jsx)("li",{className:"autocomplete__selection-list--item",children:(0,n.jsx)(d.Button,{className:"autocomplete__selection-list--item--button",isSecondary:!0,isSmall:!0,onClick:()=>M(e),type:"button",children:e.title})},e.title)))}):null,(0,n.jsx)("input",{"aria-autocomplete":"list",autoComplete:"off",className:u()("components-text-control__input","autocomplete-text-control__input",{"autocomplete-text-control__input--working":S}),id:`autocomplete-${y}`,onChange:e=>I(e.target.value),onFocus:()=>k(!0),placeholder:p,type:"text",value:T})]}),(0,n.jsx)(w,{emptyLabel:r,error:b,labelledById:`autocomplete-${y}`,id:`listbox-${y}`,isOpen:S,loading:E&&j,onSelect:M,options:x,selectedItems:N,threshold:g,value:j})]})})};U.defaultProps={type:"post",className:"",emptyLabel:(0,p.__)("No items found","alley-scripts"),label:(0,p.__)("Search for items","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,p.__)("Search for items","alley-scripts"),subTypes:[],selected:[],threshold:3},U.propTypes={type:o().string,className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const M=U},1917:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(7e3),s=r(7287),o=r(3396);function i({children:e,index:t,list:r,setList:i}){return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{children:[(0,n.jsx)(s.Button,{disabled:0===t,icon:"arrow-up-alt2",label:(0,o.__)("Move up","alley-scripts"),onClick:()=>{const e=[...r];e.splice(t-1,0,e.splice(t,1)[0]),i(e)}}),(0,n.jsx)(s.Button,{disabled:t===r.length-1,icon:"arrow-down-alt2",label:(0,o.__)("Move down","alley-scripts"),onClick:()=>{const e=[...r];e.splice(t+1,0,e.splice(t,1)[0]),i(e)}}),(0,n.jsx)(s.Button,{icon:"trash",label:(0,o.__)("Remove","alley-scripts"),onClick:()=>{const e=[...r];e.splice(t,1),i(e)}})]}),(0,n.jsx)("div",{children:e})]})}},8504:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(7e3),s=r(7287),o=r(3396);function i({children:e,emptyItem:t,list:r,setList:i}){return(0,n.jsxs)(n.Fragment,{children:[e,(0,n.jsx)("div",{style:{margin:"1em 0"},children:(0,n.jsx)(s.Button,{icon:"plus",onClick:()=>i([...r,t]),variant:"primary",children:(0,o.__)("Add Item","alley-scripts")})})]})}},668:(e,t,r)=>{"use strict";r.d(t,{default:()=>c});var n=r(7e3),s=r(900),o=r.n(s),i=r(3396),a=r(7720);const l=({className:e,emptyLabel:t,label:r,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d})=>(0,n.jsx)(a.Selector,{type:"term",className:e,emptyLabel:t,label:r,maxPages:s,multiple:o,onSelect:i,placeholder:l,subTypes:c,selected:u,threshold:d});l.defaultProps={className:"",emptyLabel:(0,i.__)("No terms found","alley-scripts"),label:(0,i.__)("Search for terms","alley-scripts"),maxPages:5,multiple:!1,placeholder:(0,i.__)("Search for terms","alley-scripts"),subTypes:[],selected:[],threshold:3},l.propTypes={className:o().string,emptyLabel:o().string,label:o().string,maxPages:o().number,multiple:o().bool,onSelect:o().func.isRequired,placeholder:o().string,subTypes:o().arrayOf(o().string),selected:o().arrayOf([o().shape({id:o().number,title:o().string})]),threshold:o().number};const c=l},5316:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var n=r(7e3),s=r(900),o=r.n(s),i=r(3376),a=r(7720);const l=i.cp.div` + height: auto; + width: 100%; +`,c=({src:e})=>(0,n.jsx)(l,{children:(0,n.jsx)("video",{className:"edit-video-preview",controls:!0,src:e})});c.propTypes={src:o().string.isRequired};const u=({className:e,onReset:t,onUpdate:r,onUpdateURL:s,value:o,valueURL:i})=>(0,n.jsx)(a.MediaPicker,{allowedTypes:["video"],className:e,icon:"format-video",onReset:t,onUpdate:r,onUpdateURL:s,preview:c,value:o,valueURL:i});u.defaultProps={className:"",onUpdateURL:null,valueURL:""},u.propTypes={className:o().string,onReset:o().func.isRequired,onUpdate:o().func.isRequired,onUpdateURL:o().func,value:o().number.isRequired,valueURL:o().string};const d=u},2e3:(e,t,r)=>{"use strict";r.d(t,{useCurrentPostId:()=>n.default,useCurrentTheme:()=>s.default,useDebounce:()=>o.default,useHasInnerBlocks:()=>i.default,useInnerBlocks:()=>a.default,useInnerBlocksAttributes:()=>l.default,useInnerBlocksCount:()=>c.default,useInnerBlocksIndex:()=>u.default,useMedia:()=>d.default,useOption:()=>p.default,useParentBlock:()=>f.default,useParentBlockAttributes:()=>h.default,usePost:()=>m.default,usePostById:()=>g.default,usePostMeta:()=>y.default,usePostMetaValue:()=>b.default,usePosts:()=>v.default,usePreviewLink:()=>_.default,useTerm:()=>A.default,useTerms:()=>w.default});var n=r(9695),s=r(5904),o=r(7112),i=r(6980),a=r(864),l=r(8512),c=r(1344),u=r(6644),d=r(592),p=r(7188),f=r(224),h=r(8004),m=r(1744),g=r(9480),y=r(6504),b=r(3772),v=r(4704),_=r(7532),A=r(7712),w=r(1848)},9695:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(7752);const s=()=>(0,n.useSelect)((e=>{const t=e("core/editor");return t?t.getCurrentPostId():null}),[])},5904:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=()=>(0,s.useSelect)((e=>{const t=e(n.store);return t?t.getCurrentTheme()?.stylesheet:null}),[])},7112:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(1280);const s=(e,t)=>{const[r,s]=(0,n.useState)(e);return(0,n.useEffect)((()=>{const r=setTimeout((()=>{s(e)}),t);return()=>{clearTimeout(r)}}),[e,t]),r}},6980:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(2e3);const s=e=>(0,n.useInnerBlocksCount)(e)>0},6644:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(2e3);const s=e=>{const t=(0,n.useParentBlock)(e),r=(0,n.useInnerBlocks)(t);return r?r.findIndex((t=>t.clientId===e)):-1}},8512:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(2e3);const s=e=>(0,n.useInnerBlocks)(e).map((e=>e.attributes))},1344:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(2e3);const s=e=>(0,n.useInnerBlocks)(e).length},864:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(9528),s=r(7752);const o=e=>(0,s.useSelect)((t=>t(n.store).getBlocks(e)),[e])},592:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=e=>(0,s.useSelect)((t=>t(n.store).getMedia(e)),[e])},7188:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(7752);const s=function(e){const t=(0,n.useSelect)((t=>{const{getEditedEntityRecord:r,getEntityRecordEdits:n,isSavingEntityRecord:s}=t("core"),o=r("root","site"),i=n("root","site");return{value:o?.[e],isEdited:!!i?.[e],isSaving:s("root","site")}}),[]),{editEntityRecord:r,saveEntityRecord:s}=(0,n.useDispatch)("core");return{...t,onChange:function(t){r("root","site",void 0,{[e]:t})},onSave:async function(){await s("root","site",{[e]:t.value})}}}},8004:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(9528),s=r(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlockAttributes:r,getBlockRootClientId:s}=t(n.store),o=s(e);return o?r(o):null}),[e])},224:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(9528),s=r(7752);const o=e=>(0,s.useSelect)((t=>{const{getBlock:r,getBlockRootClientId:s}=t(n.store),o=s(e);return o?r(o):null}),[e])},9480:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var n=r(1280),s=r(4632),o=r.n(s),i=r(7204),a=r(1744);const l=(e,t=null,r={context:"view"})=>{const[s,l]=(0,n.useState)({}),[c,u]=(0,n.useState)(!0);(0,n.useEffect)((()=>{u(!0),e&&!s[e]?(async()=>{if(t){const r=await t(e);r?l((t=>({...t,[e]:r}))):console.error(`Custom function to get post with ID ${e} failed.`)}else{const t=(0,i.addQueryArgs)("/wp/v2/search",{include:e}),r=await o()({path:t});r.length>0&&l((t=>({...t,[e]:r[0]?.subtype})))}u(!1)})():e&&s[e]&&u(!1)}),[e]);const d=(0,a.default)(e,s[e]??"",r);return c||!d&&s[e]?null:d}},3772:(e,t,r)=>{"use strict";r.d(t,{default:()=>s});var n=r(2e3);const s=(e,t=null,r=null)=>{const[s,o]=(0,n.usePostMeta)(t,r);return[s[e],t=>o({...s,[e]:t})]}},6504:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=(e=null,t=null)=>{const r=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[o,i]=(0,n.useEntityProp)("postType",r,"meta",t),a="function"==typeof i?i:()=>console.error(`Error attempting to set post meta for post type ${r}. Does it have support for custom-fields?`);return["object"==typeof o?o:{},e=>a({...e})]}},1744:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=(e,t="post",r={context:"view"})=>(0,s.useSelect)((s=>s(n.store).getEntityRecord("postType",t,e,r)),[e,t])},4704:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=(e,t="post")=>(0,s.useSelect)((r=>{const{getEntityRecords:s}=r(n.store);return s("postType",t,{include:e})}),[e,t])},7532:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=()=>(0,s.useSelect)((e=>e(n.store).getEditedPostPreviewLink()),[])},7712:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=(e,t="category",r={context:"view"})=>(0,s.useSelect)((s=>s(n.store).getEntityRecord("taxonomy",t,e,r)),[e,t])},1848:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(3048),s=r(7752);const o=(e=null,t=null,r="categories")=>{const o=(0,s.useSelect)((t=>e||t("core/editor").getCurrentPostType()),[]),[i,a]=(0,n.useEntityProp)("postType",o,r,t);return[i,e=>a(e)]}},5328:(e,t,r)=>{"use strict";r.d(t,{getMediaUrl:()=>i.c,parseCSVFile:()=>o});var n=r(2232),s=r.n(n);const o=e=>new Promise(((t,r)=>{s().parse(e,{complete:e=>t(e.data),dynamicTyping:!0,error:e=>r(e),header:!0,skipEmptyLines:!0})}));var i=r(6199)},6199:(e,t,r)=>{"use strict";r.d(t,{c:()=>n});const n=(e,t="full")=>{const{media_details:{sizes:{[t]:{source_url:r=""}={},full:{source_url:n=""}={}}={}}={},sizes:{[t]:{url:s=""}={},full:{url:o=""}={}}={},source_url:i="",url:a=""}=e;return s||r||o||n||a||i||""}},1280:e=>{"use strict";e.exports=window.React},4632:e=>{"use strict";e.exports=window.wp.apiFetch},9528:e=>{"use strict";e.exports=window.wp.blockEditor},7287:e=>{"use strict";e.exports=window.wp.components},3048:e=>{"use strict";e.exports=window.wp.coreData},7752:e=>{"use strict";e.exports=window.wp.data},3396:e=>{"use strict";e.exports=window.wp.i18n},7204:e=>{"use strict";e.exports=window.wp.url}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={id:n,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nc=void 0;var n={};return(()=>{"use strict";r.r(n),r.d(n,{AudioPicker:()=>e.AudioPicker,CSVUploader:()=>e.CSVUploader,Checkboxes:()=>e.Checkboxes,ImagePicker:()=>e.ImagePicker,MediaPicker:()=>e.MediaPicker,PostPicker:()=>e.PostPicker,PostSelector:()=>e.PostSelector,SafeHtml:()=>e.SafeHtml,Selector:()=>e.Selector,Sortable:()=>e.Sortable,SortableItem:()=>e.SortableItem,TermSelector:()=>e.TermSelector,VideoPicker:()=>e.VideoPicker,getMediaUrl:()=>s.getMediaUrl,parseCSVFile:()=>s.parseCSVFile,useCurrentPostId:()=>t.useCurrentPostId,useCurrentTheme:()=>t.useCurrentTheme,useDebounce:()=>t.useDebounce,useHasInnerBlocks:()=>t.useHasInnerBlocks,useInnerBlocks:()=>t.useInnerBlocks,useInnerBlocksAttributes:()=>t.useInnerBlocksAttributes,useInnerBlocksCount:()=>t.useInnerBlocksCount,useInnerBlocksIndex:()=>t.useInnerBlocksIndex,useMedia:()=>t.useMedia,useOption:()=>t.useOption,useParentBlock:()=>t.useParentBlock,useParentBlockAttributes:()=>t.useParentBlockAttributes,usePost:()=>t.usePost,usePostById:()=>t.usePostById,usePostMeta:()=>t.usePostMeta,usePostMetaValue:()=>t.usePostMetaValue,usePosts:()=>t.usePosts,usePreviewLink:()=>t.usePreviewLink,useTerm:()=>t.useTerm,useTerms:()=>t.useTerms});var e=r(7720),t=r(2e3),s=r(5328)})(),n})(),e.exports=t()},20:function(e,t,r){"use strict";var n=r(609),s=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,a=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,r){var n,o={},c=null,u=null;for(n in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,n)&&!l.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===o[n]&&(o[n]=t[n]);return{$$typeof:s,type:e,key:c,ref:u,props:o,_owner:a.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},848:function(e,t,r){"use strict";e.exports=r(20)},609:function(e){"use strict";e.exports=window.React}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";var e=r(609),t=r.n(e),n=window.wp.plugins,s=window.wp.editPost,o=window.wp.components,i=window.wp.i18n,a=window.wp.data,l=r(848);!function(e,{insertAt:t}={}){if(!e||typeof document>"u")return;let r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===t&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}(".rmsc{--rmsc-main: #4285f4;--rmsc-hover: #f1f3f5;--rmsc-selected: #e2e6ea;--rmsc-border: #ccc;--rmsc-gray: #aaa;--rmsc-bg: #fff;--rmsc-p: 10px;--rmsc-radius: 4px;--rmsc-h: 38px}.rmsc *{box-sizing:border-box;transition:all .2s ease}.rmsc .gray{color:var(--rmsc-gray)}.rmsc .dropdown-content{position:absolute;z-index:1;top:100%;width:100%;padding-top:8px}.rmsc .dropdown-content .panel-content{overflow:hidden;border-radius:var(--rmsc-radius);background:var(--rmsc-bg);box-shadow:0 0 0 1px #0000001a,0 4px 11px #0000001a}.rmsc .dropdown-container{position:relative;outline:0;background-color:var(--rmsc-bg);border:1px solid var(--rmsc-border);border-radius:var(--rmsc-radius)}.rmsc .dropdown-container[aria-disabled=true]:focus-within{box-shadow:var(--rmsc-gray) 0 0 0 1px;border-color:var(--rmsc-gray)}.rmsc .dropdown-container:focus-within{box-shadow:var(--rmsc-main) 0 0 0 1px;border-color:var(--rmsc-main)}.rmsc .dropdown-heading{position:relative;padding:0 var(--rmsc-p);display:flex;align-items:center;width:100%;height:var(--rmsc-h);cursor:default;outline:0}.rmsc .dropdown-heading .dropdown-heading-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.rmsc .clear-selected-button{cursor:pointer;background:none;border:0;padding:0;display:flex}.rmsc .options{max-height:260px;overflow-y:auto;margin:0;padding-left:0}.rmsc .options li{list-style:none;margin:0}.rmsc .select-item{box-sizing:border-box;cursor:pointer;display:block;padding:var(--rmsc-p);outline-offset:-1px;outline-color:var(--rmsc-primary)}.rmsc .select-item:hover{background:var(--rmsc-hover)}.rmsc .select-item.selected{background:var(--rmsc-selected)}.rmsc .no-options{padding:var(--rmsc-p);text-align:center;color:var(--rmsc-gray)}.rmsc .search{width:100%;position:relative;border-bottom:1px solid var(--rmsc-border)}.rmsc .search input{background:none;height:var(--rmsc-h);padding:0 var(--rmsc-p);width:100%;outline:0;border:0;font-size:1em}.rmsc .search input:focus{background:var(--rmsc-hover)}.rmsc .search-clear-button{cursor:pointer;position:absolute;top:0;right:0;bottom:0;background:none;border:0;padding:0 calc(var(--rmsc-p) / 2)}.rmsc .search-clear-button [hidden]{display:none}.rmsc .item-renderer{display:flex;align-items:baseline}.rmsc .item-renderer input{margin:0 5px 0 0}.rmsc .item-renderer.disabled{opacity:.5}.rmsc .spinner{animation:rotate 2s linear infinite}.rmsc .spinner .path{stroke:var(--rmsc-border);stroke-width:4px;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}\n");var c={allItemsAreSelected:"All items are selected.",clearSearch:"Clear Search",clearSelected:"Clear Selected",noOptions:"No options",search:"Search",selectAll:"Select All",selectAllFiltered:"Select All (Filtered)",selectSomeItems:"Select...",create:"Create"},u={value:[],hasSelectAll:!0,className:"multi-select",debounceDuration:200,options:[]},d=t().createContext({}),p=({props:t,children:r})=>{let[n,s]=(0,e.useState)(t.options);return(0,e.useEffect)((()=>{s(t.options)}),[t.options]),(0,l.jsx)(d.Provider,{value:{t:e=>{var r;return(null==(r=t.overrideStrings)?void 0:r[e])||c[e]},...u,...t,options:n,setOptions:s},children:r})},f=()=>t().useContext(d),h={when:!0,eventTypes:["keydown"]};function m(t,r,n){let s=(0,e.useMemo)((()=>Array.isArray(t)?t:[t]),[t]),o=Object.assign({},h,n),{when:i,eventTypes:a}=o,l=(0,e.useRef)(r),{target:c}=o;(0,e.useEffect)((()=>{l.current=r}));let u=(0,e.useCallback)((e=>{s.some((t=>e.key===t||e.code===t))&&l.current(e)}),[s]);(0,e.useEffect)((()=>{if(i&&typeof window<"u"){let e=c?c.current:window;return a.forEach((t=>{e&&e.addEventListener(t,u)})),()=>{a.forEach((t=>{e&&e.removeEventListener(t,u)}))}}}),[i,a,s,c,r])}var g={ARROW_DOWN:"ArrowDown",ARROW_UP:"ArrowUp",ENTER:"Enter",ESCAPE:"Escape",SPACE:"Space"},y=()=>(0,l.jsxs)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"dropdown-search-clear-icon gray",children:[(0,l.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,l.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),b=({checked:e,option:t,onClick:r,disabled:n})=>(0,l.jsxs)("div",{className:"item-renderer "+(n?"disabled":""),children:[(0,l.jsx)("input",{type:"checkbox",onChange:r,checked:e,tabIndex:-1,disabled:n}),(0,l.jsx)("span",{children:t.label})]}),v=({itemRenderer:t=b,option:r,checked:n,tabIndex:s,disabled:o,onSelectionChanged:i,onClick:a})=>{let c=(0,e.useRef)(),u=()=>{o||i(!n)};return m([g.ENTER,g.SPACE],(e=>{u(),e.preventDefault()}),{target:c}),(0,l.jsx)("label",{className:"select-item "+(n?"selected":""),role:"option","aria-selected":n,tabIndex:s,ref:c,children:(0,l.jsx)(t,{option:r,checked:n,onClick:e=>{u(),a(e)},disabled:o})})},_=({options:e,onClick:t,skipIndex:r})=>{let{disabled:n,value:s,onChange:o,ItemRenderer:i}=f();return(0,l.jsx)(l.Fragment,{children:e.map(((e,a)=>{let c=a+r;return(0,l.jsx)("li",{children:(0,l.jsx)(v,{tabIndex:c,option:e,onSelectionChanged:t=>((e,t)=>{n||o(t?[...s,e]:s.filter((t=>t.value!==e.value)))})(e,t),checked:!!s.find((t=>t.value===e.value)),onClick:e=>t(e,c),itemRenderer:i,disabled:e.disabled||n})},(null==e?void 0:e.key)||a)}))})},A=()=>{let{t:t,onChange:r,options:n,setOptions:s,value:o,filterOptions:i,ItemRenderer:a,disabled:c,disableSearch:u,hasSelectAll:d,ClearIcon:p,debounceDuration:h,isCreatable:b,onCreateOption:A}=f(),w=(0,e.useRef)(),x=(0,e.useRef)(),[C,S]=(0,e.useState)(""),[k,E]=(0,e.useState)(n),[R,T]=(0,e.useState)(""),[I,N]=(0,e.useState)(0),P=(0,e.useCallback)(((e,t)=>{let r;return function(...n){clearTimeout(r),r=setTimeout((()=>{e.apply(null,n)}),t)}})((e=>T(e)),h),[]),O=(0,e.useMemo)((()=>{let e=0;return u||(e+=1),d&&(e+=1),e}),[u,d]),j={label:t(C?"selectAllFiltered":"selectAll"),value:""},L=()=>{var e;T(""),S(""),null==(e=null==x?void 0:x.current)||e.focus()},D=e=>N(e);m([g.ARROW_DOWN,g.ARROW_UP],(e=>{switch(e.code){case g.ARROW_UP:M(-1);break;case g.ARROW_DOWN:M(1);break;default:return}e.stopPropagation(),e.preventDefault()}),{target:w});let U=async()=>{let e={label:C,value:C,__isNew__:!0};A&&(e=await A(C)),s([e,...n]),L(),r([...o,e])},M=e=>{let t=I+e;t=Math.max(0,t),t=Math.min(t,n.length+Math.max(O-1,0)),N(t)};(0,e.useEffect)((()=>{var e,t;null==(t=null==(e=null==w?void 0:w.current)?void 0:e.querySelector(`[tabIndex='${I}']`))||t.focus()}),[I]);let[B,F]=(0,e.useMemo)((()=>{let e=k.filter((e=>!e.disabled));return[e.every((e=>-1!==o.findIndex((t=>t.value===e.value)))),0!==e.length]}),[k,o]);(0,e.useEffect)((()=>{(async()=>i?await i(n,R):function(e,t){return t?e.filter((({label:e,value:r})=>null!=e&&null!=r&&e.toLowerCase().includes(t.toLowerCase()))):e}(n,R))().then(E)}),[R,n]);let z=(0,e.useRef)();m([g.ENTER],U,{target:z});let q=b&&C&&!k.some((e=>(null==e?void 0:e.value)===C));return(0,l.jsxs)("div",{className:"select-panel",role:"listbox",ref:w,children:[!u&&(0,l.jsxs)("div",{className:"search",children:[(0,l.jsx)("input",{placeholder:t("search"),type:"text","aria-describedby":t("search"),onChange:e=>{P(e.target.value),S(e.target.value),N(0)},onFocus:()=>{N(0)},value:C,ref:x,tabIndex:0}),(0,l.jsx)("button",{type:"button",className:"search-clear-button",hidden:!C,onClick:L,"aria-label":t("clearSearch"),children:p||(0,l.jsx)(y,{})})]}),(0,l.jsxs)("ul",{className:"options",children:[d&&F&&(0,l.jsx)(v,{tabIndex:1===O?0:1,checked:B,option:j,onSelectionChanged:e=>{let t=(e=>{let t=k.filter((e=>!e.disabled)).map((e=>e.value));if(e){let e=[...o.map((e=>e.value)),...t];return(i?k:n).filter((t=>e.includes(t.value)))}return o.filter((e=>!t.includes(e.value)))})(e);r(t)},onClick:()=>D(1),itemRenderer:a,disabled:c}),k.length?(0,l.jsx)(_,{skipIndex:O,options:k,onClick:(e,t)=>D(t)}):q?(0,l.jsx)("li",{onClick:U,className:"select-item creatable",tabIndex:1,ref:z,children:`${t("create")} "${C}"`}):(0,l.jsx)("li",{className:"no-options",children:t("noOptions")})]})]})},w=({expanded:e})=>(0,l.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"dropdown-heading-dropdown-arrow gray",children:(0,l.jsx)("path",{d:e?"M18 15 12 9 6 15":"M6 9L12 15 18 9"})}),x=()=>{let{t:e,value:t,options:r,valueRenderer:n}=f(),s=0===t.length,o=t.length===r.length,i=n&&n(t,r);return s?(0,l.jsx)("span",{className:"gray",children:i||e("selectSomeItems")}):(0,l.jsx)("span",{children:i||(o?e("allItemsAreSelected"):t.map((e=>e.label)).join(", "))})},C=({size:e=24})=>(0,l.jsx)("span",{style:{width:e,marginRight:"0.2rem"},children:(0,l.jsx)("svg",{width:e,height:e,className:"spinner",viewBox:"0 0 50 50",style:{display:"inline",verticalAlign:"middle"},children:(0,l.jsx)("circle",{cx:"25",cy:"25",r:"20",fill:"none",className:"path"})})}),S=()=>{let{t:t,onMenuToggle:r,ArrowRenderer:n,shouldToggleOnHover:s,isLoading:o,disabled:i,onChange:a,labelledBy:c,value:u,isOpen:d,defaultIsOpen:p,ClearSelectedIcon:h,closeOnChangedValue:b}=f();(0,e.useEffect)((()=>{b&&k(!1)}),[u]);let[v,_]=(0,e.useState)(!0),[S,k]=(0,e.useState)(p),[E,R]=(0,e.useState)(!1),T=n||w,I=(0,e.useRef)();(function(t,r){let n=(0,e.useRef)(!1);(0,e.useEffect)((()=>{n.current?t():n.current=!0}),r)})((()=>{r&&r(S)}),[S]),(0,e.useEffect)((()=>{void 0===p&&"boolean"==typeof d&&(_(!1),k(d))}),[d]),m([g.ENTER,g.ARROW_DOWN,g.SPACE,g.ESCAPE],(e=>{var t;["text","button"].includes(e.target.type)&&[g.SPACE,g.ENTER].includes(e.code)||(v&&(e.code===g.ESCAPE?(k(!1),null==(t=null==I?void 0:I.current)||t.focus()):k(!0)),e.preventDefault())}),{target:I});let N=e=>{v&&s&&k(e)};return(0,l.jsxs)("div",{tabIndex:0,className:"dropdown-container","aria-labelledby":c,"aria-expanded":S,"aria-readonly":!0,"aria-disabled":i,ref:I,onFocus:()=>!E&&R(!0),onBlur:e=>{!e.currentTarget.contains(e.relatedTarget)&&v&&(R(!1),k(!1))},onMouseEnter:()=>N(!0),onMouseLeave:()=>N(!1),children:[(0,l.jsxs)("div",{className:"dropdown-heading",onClick:()=>{v&&k(!o&&!i&&!S)},children:[(0,l.jsx)("div",{className:"dropdown-heading-value",children:(0,l.jsx)(x,{})}),o&&(0,l.jsx)(C,{}),u.length>0&&null!==h&&(0,l.jsx)("button",{type:"button",className:"clear-selected-button",onClick:e=>{e.stopPropagation(),a([]),v&&k(!1)},disabled:i,"aria-label":t("clearSelected"),children:h||(0,l.jsx)(y,{})}),(0,l.jsx)(T,{expanded:S})]}),S&&(0,l.jsx)("div",{className:"dropdown-content",children:(0,l.jsx)("div",{className:"panel-content",children:(0,l.jsx)(A,{})})})]})},k=e=>(0,l.jsx)(p,{props:e,children:(0,l.jsx)("div",{className:`rmsc ${e.className||"multi-select"}`,children:(0,l.jsx)(S,{})})}),E=window.wp.blocks;function R(){return(0,e.createElement)(o.Spinner,null)}var T=r(265),I=function(){const[e,t]=(0,T.usePostMeta)(),{nb_breaking_email_type:r="",nb_breaking_template:n=0,nb_breaking_from_name:s="",nb_breaking_subject:o="",nb_breaking_preview:i="",nb_breaking_list:a=[],nb_breaking_header_img:l=0,nb_breaking_should_send:c=!1,nb_breaking_content:u="",nb_newsletter_sent_breaking_post_id:d=[]}=e;return{meta:{type:r,template:n,fromName:s,subject:o,preview:i,list:a,image:l,send:c,content:u,sentBreakingPostId:d},setMeta:t}},N=window.wp.element,P=window.wp.apiFetch,O=r.n(P),j=function(t){let{meta:r,postTitle:n,postExcerpt:s}=t;return(0,e.createElement)(e.Fragment,null,r.type?null:(0,e.createElement)("p",{style:{color:"red"}},(0,i.__)("Header Type is Required","wp-newsletter-builder")),r.template?null:(0,e.createElement)("p",{style:{color:"red"}},(0,i.__)("Template is Required","wp-newsletter-builder")),r.fromName?null:(0,e.createElement)("p",{style:{color:"red"}},(0,i.__)("From Name is Required","wp-newsletter-builder")),r.subject||n?null:(0,e.createElement)("p",{style:{color:"red"}},(0,i.__)("Subject is Required","wp-newsletter-builder")),r.preview||s?null:(0,e.createElement)("p",{style:{color:"red"}},(0,i.__)("Preview Text is Required","wp-newsletter-builder")),0===r.list.length?(0,e.createElement)("p",{style:{color:"red"}},(0,i.__)("Email List is Required","wp-newsletter-builder")):null)};const{newsletterBuilder:{fromNames:L=[],templates:D={}}={}}=window,U=L.map((e=>({value:e,label:e})));var M=function(t){let{contentHandler:r,typeHandler:n,imageHandler:s,templateHandler:a,fromNameHandler:l,typeValue:c,templateValue:u,fromNameValue:d}=t;const[p,f]=(0,N.useState)({});(0,N.useEffect)((()=>{Object.keys(p).length>0||O()({path:"/wp-newsletter-builder/v1/email-types"}).then((e=>{f(e)}))}),[p]),(0,N.useEffect)((()=>{!d&&L.length>0&&l(L[0])}),[l,d]);const h=(e,t)=>e.labelt.label?1:0,m=e=>{var t;const r=null!==(t=e[c]?.templates)&&void 0!==t?t:[];if(!r.length)return[];const n=r.map((e=>({value:e,label:D[parseInt(e,10)]})));return n.sort(h),n.unshift({label:(0,i.__)("Select a template","wp-newsletter-builder"),value:""}),n},g=async e=>{if(a(e),!e)return;const t=p[c],{image:n,from_name:o}=t;s(parseInt(n,10)),l(o),O()({path:`/wp/v2/nb_template/${e}?context=edit`}).then((e=>{const{content:t}=e;r(t.raw)}))};return(0,N.useEffect)((()=>{if(!c)return;const e=p[c]?.templates;e&&1===e.length&&g(e[0])}),[c]),(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.SelectControl,{label:(0,i.__)("Select Header Type","wp-newsletter-builder"),value:c,options:(e=>{const t=Object.keys(e).map((t=>({label:e[t].label,value:t})));return t.sort(h),t.unshift({label:(0,i.__)("Select a type","wp-newsletter-builder"),value:""}),t})(p),onChange:n}),m(p).length?(0,e.createElement)(o.SelectControl,{label:(0,i.__)("Select Template","wp-newsletter-builder"),value:u,options:m(p),onChange:g}):null,(0,e.createElement)(o.SelectControl,{label:(0,i.__)("From Name","wp-newsletter-builder"),value:d||p[c]?.from_name,options:U,onChange:l}))},B=function(t){let{postId:r}=t;const n=(0,T.usePost)(r,"nb_newsletter");if(!n)return null;const{meta:{nb_newsletter_subject:s=""}={},link:i=""}=n;return(0,e.createElement)(o.PanelRow,null,i&&s?(0,e.createElement)(o.Button,{variant:"link",href:i,target:"_blank",style:{marginTop:"1rem"}},s):null)},F=function(){const{meta:t,setMeta:r}=I(),{emailListOptions:n,selectedEmailList:l}=function(){const{meta:e}=I(),[t,r]=(0,N.useState)([]),n=(0,N.useMemo)((()=>0===t.length?[]:t.map((e=>({label:e.Name,value:e.ListID})))),[t]),s=(0,N.useMemo)((()=>n.filter((t=>e.list.includes(t.value)))),[e.list,n]);return(0,N.useEffect)((()=>{t.length>0||O()({path:"/wp-newsletter-builder/v1/lists"}).then((e=>{r(e)}))}),[t]),{emailListOptions:n,selectedEmailList:s}}(),c=""!==t.subject,u=""!==t.preview,d=Array.isArray(t.list)?t.list:[t.list],{postId:p,postStatus:f,postTitle:h,postExcerpt:m}=(0,a.useSelect)((e=>{const{getEditedPostAttribute:t}=e("core/editor");let r=t("excerpt");if(""===r){const e=t("content"),n=e?e.match(/

(.*?)<\/p>/):[];r=n&&n[1]?n[1]:""}return{postId:t("id"),postStatus:t("status"),postTitle:t("title"),postExcerpt:r}}),[]),{newsletterBuilder:{breakingLists:g={}}}=window,y=""===t.type||""===t.template||""===t.fromName||""===t.subject&&""===h||""===t.preview&&""===m||0===t.list.length;return(0,e.createElement)(s.PluginSidebar,{icon:"email-alt2",name:"nb-newsletter",title:(0,i.__)("Newsletter","wp-newsletter-builder")},(0,e.createElement)(o.PanelBody,{initialOpen:!0,title:(0,i.__)("Send Newsletter","wp-newsletter-builder")},(0,e.createElement)(M,{contentHandler:e=>{const t=(0,E.parse)(e),n=t.findIndex((e=>"wp-newsletter-builder/post"===e.name));t[n]=(0,E.createBlock)("wp-newsletter-builder/post",{...t[n].attributes,postId:p},t[n].innerBlocks),r({nb_breaking_content:(0,E.serialize)(t)})},typeHandler:e=>{r({nb_breaking_email_type:e})},imageHandler:e=>{r({nb_breaking_header_img:e})},typeValue:t.type,templateHandler:e=>{r({nb_breaking_template:e})},fromNameHandler:e=>{r({nb_breaking_from_name:e})},templateValue:t.template,fromNameValue:t.fromName}),(0,e.createElement)(o.TextareaControl,{label:c?(0,i.__)("Subject","wp-newsletter-builder"):(0,i.__)("Subject (linked)","wp-newsletter-builder"),placeholder:(0,i.__)("Enter subject","wp-newsletter-builder"),value:""!==t.subject?t.subject:h,onChange:e=>{r({nb_breaking_subject:e})}}),(0,e.createElement)(o.TextareaControl,{label:u?(0,i.__)("Preview Text","wp-newsletter-builder"):(0,i.__)("Preview Text (linked)","wp-newsletter-builder"),placeholder:(0,i.__)("Enter preview text","wp-newsletter-builder"),value:""!==t.preview?t.preview:m,onChange:e=>{r({nb_breaking_preview:e})}}),Object.keys(g).map((t=>{const n=g[t];return(0,e.createElement)(o.CheckboxControl,{label:n,checked:d.includes(t),onChange:e=>{const n=e?[...d,t]:d.filter((e=>e!==t));r({nb_breaking_list:n})}})})),n.length>0?(0,e.createElement)("label",{htmlFor:"wp-newsletter-builder-list"},(0,i.__)("Email List","wp-newsletter-builder"),(0,e.createElement)(k,{labelledBy:(0,i.__)("List","wp-newsletter-builder"),value:l,options:n,onChange:e=>{const t=e.map((e=>e.value));r({nb_breaking_list:t})},hasSelectAll:!1,overrideStrings:{selectSomeItems:(0,i.__)("Select Email List","wp-newsletter-builder")}})):(0,e.createElement)(R,null),(0,e.createElement)("div",{style:{marginTop:"1rem"}},(0,e.createElement)(o.CheckboxControl,{label:"draft"===f||"auto-draft"===f?(0,i.__)("Send Newsletter on Publish","wp-newsletter-builder"):(0,i.__)("Send Newsletter on Update","wp-newsletter-builder"),checked:t.send&&!y,onChange:e=>{r({nb_breaking_should_send:e})},disabled:y}),(0,e.createElement)(j,{meta:t,postTitle:h,postExcerpt:m}))),t.sentBreakingPostId?(0,e.createElement)(o.PanelBody,{initialOpen:!1,title:(0,i.__)("Sent Newsletters","wp-newsletter-builder")},t.sentBreakingPostId.map((t=>(0,e.createElement)(B,{postId:t,key:t})))):null)};(0,n.registerPlugin)("wp-newsletter-builder-plugin-sidebar",{icon:"shield",render:()=>(0,e.createElement)(F,null)})}()}(); \ No newline at end of file diff --git a/build/wp-newsletter-builder-heading/index.asset.php b/build/wp-newsletter-builder-heading/index.asset.php new file mode 100644 index 00000000..222e7ec9 --- /dev/null +++ b/build/wp-newsletter-builder-heading/index.asset.php @@ -0,0 +1 @@ + array('wp-hooks'), 'version' => 'b7aac00f1f0e43c49046'); diff --git a/build/wp-newsletter-builder-heading/index.js b/build/wp-newsletter-builder-heading/index.js new file mode 100644 index 00000000..ae8080ec --- /dev/null +++ b/build/wp-newsletter-builder-heading/index.js @@ -0,0 +1 @@ +!function(){"use strict";(0,window.wp.hooks.addFilter)("blocks.registerBlockType","wp-newsletter-builder/heading",(function(e,t){return e?.supports&&"core/heading"===t?{...e,supports:Object.assign(e.supports,{align:[],anchor:!1,color:{background:!1,text:!1},customClassName:!1,inserter:!1,spacing:!1,typography:{__experimentalFontSize:!1,__experimentalLineHeight:!1,__experimentalLetterSpacing:!0,__experimentalFontFamily:!1,__experimentalFontWeight:!1,__experimentalFontStyle:!1,__experimentalTextTransform:!0}})}:e}))}(); \ No newline at end of file diff --git a/build/wp-newsletter-builder-list/index.asset.php b/build/wp-newsletter-builder-list/index.asset.php new file mode 100644 index 00000000..37969b95 --- /dev/null +++ b/build/wp-newsletter-builder-list/index.asset.php @@ -0,0 +1 @@ + array('wp-hooks'), 'version' => '9984982fde4096a410fa'); diff --git a/build/wp-newsletter-builder-list/index.js b/build/wp-newsletter-builder-list/index.js new file mode 100644 index 00000000..4336a8ae --- /dev/null +++ b/build/wp-newsletter-builder-list/index.js @@ -0,0 +1 @@ +!function(){"use strict";(0,window.wp.hooks.addFilter)("blocks.registerBlockType","wp-newsletter-builder/list",(function(e,t){return!e?.supports||"core/list"!==t&&"core/list-item"!==t?e:{...e,supports:Object.assign(e.supports,{align:[],anchor:!1,color:{background:!1,text:!1},customClassName:!1,inserter:!1,spacing:!1,typography:{__experimentalFontSize:!1,__experimentalLineHeight:!1,__experimentalLetterSpacing:!0,__experimentalFontFamily:!1,__experimentalFontWeight:!1,__experimentalFontStyle:!1,__experimentalTextTransform:!0}})}}))}(); \ No newline at end of file diff --git a/build/wp-newsletter-builder-paragraph/index.asset.php b/build/wp-newsletter-builder-paragraph/index.asset.php new file mode 100644 index 00000000..90611c15 --- /dev/null +++ b/build/wp-newsletter-builder-paragraph/index.asset.php @@ -0,0 +1 @@ + array('wp-hooks'), 'version' => '8529683b1268c71a2138'); diff --git a/build/wp-newsletter-builder-paragraph/index.js b/build/wp-newsletter-builder-paragraph/index.js new file mode 100644 index 00000000..b94d0f5c --- /dev/null +++ b/build/wp-newsletter-builder-paragraph/index.js @@ -0,0 +1 @@ +!function(){"use strict";(0,window.wp.hooks.addFilter)("blocks.registerBlockType","wp-newsletter-builder/paragraph",(function(e,t){return e?.supports&&"core/paragraph"===t?{...e,supports:Object.assign(e.supports,{align:[],anchor:!1,color:{background:!1,text:!1},customClassName:!1,inserter:!1,spacing:!1,typography:{__experimentalFontSize:!1,__experimentalLineHeight:!1,__experimentalLetterSpacing:!0,__experimentalFontFamily:!1,__experimentalFontWeight:!1,__experimentalFontStyle:!1,__experimentalTextTransform:!0}})}:e}))}(); \ No newline at end of file diff --git a/build/wp-newsletter-builder-separator/index.asset.php b/build/wp-newsletter-builder-separator/index.asset.php new file mode 100644 index 00000000..185f825f --- /dev/null +++ b/build/wp-newsletter-builder-separator/index.asset.php @@ -0,0 +1 @@ + array('wp-hooks'), 'version' => '067db236664da0d1c597'); diff --git a/build/wp-newsletter-builder-separator/index.js b/build/wp-newsletter-builder-separator/index.js new file mode 100644 index 00000000..1bba8545 --- /dev/null +++ b/build/wp-newsletter-builder-separator/index.js @@ -0,0 +1 @@ +!function(){"use strict";(0,window.wp.hooks.addFilter)("blocks.registerBlockType","wp-newsletter-builder/separator",(e=>({...e,attributes:{...e.attributes,hasSeparator:{type:"boolean",default:!1},separatorIsWide:{type:"boolean",default:!1}}})))}(); \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml deleted file mode 100644 index 03dba968..00000000 --- a/phpunit.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - ./tests/ - - - diff --git a/tests/bootstrap.php b/tests/bootstrap.php deleted file mode 100644 index 75e8e4a2..00000000 --- a/tests/bootstrap.php +++ /dev/null @@ -1,16 +0,0 @@ -maybe_rsync_plugin() - ->with_sqlite() - // Load the main file of the plugin. - ->loaded( fn () => require_once __DIR__ . '/../plugin.php' ) - ->install(); diff --git a/tests/class-test-case.php b/tests/class-test-case.php deleted file mode 100644 index 0d74e781..00000000 --- a/tests/class-test-case.php +++ /dev/null @@ -1,17 +0,0 @@ -assertTrue( true ); - } -} diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/CHANGELOG.md b/vendor/alleyinteractive/composer-wordpress-autoloader/CHANGELOG.md new file mode 100644 index 00000000..1bd5d96c --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/CHANGELOG.md @@ -0,0 +1,62 @@ +# Changelog + +All notable changes to `alleyinteractive/composer-wordpress-autoloader` will be +documented in this file. + +## Unreleased + +## v1.1.0 + +### Changed + +- Dropped PHP 7.4 support, adding PHP 8.2 and 8.3 support explicitly with testing. +- Added testing against Windows. + +### Fixed + +- Fixed issue with `wordpress-autoload.php` file not properly loading on Windows. + +## v1.0.0 + +No changes, tagging a stable release. + +## v0.8.0 + +- Automatically translate the `vendor-dir` and set the autoloaded files relative to the root directory of the project. + +## v0.7.0 + +- Add APCu autoloader. +- Bump `alleyinteractive/wordpress-autoloader` to `v1.1.0`. + +## v0.6.0 + +- Simplify injection of autoloader. +- Automatically load the autoloader inside of `vendor/autoload.php` without the + need to load `vendor/wordpress-autoload.php` manually. + +## v0.4.1 + +### Updated + +* Fix Composer Injection to `vendor/autoload.php` in https://github.com/alleyinteractive/composer-wordpress-autoloader/pull/10 + +## v0.4.0 + +### Added + +- Bump alleyinteractive/wordpress-autoloader to 0.2 by @srtfisher in https://github.com/alleyinteractive/composer-wordpress-autoloader/pull/7 +- Supports PHP 8.1 + +## 0.3.0 + +- Remove specific Composer version dependency. + +## 0.2.0 + +- Updates autoloader to use non-hard-coded paths. +- Adds support for dependencies to autoload files as well, fixes [#3](https://github.com/alleyinteractive/composer-wordpress-autoloader/issues/3). + +## 0.1.0 + +- Initial release. diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/README.md b/vendor/alleyinteractive/composer-wordpress-autoloader/README.md new file mode 100644 index 00000000..ee4d45ea --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/README.md @@ -0,0 +1,94 @@ +# Composer WordPress Autoloader + +[![Latest Version on Packagist](https://img.shields.io/packagist/v/alleyinteractive/composer-wordpress-autoloader.svg?style=flat-square)](https://packagist.org/packages/alleyinteractive/composer-wordpress-autoloader) +[![Tests](https://github.com/alleyinteractive/composer-wordpress-autoloader/actions/workflows/tests.yml/badge.svg)](https://github.com/alleyinteractive/composer-wordpress-autoloader/actions/workflows/tests.yml) + +Autoload WordPress files configured via Composer that support the [Wordpress +Coding +Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/) +using +[alleyinteractive/wordpress-autoloader](https://github.com/alleyinteractive/wordpress-autoloader). +Will load the autoloaded classes defined in your package and all autoloaded +classes in your dependencies. + +## Installation + +You can install the package via composer: + +```bash +composer require alleyinteractive/composer-wordpress-autoloader +``` + +## Usage + +```json +{ + "autoload": { + "wordpress": { + "My_Plugin_Namespace\\": "src/", + } + }, + "autoload-dev": { + "wordpress": { + "My_Plugin_Namespace\\Tests\\": "tests/", + } + } +} +``` + +Once added, you can load `vendor/autoload.php` as normal and the autoloader will +handle the rest. If that doesn't work, see [Automatically Injecting WordPress +Autoloader](#automatically-injecting-wordpress-autoloader). + +### Use Inside Packages Published to Packagist + +Packages published to Packagist are required to be valid and have a +`composer.json` that passed a `composer validate`. Composer does not consider +`wordpress` to be a valid value inside of the `autoload` or `autoload-dev` +property. To allow packages to register autoloading in a valid format, you can +use the following format: + +```json +{ + "extra": { + "wordpress-autoloader": { + "autoload": { + "My_Plugin_Namespace\\": "src/", + }, + "autoload-dev": { + "My_Plugin_Namespace\\Tests\\": "tests/", + } + } + } +} +``` + +### Automatically Injecting WordPress Autoloader + +By default Composer WordPress Autoloader will automatically load the WordPress +autoloader. This is done by adding `src/autoload.php` as an autoloaded file to +Composer. However, this may not always work under some circumstances including +symlinks. When necessary, you can opt to inject the +`vendor/wordpress-autoload.php` file into your `vendor/autoload.php` file. This +is disabled by default and be enabled by setting `inject` to `true` in your +`composer.json`. + +```json +{ + "extra": { + "wordpress-autoloader": { + "inject": true + } + } +} +``` + +## Testing + +```bash +composer test +``` + +## Changelog + +Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/composer.json b/vendor/alleyinteractive/composer-wordpress-autoloader/composer.json new file mode 100644 index 00000000..779de3d5 --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/composer.json @@ -0,0 +1,55 @@ +{ + "name": "alleyinteractive/composer-wordpress-autoloader", + "type": "composer-plugin", + "description": "Autoload files using WordPress File Conventions using Composer", + "license": "GPL-2.0-or-later", + "authors": [ + { + "name": "Alley Interactive", + "email": "info@alley.co" + }, + { + "name": "Sean Fisher", + "email": "sean@alley.co" + } + ], + "require": { + "php": "^8.0", + "alleyinteractive/wordpress-autoloader": "^1.1.1", + "composer-plugin-api": "^2.0" + }, + "require-dev": { + "composer/composer": "*", + "phpunit/phpunit": "^9.5.8", + "squizlabs/php_codesniffer": "^4.0" + }, + "extra": { + "class": "ComposerWordPressAutoloader\\Plugin" + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "ComposerWordPressAutoloader\\": "src/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "lint": "@phpcs", + "lint:fix": "@phpcbf", + "phpcbf": "phpcbf --standard=./phpcs.xml.dist .", + "phpcs": "phpcs --standard=./phpcs.xml.dist .", + "phpunit": "phpunit", + "test": [ + "@phpcs", + "@phpunit" + ] + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } + } +} diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/phpcs.xml.dist b/vendor/alleyinteractive/composer-wordpress-autoloader/phpcs.xml.dist new file mode 100644 index 00000000..616aa35a --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/phpcs.xml.dist @@ -0,0 +1,21 @@ + + + Coding standards for Composer WordPress Autoload Plugin + + + + + + + + . + */.github/* + */vendor/* + tests/fixtures/* + + + + + + diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/src/AutoloadFactory.php b/vendor/alleyinteractive/composer-wordpress-autoloader/src/AutoloadFactory.php new file mode 100644 index 00000000..6d741dd0 --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/src/AutoloadFactory.php @@ -0,0 +1,61 @@ +> $rules Array of rules. + * @return array + */ + public static function generateFromRules(array $rules) + { + $loaders = []; + + foreach ($rules as $namespace => $paths) { + $loaders = array_merge( + $loaders, + array_map(function ($path) use ($namespace) { + $loader = new Autoloader($namespace, $path); + + if (static::$apcuPrefix) { + $loader->set_apcu_prefix(static::$apcuPrefix); + } + + return $loader; + }, $paths), + ); + } + + return $loaders; + } + + /** + * Register autoloaders from rules. + * + * @param array $rules Array of rules. + * @return void + */ + public static function registerFromRules(array $rules) + { + foreach (static::generateFromRules($rules) as $autoloader) { + $autoloader->register(); + } + } +} diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/src/AutoloadGenerator.php b/vendor/alleyinteractive/composer-wordpress-autoloader/src/AutoloadGenerator.php new file mode 100644 index 00000000..e6d8c279 --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/src/AutoloadGenerator.php @@ -0,0 +1,327 @@ +getEventDispatcher(), $io); + + $this->composer = $composer; + } + + /** + * @param bool $devMode + * @return void + */ + public function setDevMode($devMode = true) + { + parent::setDevMode($devMode); + + $this->devMode = (bool) $devMode; + } + + /** + * Whether generated autoloader considers APCu caching. + * + * @param bool $apcu + * @param string|null $apcuPrefix + * @return void + */ + public function setApcuMode(bool $apcu, ?string $apcuPrefix = null) + { + parent::setApcu($apcu, $apcuPrefix); + + $this->apcu = $apcu; + $this->apcuPrefix = $apcuPrefix !== null ? $apcuPrefix : $apcuPrefix; + } + + /** + * Generate the autoload file. + * + * @param boolean $beingInjected Flag if the autoload file is being injected. + * @param boolean $isDevMode Flag if dev dependencies are being included. + * @return string + */ + public function generate(bool $beingInjected, bool $isDevMode = true): string + { + $filesystem = new Filesystem(); + $basePath = $filesystem->normalizePath(realpath(realpath(getcwd()))); + $vendorPath = $filesystem->normalizePath(realpath(realpath($this->composer->getConfig()->get('vendor-dir')))); + + $vendorPathCode = '__DIR__'; + + $appBaseDirCode = $filesystem->findShortestPathCode($vendorPath, $basePath, true); + $appBaseDirCode = str_replace('__DIR__', '$vendorDir', $appBaseDirCode); + + $this->setDevMode($isDevMode); + + // Collect all the rules from all the packages. + $rules = array_merge_recursive( + $this->collectAutoloaderRules(), + $this->collectExtraAutoloaderRules(), + ); + + foreach ($rules as $namespace => $paths) { + // Convert the paths to be relative to the vendor/wordpress-autoload.php file. + $rules[$namespace] = array_values(array_unique( + array_map(fn ($path) => $this->getPathCode($filesystem, $basePath, $vendorPath, $path), $paths), + )); + } + + return $this->getAutoloadFileContents($rules, $beingInjected, $vendorPathCode, $appBaseDirCode); + } + + /** + * Create the autoloader file contents to write to vendor/wordpress-autoload.php. + * + * @param array $rules The rules to use to generate the autoloader. + * @param boolean $beingInjected Flag if the autoload file is being injected. + * @param string $vendorPathCode Vendor path code. + * @param string $appBaseDirCode App base dir code. + * @return string + */ + protected function getAutoloadFileContents( + array $rules, + bool $beingInjected, + string $vendorPathCode, + string $appBaseDirCode + ): string { + $autoloadFileContents = <<apcu) { + $apcuPrefix = var_export( + $this->apcuPrefix !== null + ? $this->apcuPrefix + : substr(base64_encode(md5(uniqid('', true), true)), 0, -3), + true, + ); + $autoloadFileContents .= "\n\\ComposerWordPressAutoloader\AutoloadFactory::setApcuPrefix($apcuPrefix);\n"; + } + + // Inject the file paths for the autoloader. + $autoloadFileContents .= << $paths) { + $autoloadFileContents .= sprintf( + ' %s => array(%s),', + var_export($namespace, true), + implode(', ', $paths), + ) . PHP_EOL; + } + + $autoloadFileContents .= "));\n"; + + if (!$beingInjected) { + $autoloadFileContents .= "\nreturn \$autoload;"; + } + + return $autoloadFileContents . "\n"; + } + + /** + * Collect the autoloader rules from 'autoload' and 'autoload-dev' to + * generate rules for. + * + * @return array + */ + protected function collectAutoloaderRules(): array + { + return $this->parseAutoloads( + $this->buildPackageMap( + $this->composer->getInstallationManager(), + $this->composer->getPackage(), + $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages(), + ), + $this->composer->getPackage(), + !$this->devMode, + )['wordpress'] ?? []; + } + + /** + * Collect the autoloader rules registered via 'extra' to generate for. + * + * @return array + */ + protected function collectExtraAutoloaderRules(): array + { + return $this->parseExtraAutoloads( + $this->buildPackageMap( + $this->composer->getInstallationManager(), + $this->composer->getPackage(), + $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages(), + ), + $this->composer->getPackage(), + !$this->devMode, + )['wordpress'] ?? []; + } + + /** + * Compiles an ordered list of namespace => path mappings + * + * @param array $packageMap + * @param PackageInterface $rootPackage + * @param boolean $filteredDevPackages + * @return array> + */ + public function parseAutoloads(array $packageMap, PackageInterface $rootPackage, $filteredDevPackages = false) + { + $rootPackageMap = array_shift($packageMap); + + // Mirroring existing logic in the Composer AutoloadGenerator. + if (is_array($filteredDevPackages)) { + $packageMap = array_filter($packageMap, function ($item) use ($filteredDevPackages) { + return !in_array($item[0]->getName(), $filteredDevPackages, true); + }); + } elseif ($filteredDevPackages) { + $packageMap = $this->filterPackageMap($packageMap, $rootPackage); + } + + if ($filteredDevPackages) { + $packageMap = $this->filterPackageMap($packageMap, $rootPackage); + } + + $sortedPackageMap = $this->sortPackageMap($packageMap); + $sortedPackageMap[] = $rootPackageMap; + array_unshift($packageMap, $rootPackageMap); + + $wordpress = $this->parseAutoloadsType($sortedPackageMap, 'wordpress', $rootPackage); + + krsort($wordpress); + + return [ + 'wordpress' => $wordpress, + ]; + } + + /** + * Compiles an ordered list of namespace => path mappings of autoloads defined in the 'extra' part of a package. + * + * @param array $packageMap + * @param PackageInterface $rootPackage + * @param boolean $filteredDevPackages + * @return array + */ + public function parseExtraAutoloads(array $packageMap, PackageInterface $rootPackage, $filteredDevPackages = false) + { + $rootPackageMap = array_shift($packageMap); + + // Mirroring existing logic in the Composer AutoloadGenerator. + if (is_array($filteredDevPackages)) { + $packageMap = array_filter($packageMap, function ($item) use ($filteredDevPackages) { + return !in_array($item[0]->getName(), $filteredDevPackages, true); + }); + } elseif ($filteredDevPackages) { + $packageMap = $this->filterPackageMap($packageMap, $rootPackage); + } + + if ($filteredDevPackages) { + $packageMap = $this->filterPackageMap($packageMap, $rootPackage); + } + + $sortedPackageMap = $this->sortPackageMap($packageMap); + $sortedPackageMap[] = $rootPackageMap; + array_unshift($packageMap, $rootPackageMap); + + return [ + 'wordpress' => $this->parseExtraAutoloadsType($sortedPackageMap, 'wordpress', $rootPackage), + ]; + } + + /** + * A modified port of the {@see AutoloadGenerator::parseAutoloadsType()} method from Composer. + * + * Imports autoload rules from a package's extra path. + * + * @param array $packageMap + * @param string $type one of: 'wordpress' + * @return array|array>|array + */ + protected function parseExtraAutoloadsType(array $packageMap, $type, RootPackageInterface $rootPackage) + { + $autoloads = []; + + foreach ($packageMap as $item) { + [$package, $installPath] = $item; + $autoload = [ + 'wordpress' => $package->getExtra()['wordpress-autoloader']['autoload'] ?? [], + ]; + + // Include autoload dev if we're in dev mode and this is the root package. + // Non-root package dev dependencies are not loaded. + if ($this->devMode && $package === $rootPackage) { + $autoload = array_merge_recursive( + $autoload, + [ + 'wordpress' => $package->getExtra()['wordpress-autoloader']['autoload-dev'] ?? [], + ], + ); + } + + // Skip misconfigured packages. + if (!isset($autoload[$type]) || !is_array($autoload[$type])) { + continue; + } + + if (null !== $package->getTargetDir() && $package !== $rootPackage) { + $installPath = substr($installPath, 0, -strlen('/' . $package->getTargetDir())); + } + + if ($package !== $rootPackage && $rootPackage->getTargetDir()) { + $installPath = str_replace($rootPackage->getTargetDir(), '', $installPath); + } + + foreach ($autoload[$type] as $namespace => $paths) { + foreach ((array) $paths as $path) { + $relativePath = empty($installPath) ? (empty($path) ? '.' : $path) : $installPath . '/' . $path; + $autoloads[$namespace][] = $relativePath; + } + } + } + + return $autoloads; + } +} diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/src/Plugin.php b/vendor/alleyinteractive/composer-wordpress-autoloader/src/Plugin.php new file mode 100644 index 00000000..90c9c021 --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/src/Plugin.php @@ -0,0 +1,209 @@ +composer = $composer; + $this->io = $io; + $this->filesystem = new Filesystem(); + } + + /** + * Remove any hooks from Composer + * + * This will be called when a plugin is deactivated before being + * uninstalled, but also before it gets upgraded to a new version + * so the old one can be deactivated and the new one activated. + * + * @param Composer $composer + * @param IOInterface $io + * + * @return void + */ + public function deactivate(Composer $composer, IOInterface $io) + { + } + + /** + * Prepare the plugin to be uninstalled + * + * This will be called after deactivate. + * + * @param Composer $composer + * @param IOInterface $io + * + * @return void + */ + public function uninstall(Composer $composer, IOInterface $io) + { + if ($this->filesystem->remove($this->getAutoloaderFilePath())) { + $this->io->write('Removed WordPress autoloader.'); + } + } + + /** + * Returns an array of event names this subscriber wants to listen to. + * + * @return array + */ + public static function getSubscribedEvents() + { + return [ + 'post-autoload-dump' => 'generateAutoloaderFile', + ]; + } + + /** + * Generate the autoloader file. + * + * @param Event $event + * @return void + */ + public function generateAutoloaderFile(Event $event): void + { + $this->filesystem->ensureDirectoryExists($this->composer->getConfig()->get('vendor-dir')); + + $this->generator = new AutoloadGenerator( + $this->composer, + $this->io, + ); + + $this->generator->setApcuMode( + $this->composer->getConfig()->get('apcu-autoloader') + ); + + // Merge default configuration with the one provided in the composer.json file. + $extra = array_merge( + [ + 'inject' => false, + ], + $this->composer->getPackage()->getExtra()['wordpress-autoloader'] ?? [], + ); + + /** + * Determine if we should inject our autoloader into the + * vendor/autoload.php from Composer. + * + * Injecting is not generally necessary any more since the file will + * automatically be loaded. However, it is still possible to inject it + * for circumstances where it is needed such as when dealing with symlinks. + */ + $injecting = $extra['inject'] ?? false; + + $autoloaderFile = $this->generator->generate($injecting, $event->isDevMode()); + + $partyEmoji = [ + '🪩', + '🎉', + '🎊', + '🍾', + ]; + + $partyEmoji = $partyEmoji[array_rand($partyEmoji)]; + + if ( + $this->filesystem->filePutContentsIfModified( + $this->getAutoloaderFilePath(), + $autoloaderFile, + ) + ) { + if (!$injecting) { + $this->io->write("{$partyEmoji} WordPress autoloader generated"); + } + } + + // Inject the autoloader into the existing autoloader. + if ($injecting) { + if ( + $this->filesystem->filePutContentsIfModified( + $this->composer->getConfig()->get('vendor-dir') . '/autoload.php', + $this->getInjectedAutoloaderFileContents($this->getAutoloaderFilePath()), + ) + ) { + $this->io->write( + "{$partyEmoji} WordPress autoloader genearted and injected into vendor/autoload.php." + ); + } else { + $this->io->write('⚠️ Error injecting Wordpress Autoloader.'); + } + } + } + + /** + * Retrieve the file path for the autoloader file. + * + * @return string + */ + protected function getAutoloaderFilePath(): string + { + $vendorDir = $this->composer->getConfig()->get('vendor-dir'); + return "{$vendorDir}/wordpress-autoload.php"; + } + + /** + * Generate the injected autoloader file. + * + * @param string $autoloaderFileName The path to the WordPress autoloader file. + * @return string + */ + protected function getInjectedAutoloaderFileContents(string $autoloaderFileName): string + { + $filename = basename($autoloaderFileName); + $autoloader = file_get_contents($this->composer->getConfig()->get('vendor-dir') . '/autoload.php'); + + $contents = preg_replace_callback( + '/^return (.*);$/m', + function ($matches) use ($filename) { + $autoloader = << wordpress-autoloader' + section of your composer.json file to false. Injecting the autoloader is + not generally necessary as the autoloader is automatically loaded for you. +*/ +require_once __DIR__ . '/{$filename}'; + +return \$loader; +AUTOLOADER; + + return "$autoloader\n"; + }, + $autoloader, + 1, + $count, + ); + + if (!$count) { + throw new RuntimeException('Error finding proper place to inject autoloader.'); + } + + return $contents; + } +} diff --git a/vendor/alleyinteractive/composer-wordpress-autoloader/src/autoload.php b/vendor/alleyinteractive/composer-wordpress-autoloader/src/autoload.php new file mode 100644 index 00000000..64922229 --- /dev/null +++ b/vendor/alleyinteractive/composer-wordpress-autoloader/src/autoload.php @@ -0,0 +1,30 @@ + Root_Namespace\Example_Class +src/trait-reusable-feature.php -> Root_Namesace\Reusable_Feature +src/feature/class-example-feature.php -> Root_Namespace\Feature\Example_Feature +``` + +Supports `class`, `trait`, `interface`, and `enum` files and any level of +namespaces. + +## Installation + +You can install the package via composer: + +```bash +composer require alleyinteractive/wordpress-autoloader +``` + +## Usage + +```php +Alley_Interactive\Autoloader\Autoloader::generate( + 'Plugin\\Namespace', + __DIR__ . '/src', +)->register(); + +// Or register the autoloader manually. +spl_autoload_register( + Alley_Interactive\Autoloader\Autoloader::generate( + 'Plugin\\Namespace', + __DIR__ . '/src', + ) +); +``` + +## Testing + +```bash +composer test +``` + +## Changelog + +Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. diff --git a/vendor/alleyinteractive/wordpress-autoloader/composer.json b/vendor/alleyinteractive/wordpress-autoloader/composer.json new file mode 100644 index 00000000..ee1441e9 --- /dev/null +++ b/vendor/alleyinteractive/wordpress-autoloader/composer.json @@ -0,0 +1,43 @@ +{ + "name": "alleyinteractive/wordpress-autoloader", + "type": "library", + "description": "Autoload files using WordPress File Conventions", + "license": "GPL-2.0-or-later", + "authors": [ + { + "name": "Alley Interactive", + "email": "info@alley.co" + } + ], + "require": { + "php": "^7.4.0|^8.0|^8.1" + }, + "require-dev": { + "alleyinteractive/alley-coding-standards": "^0.3", + "phpunit/phpunit": "^9.5.8" + }, + "config": { + "sort-packages": true, + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } + }, + "autoload": { + "files": [ + "src/class-autoloader.php" + ] + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "lint": "@phpcs", + "lint:fix": "@phpcbf", + "phpcbf": "phpcbf --standard=./phpcs.xml.dist .", + "phpcs": "phpcs --standard=./phpcs.xml.dist .", + "phpunit": "vendor/bin/phpunit", + "test": [ + "@phpcs", + "@phpunit" + ] + } +} diff --git a/vendor/alleyinteractive/wordpress-autoloader/src/class-autoloader.php b/vendor/alleyinteractive/wordpress-autoloader/src/class-autoloader.php new file mode 100644 index 00000000..f2a08085 --- /dev/null +++ b/vendor/alleyinteractive/wordpress-autoloader/src/class-autoloader.php @@ -0,0 +1,203 @@ + + */ + protected array $missing_classes = []; + + /** + * APCu cache key prefix. + * + * @var ?string + */ + protected ?string $apcu_prefix; + + /** + * Generate an autoloader for the WordPress file naming conventions. + * + * @param string $namespace Namespace to autoload. + * @param string $root_path Path in which to look for files. + * @return static Function for spl_autoload_register(). + */ + public static function generate( string $namespace, string $root_path ): callable { + return new static( $namespace, $root_path ); + } + + /** + * Constructor. + * + * @param string $namespace Namespace to register. + * @param string $root_path Root path of the namespace. + */ + public function __construct( string $namespace, string $root_path ) { + $this->namespace = $namespace; + + // Ensure consistent root. + $this->root_path = rtrim( $root_path, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $prefix Prefix to use. + * @return static + */ + public function set_apcu_prefix( string $prefix ) { + $this->apcu_prefix = function_exists( 'apcu_fetch' ) && filter_var( ini_get( 'apc.enabled' ), FILTER_VALIDATE_BOOLEAN ) + ? $prefix + : null; + + return $this; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function get_apcu_prefix(): ?string { + return $this->apcu_prefix; + } + + /** + * Check if a class was missing from the autoloader. + * + * @param string $classname Class to check. + * @return bool + */ + public function is_missing_class( string $classname ): bool { + return isset( $this->missing_classes[ $classname ] ); + } + + /** + * Register the autoloader. + */ + public function register() { + spl_autoload_register( $this ); + } + + /** + * Unregister the autoloader. + */ + public function unregister() { + spl_autoload_unregister( $this ); + } + + /** + * Invoke method of the class. + * + * @param string $classname Class being autoloaded. + */ + public function __invoke( string $classname ) { + // Ignore if the base namespace doesn't match. + if ( 0 !== \strpos( $classname, $this->namespace ) ) { + return; + } + + // Check if the class was previously not found. + if ( isset( $this->missing_classes[ $classname ] ) ) { + return; + } + + // Check if the class was previously found with APCu caching. + if ( isset( $this->apcu_prefix ) ) { + $hit = false; + $file = apcu_fetch( $this->apcu_prefix . $classname, $hit ); + + if ( $hit ) { + require_once $file; // phpcs:ignore WordPressVIPMinimum.Files.IncludingFile.UsingVariable + return $file; + } + } + + $file = $this->find_file( $classname ); + + if ( $file ) { + require_once $file; // phpcs:ignore WordPressVIPMinimum.Files.IncludingFile.UsingVariable + + // Cache the found file with APCu if enabled. + if ( isset( $this->apcu_prefix ) ) { + apcu_add( $this->apcu_prefix . $classname, $file ); + } + } else { + // Mark the class as not found to save future lookups. + $this->missing_classes[ $classname ] = true; + } + } + + /** + * Find a file for the given class. + * + * @param string $classname Class to find. + * @return string|null + */ + protected function find_file( string $classname ): ?string { + // Break up the classname into parts. + $parts = \explode( '\\', $classname ); + + // Retrieve the class name (last item) and convert it to a filename. + $class = \strtolower( \str_replace( '_', '-', \array_pop( $parts ) ) ); + + $base_path = ''; + + // Build the base path relative to the sub-namespace. + $sub_namespace = \substr( \implode( DIRECTORY_SEPARATOR, $parts ), \strlen( $this->namespace ) ); + + if ( ! empty( $sub_namespace ) ) { + $base_path = \str_replace( '_', '-', \strtolower( $sub_namespace ) ); + } + + // Support multiple locations since the class could be a class, trait or interface. + $paths = [ + '%1$s' . DIRECTORY_SEPARATOR . 'class-%2$s.php', + '%1$s' . DIRECTORY_SEPARATOR . 'trait-%2$s.php', + '%1$s' . DIRECTORY_SEPARATOR . 'interface-%2$s.php', + '%1$s' . DIRECTORY_SEPARATOR . 'enum-%2$s.php', + ]; + + /* + * Attempt to find the file by looping through the various paths. + * + * Autoloading a class will also cause a trait or interface with the + * same fully qualified name to be autoloaded, as it's impossible to + * tell which was requested. + */ + foreach ( $paths as $path ) { + $path = $this->root_path . \sprintf( $path, $base_path, $class ); + + if ( \file_exists( $path ) ) { + return $path; + } + } + + return null; + } +} diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 00000000..1343153a --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,25 @@ +create('Segments List ID', array( + 'Title' => 'Segment Title', + 'Rules' => array( + array( + 'Subject' => 'EmailAddress', + 'Clauses' => array( + 'CONTAINS example.com' + ) + ) , + array( + 'Subject' => '[customfield]', + 'Clauses' => array( + 'PROVIDED', + 'EQUALS 1' + ) + ) + ) + )); + ``` + + You would _now_ do this: + + ```php + $result = $wrap->create('Segments List ID', array( + 'Title' => 'Segment Title', + 'RuleGroups' => array( + array( + 'Rules' => array( + array( + 'RuleType' => 'EmailAddress', + 'Clause' => 'CONTAINS example.com' + ) + ) + ) , + array( + 'Rules' => array( + array( + 'RuleType' => '[customfield]', + 'Clause' => 'PROVIDED' + ) , + array( + 'RuleType' => '[customfield]', + 'Clause' => 'EQUALS 1' + ) + ) + ) + ) + )); + ``` + + * The Add Rule call is now Add Rule Group, taking a `ruleGroup` argument instead of a `rule` argument. + + ```php + function CS_REST_Segments->add_rulegroup($rulegroup) + ``` + + So for example, when you _previously_ would have added a rule like so: + + ```php + $wrap = new CS_REST_Segments('Segment ID', $auth); + $result = $wrap->add_rule(array( + 'Subject' => 'EmailAddress', + 'Clauses' => array('CONTAINS example.com') + )); + ``` + + You would _now_ do this: + + ```php + $wrap = new CS_REST_Segments('Segment ID', $auth); + $result = $wrap->add_rulegroup(array( + 'Rules' => array( + array( + 'RuleType' => 'EmailAddress', + 'Clause' => 'CONTAINS example.com' + ) + ) + )); + ``` +* Removed the get_apikey method to promote usage of oAuth authentication + +## v3.1.3 - 10 Dec, 2013 + +* Fixed a notice that was raised when unscheduling a campaign. + +## v3.1.2 - 28 Oct, 2013 + +* Only set the ```CURLOPT_CAINFO``` option if not already set globally via the ini system. + +## v3.1.1 - 3 Oct, 2013 + +* Made it harder to accidentally email your subscribers when using the example code + +## v3.1.0 - 15 Apr, 2013 + +* Added support for [single sign on](http://www.campaignmonitor.com/api/account/#single_sign_on) which allows initiation of external login sessions to Campaign Monitor. + +## v3.0.0 - 25 Mar, 2013 + +* Added support for authenticating using OAuth. See the [README](README.md#authenticating) for full usage instructions. + * This introduces some changes to how you authenticate using this library. You now authenticate by passing an `$auth` array as the first argument when creating instances of any classes which inherit from the `CS_REST_Wrapper_Base` class. + + So in existing code, when you _previously_ would have authenticated using an API key as follows: + + ```php + $wrap = new CS_REST_General('Your API Key'); + $result = $wrap->get_clients(); + ``` + + If you want to authenticate using an API key, you should _now_ do this: + + ```php + $wrap = new CS_REST_General(array('api_key' => 'Your API Key')); + $result = $wrap->get_clients(); + ``` + +## v2.5.2 - 19 Dec, 2012 + +* Removed simpletest source files, and added simpletest as a dev dependency. +* Fixed autoloading with composer, so that only necessary classes are loaded. + +## v2.5.1 - 14 Dec, 2012 + +* Use CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT constants instead of +CURLOPT_TIMEOUT_MS and CURLOPT_CONNECTTIMEOUT_MS. +* Added autoloading support when using Composer (PHP dependency management). + +## v2.5.0 - 11 Dec, 2012 + +* Added support for including from name, from email, and reply to email in +drafts, scheduled, and sent campaigns. +* Added support for campaign text version urls. +* Added support for transferring credits to/from a client. +* Added support for getting account billing details as well as client credits. +* Made all date fields optional when getting paged results. + +## v2.4.0 - 5 Nov, 2012 + +* Added CS_REST_Campaigns.get_email_client_usage(). +* Added support for ReadsEmailWith field on subscriber objects. +* Added support for retrieving unconfirmed subscribers for a list. +* Added support for suppressing email addresses. +* Added support for retrieving spam complaints for a campaign, as well as +adding SpamComplaints field to campaign summary output. +* Added VisibleInPreferenceCenter field to custom field output. +* Added support for setting preference center visibility when creating custom +fields. +* Added the ability to update a custom field name and preference visibility. +* Added documentation explaining that TextUrl is now optional when creating a +campaign. + +## v2.3.2 - 23 Oct, 2012 + +* Fixed timeout issue by setting CS_REST_SOCKET_TIMEOUT to 10 seconds. + +## v2.3.1 - 19 Oct, 2012 + +* Fixed #13. Load services_json.php only if Services_JSON class doesn't already +exist. +* Fixed issue with curl calls hangs hanging on proxy failure. + +## v2.3.0 - 10 Oct, 2012 + +* Added support for creating campaigns from templates. +* Added support for unsuppressing an email address. + +## 1.1.3 - 26 Sep, 2012 + +* Backported fix to use Mozilla certificate bundle, as per +http://curl.haxx.se/docs/caextract.html + +## v2.2.0 - 17 Sep, 2012 + +* Added WorldviewURL field to campaign summary response. +* Added Latitude, Longitude, City, Region, CountryCode, and CountryName +fields to campaign opens and clicks responses. + +## 2.1.1 - 11 Sep, 2012 + +* Added 'Contributing' section to README. +* Used the Mozilla certificate bundle, as per +http://curl.haxx.se/docs/caextract.html +* Bumping to 2.1.1 + +## v2.1.0 - 30 Aug, 2012 + +* Added support for basic / unlimited pricing. + +## v2.0.0 - 23 Aug, 2012 + +* Removing deprecated method CS_REST_Clients.set_access(). +* Removed traces of calling the API in a deprecated manner. + +## v1.2.0 - 22 Aug, 2012 + +* Added support for UnsubscribeSetting field when creating, updating and +getting list details. +* Added support for AddUnsubscribesToSuppList and ScrubActiveWithSuppList +fields when updating a list. +* Added support for finding all client lists to which a subscriber with a +specific email address belongs. + +## v1.1.2 - 23 Jul, 2012 + +* Added support for specifying whether subscription-based autoresponders +should be restarted when adding or updating subscribers. + +## v1.1.1 - 16 Jul, 2012 + +* Added Travis CI support. + +## v1.1.0 - 11 Jul, 2012 + +* Added support for team management. + +## 1.0.14 - 18 Mar, 2012 + +* Added support for new API methods. +* Fixed subscriber import sample. + +## 1.0.12 - 12 Sep, 2011 + +* Fixed response handling code so that it can deal with HTTP responses +beginning with "HTTP/1.1 Continue". + +## 1.0.11 - 25 Aug, 2011 + +* Fixed socket issue by added Connection:Close header for raw socket +transport. + +## 1.0.10 - 12 Jul, 2011 + +* Fixed #5. Updated recursive check_encoding call. +* Fixed #7. Modified template create/update to not require screenshot URL. + +## 1.0.9 - 18 Jun, 2011 + +* Fixed #4. Removed static function calls. + +## 1.0.8 - 6 Jun, 2011 + +* Initial release which supports current Campaign Monitor API. diff --git a/vendor/campaignmonitor/createsend-php/LICENSE b/vendor/campaignmonitor/createsend-php/LICENSE new file mode 100644 index 00000000..8b4f1d71 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/LICENSE @@ -0,0 +1,48 @@ +Copyright (c) 2010 Toby Brain + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------------ +For Services_JSON Library (classes/services_json.php) +------------------------------------------------------------------------------ +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the following +conditions are met: Redistributions of source code must retain the +above copyright notice, this list of conditions and the following +disclaimer. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +Author: Michal Migurski +Author: Matt Knapp +Author: Brett Stimmerman +Copyright (c) 2005 Michal Migurski +http://www.opensource.org/licenses/bsd-license.php diff --git a/vendor/campaignmonitor/createsend-php/README.md b/vendor/campaignmonitor/createsend-php/README.md new file mode 100644 index 00000000..42dd1810 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/README.md @@ -0,0 +1,154 @@ +# createsend [![Build Status](https://app.travis-ci.com/campaignmonitor/createsend-php.svg?branch=master)](https://app.travis-ci.com/campaignmonitor/createsend-php) +A PHP library which implements the complete functionality of the [Campaign Monitor API](http://www.campaignmonitor.com/api/). + +## Installation + +### Composer +If you use [Composer](http://getcomposer.org/), you can run the following command from the root of your project: + +``` +composer require campaignmonitor/createsend-php +``` + +Or add [campaignmonitor/createsend-php](https://packagist.org/packages/campaignmonitor/createsend-php) to your `composer.json` file: + +```json +{ + "require": { + "campaignmonitor/createsend-php": "{version}" + } +} +``` + +Followed by running: + +``` +composer update +``` + +### Manual Installation +Otherwise you can simply [download](https://github.com/campaignmonitor/createsend-php/tags) the library and include it in your project. + +After you have installed the library, simply include the relevant API class, as follows: + +```php +require_once 'csrest_campaigns.php' +``` + +## Authenticating + +The Campaign Monitor API supports authentication using either OAuth or an API key. + +### Using OAuth + +Depending on the environment you are developing in, you may wish to use a PHP OAuth library to get access tokens for your users. If you don't use an OAuth library, you will need to get access tokens for your users by following the instructions included in the Campaign Monitor API [documentation](http://www.campaignmonitor.com/api/getting-started/#authenticating_with_oauth). This package provides functionality to help you do this, as described below. You may also wish to reference this [example application](https://gist.github.com/jdennes/4973318), which is implemented using [Slim](http://slimframework.com/) but could easily be adapted for use with any PHP framework. + +The first thing your application should do is redirect your user to the Campaign Monitor authorization URL where they will have the opportunity to approve your application to access their Campaign Monitor account. You can get this authorization URL by using the `CS_REST_General::authorize_url()` method, like so: + +```php +require_once 'csrest_general.php'; + +$authorize_url = CS_REST_General::authorize_url( + 'Client ID for your application', + 'Redirect URI for your application', + 'The permission level your application requires', + 'Optional state data to be included' +); +# Redirect your users to $authorize_url. +``` + +If your user approves your application, they will then be redirected to the `redirect_uri` you specified, which will include a `code` parameter, and optionally a `state` parameter in the query string. Your application should implement a handler which can exchange the code passed to it for an access token, using `CS_REST_General::exchange_token()` like so: + +```php +require_once 'csrest_general.php'; + +$result = CS_REST_General::exchange_token( + 'Client ID for your application', + 'Client Secret for your application', + 'Redirect URI for your application', + 'A unique code for your user' # Get the code parameter from the query string +); + +if ($result->was_successful()) { + $access_token = $result->response->access_token; + $expires_in = $result->response->expires_in; + $refresh_token = $result->response->refresh_token; + # Save $access_token, $expires_in, and $refresh_token. +} else { + echo 'An error occurred:\n'; + echo $result->response->error.': '.$result->response->error_description."\n"; + # Handle error... +} +``` + +At this point you have an access token and refresh token for your user which you should store somewhere convenient so that your application can look up these values when your user wants to make future Campaign Monitor API calls. + +Once you have an access token and refresh token for your user, you can authenticate and make further API calls like so: + +```php +require_once 'csrest_general.php'; + +$auth = array( + 'access_token' => 'your access token', + 'refresh_token' => 'your refresh_token'); +$wrap = new CS_REST_General($auth); + +$result = $wrap->get_clients(); +var_dump($result->response); +``` + +All OAuth tokens have an expiry time, and can be renewed with a corresponding refresh token. If your access token expires when attempting to make an API call, you will receive an error response, so your code should handle this. Here's an example of how you could do this: + +```php +require_once 'csrest_general.php'; + +$auth = array( + 'access_token' => 'your access token', + 'refresh_token' => 'your refresh token' +); +$wrap = new CS_REST_General($auth); +$result = $wrap->get_clients(); +if (!$result->was_successful()) { + # If you receive '121: Expired OAuth Token', refresh the access token + if ($result->response->Code == 121) { + list($new_access_token, $new_expires_in, $new_refresh_token) = + $wrap->refresh_token(); + # Save $new_access_token, $new_expires_in, and $new_refresh_token + } + # Make the call again + $result = $wrap->get_clients(); +} +var_dump($result->response); +``` + +### Using an API key + +```php +require_once 'csrest_general.php'; + +$auth = array('api_key' => 'your API key'); +$wrap = new CS_REST_General($auth); + +$result = $wrap->get_clients(); +var_dump($result->response); +``` +## API Call Timeout +You can set your local API call timeout time in createsend-php\class\transport.php line 11, in the CS_REST_CALL_TIMEOUT variable. Currently the default is 120 secs. + +## Examples + +Samples for creating or accessing all resources can be found in the samples directory. +These samples can be used as the basis for your own application and provide an outline of +the expected inputs for each API call. + +Further documentation of the inputs and outputs of each call can be found in the +documentation in each of the csrest_*.php files or simply by examining the +var_dump results in each of the provided samples. + +## Contributing + +Please check the [guidelines for contributing](https://github.com/campaignmonitor/createsend-php/blob/master/CONTRIBUTING.md) to this repository. + +## Releasing + +Please check the [instructions for releasing](https://github.com/campaignmonitor/createsend-php/blob/master/RELEASE.md) this library. diff --git a/vendor/campaignmonitor/createsend-php/RELEASE.md b/vendor/campaignmonitor/createsend-php/RELEASE.md new file mode 100644 index 00000000..de33c515 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/RELEASE.md @@ -0,0 +1,42 @@ +# Releasing createsend-php + +## Requirements + +- You must have [Composer](https://getcomposer.org/) installed. + +## Prepare the release + +- Increment the `CS_REST_WRAPPER_VERSION` constant in the `class/base_classes.php` file, ensuring that you use [Semantic Versioning](http://semver.org/). +- Add an entry to `HISTORY.md` which clearly explains the new release. +- Install development dependencies and ensure that tests pass locally: + + ``` + composer install --dev + cd tests && php all_tests.php && cd .. + ``` + +- Commit your changes: + + ``` + git commit -am "Version X.Y.Z" + ``` + +- Tag the new version: + + ``` + git tag -a vX.Y.Z -m "Version X.Y.Z" + ``` + +- Push your changes to GitHub, including the tag you just created: + + ``` + git push origin master --tags + ``` + +- Ensure that all [tests](https://travis-ci.org/campaignmonitor/createsend-php) pass. + +## Release the module + +There is a [GitHub service hook](https://github.com/campaignmonitor/createsend-php/settings/hooks) for the [Packagist](https://packagist.org/) PHP package repository, which is configured to update the [createsend-php](https://packagist.org/packages/campaignmonitor/createsend-php) package when new tags are pushed to GitHub. + +So there are no further steps to releasing the module. You should now see the latest version of the module listed on [Packagist](https://packagist.org/packages/campaignmonitor/createsend-php). All done! diff --git a/vendor/campaignmonitor/createsend-php/class/base_classes.php b/vendor/campaignmonitor/createsend-php/class/base_classes.php new file mode 100644 index 00000000..fd8c71be --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/class/base_classes.php @@ -0,0 +1,317 @@ +response = $response; + $this->http_status_code = $code; + } + + /** + * Can be used to check if a call to the api resulted in a successful response. + * @return boolean False if the call failed. Check the response property for the failure reason. + * @access public + */ + function was_successful() { + return $this->http_status_code >= 200 && $this->http_status_code < 300; + } + } +} +/** + * Base class for the create send PHP wrapper. + * This class includes functions to access the general data, + * i.e timezones, clients and getting your API Key from username and password + * @author tobyb + * + */ +if (!class_exists('CS_REST_Wrapper_Base')) { + class CS_REST_Wrapper_Base { + /** + * The protocol to use while accessing the api + * @var string http or https + * @access private + */ + var $_protocol; + + /** + * The base route of the create send api. + * @var string + * @access private + */ + var $_base_route; + + /** + * The serialiser to use for serialisation and deserialisation + * of API request and response data + * @var CS_REST_JsonSerialiser or CS_REST_XmlSerialiser + * @access private + */ + var $_serialiser; + + /** + * The transport to use to send API requests + * @var CS_REST_CurlTransport or CS_REST_SocketTransport or your own custom transport. + * @access private + */ + var $_transport; + + /** + * The logger to use for debugging of all API requests + * @var CS_REST_Log + * @access private + */ + var $_log; + + /** + * The default options to use for each API request. + * These can be overridden by passing in an array as the call_options argument + * to a single api request. + * Valid options are: + * + * deserialise boolean: + * Set this to false if you want to get the raw response. + * This can be useful if your passing json directly to javascript. + * + * While there are clearly other options there is no need to change them. + * @var array + * @access private + */ + var $_default_call_options; + + /** + * Constructor. + * @param $auth_details array Authentication details to use for API calls. + * This array must take one of the following forms: + * If using OAuth to authenticate: + * array( + * 'access_token' => 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * + * Note that this method will continue to work in the deprecated + * case when $auth_details is passed in as a string containing an + * API key. + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct( + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = CS_HOST, + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + if (is_string($auth_details)) { + # If $auth_details is a string, assume it is an API key + $auth_details = array('api_key' => $auth_details); + } + + $this->_log = is_null($log) ? new CS_REST_Log($debug_level) : $log; + + $this->_protocol = $protocol; + $this->_base_route = $protocol.'://'.$host.'/api/v3.3/'; + + $this->_log->log_message('Creating wrapper for '.$this->_base_route, get_class($this), CS_REST_LOG_VERBOSE); + + $this->_transport = is_null($transport) ? + CS_REST_TRANSPORT_get_available($this->is_secure(), $this->_log) : + $transport; + + $transport_type = method_exists($this->_transport, 'get_type') ? $this->_transport->get_type() : 'Unknown'; + $this->_log->log_message('Using '.$transport_type.' for transport', get_class($this), CS_REST_LOG_WARNING); + + $this->_serialiser = is_null($serialiser) ? + CS_REST_SERIALISATION_get_available($this->_log) : $serialiser; + + $this->_log->log_message('Using '.$this->_serialiser->get_type().' json serialising', get_class($this), CS_REST_LOG_WARNING); + + $this->_default_call_options = array ( + 'authdetails' => $auth_details, + 'userAgent' => 'createsend-php v'.CS_REST_WRAPPER_VERSION. + ' PHPv'.phpversion().' over '.$transport_type.' with '.$this->_serialiser->get_type(), + 'contentType' => 'application/json; charset=utf-8', + 'deserialise' => true, + 'host' => $host, + 'protocol' => $protocol + ); + + } + + /** + * Refresh the current OAuth token using the current refresh token. + * @access public + */ + function refresh_token() { + if (!isset($this->_default_call_options['authdetails']) || + !isset($this->_default_call_options['authdetails']['refresh_token'])) { + trigger_error( + 'Error refreshing token. There is no refresh token set on this object.', + E_USER_ERROR); + return array(NULL, NULL, NULL); + } + $body = "grant_type=refresh_token&refresh_token=".urlencode( + $this->_default_call_options['authdetails']['refresh_token']); + $options = array('contentType' => 'application/x-www-form-urlencoded'); + $wrap = new CS_REST_Wrapper_Base( + NULL, 'https', CS_REST_LOG_NONE, CS_HOST, NULL, + new CS_REST_DoNothingSerialiser(), NULL); + + $result = $wrap->post_request(CS_OAUTH_TOKEN_URI, $body, $options); + if ($result->was_successful()) { + $access_token = $result->response->access_token; + $expires_in = $result->response->expires_in; + $refresh_token = $result->response->refresh_token; + $this->_default_call_options['authdetails'] = array( + 'access_token' => $access_token, + 'refresh_token' => $refresh_token + ); + return array($access_token, $expires_in, $refresh_token); + } else { + trigger_error( + 'Error refreshing token. '.$result->response->error.': '.$result->response->error_description, + E_USER_ERROR); + return array(NULL, NULL, NULL); + } + } + + /** + * @return boolean True if the wrapper is using SSL. + * @access public + */ + function is_secure() { + return $this->_protocol === 'https'; + } + + function put_request($route, $data, $call_options = array()) { + return $this->_call($call_options, CS_REST_PUT, $route, $data); + } + + function post_request($route, $data, $call_options = array()) { + return $this->_call($call_options, CS_REST_POST, $route, $data); + } + + function delete_request($route, $call_options = array()) { + return $this->_call($call_options, CS_REST_DELETE, $route); + } + + function get_request($route, $include_tracking_pref = NULL, $call_options = array()) { + + if(isset($include_tracking_pref) + && is_bool($include_tracking_pref)) { + $route .= '&includeTrackingPreference='.($include_tracking_pref ? "true" : "false"); + } + + return $this->_call($call_options, CS_REST_GET, $route); + } + + function get_request_with_params($route, $params) { + if(!is_null($params)) { + # http_build_query coerces booleans to 1 and 0, not helpful + foreach($params as $key=>$value) { + if(is_bool($value)) { + $params[$key] = ($value) ? 'true' : 'false'; + } + } + $route = $route . '?' . http_build_query($params); + } + return $this->get_request($route); + } + + function get_request_paged($route, $page_number, $page_size, $order_field, $order_direction, $include_tracking_pref = NULL, + $join_char = 'deprecated') { + // Stores our query values + $query = array(); + // Extract any initial queries in the route into our local query + if(strpos($route, '?') !== false) { + $parts = parse_url($route); + $route = current(explode('?', $route)); + if(array_key_exists('query', $parts) && !empty($parts['query'])) { + parse_str($parts['query'], $query); + } + } + // Now selectively add supplied vars to the query + if(!is_null($page_number)) { + $query['page'] = $page_number; + } + if(!is_null($page_size)) { + $query['pageSize'] = $page_size; + } + if(!is_null($order_field)) { + $query['orderField'] = $order_field; + } + if(!is_null($order_direction)) { + $query['orderDirection'] = $order_direction; + } + // If we ended up with a query, add it back to the route + if(!empty($query)) { + $route .= '?'.http_build_query($query); + } + return $this->get_request($route, $include_tracking_pref); + } + + /** + * Internal method to make a general API request based on the provided options + * @param $call_options + * @access private + */ + function _call($call_options, $method, $route, $data = NULL) { + $call_options['route'] = $route; + $call_options['method'] = $method; + + if(!is_null($data)) { + $call_options['data'] = $this->_serialiser->serialise($data); + } + + $call_options = array_merge($this->_default_call_options, $call_options); + $this->_log->log_message('Making '.$call_options['method'].' call to: '.$call_options['route'], get_class($this), CS_REST_LOG_WARNING); + + $call_result = $this->_transport->make_call($call_options); + + $this->_log->log_message('Call result:

'.var_export($call_result, true).'
', + get_class($this), CS_REST_LOG_VERBOSE); + + if($call_options['deserialise']) { + $call_result['response'] = $this->_serialiser->deserialise($call_result['response']); + } + + return new CS_REST_Wrapper_Result($call_result['response'], $call_result['code']); + } + } +} diff --git a/vendor/campaignmonitor/createsend-php/class/cacert.pem b/vendor/campaignmonitor/createsend-php/class/cacert.pem new file mode 100644 index 00000000..1ccadf7d --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/class/cacert.pem @@ -0,0 +1,3849 @@ +## +## ca-bundle.crt -- Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Thu Jun 28 15:03:08 2012 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## + +# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.85 $ $Date: 2012/06/28 13:50:18 $ + +GTE CyberTrust Global Root +========================== +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg +Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG +A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz +MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL +Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 +IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u +sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql +HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID +AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW +M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF +NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- + +Thawte Server CA +================ +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE +AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j +b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV +BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u +c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG +A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 +ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl +/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 +1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J +GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ +GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- + +Thawte Premium Server CA +======================== +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE +AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl +ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU +VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 +aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ +cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 +aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh +Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ +qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm +SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf +8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t +UCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- + +Equifax Secure CA +================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE +ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT +B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR +fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW +8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE +CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS +spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 +zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB +BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 +70+sB3c4 +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 1 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy +MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE +NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i +o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq +kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 +RbyhkwS7hp86W0N6w4pl +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 3 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy +MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD +VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS +xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi +up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 +mPnHfxsb1gYgAlihw6ID +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA +TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah +WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf +Tqj/ZA1k +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd +k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq +WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM +XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC +lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx +nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC +wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA +ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK +1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk +LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO +FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 +lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT +1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD +Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 +-----END CERTIFICATE----- + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +ValiCert Class 1 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy +MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi +GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm +DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG +lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX +icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP +Orf1LXLI +-----END CERTIFICATE----- + +ValiCert Class 2 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC +CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf +ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ +SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV +UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 +W9ViH0Pd +-----END CERTIFICATE----- + +RSA Root Certificate 1 +====================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td +3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H +BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs +3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF +V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r +on+jjBXu +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E +bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ +rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ +Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB +FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N +y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h +a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc +D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y +azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug +b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 +tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 +C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS +0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs +Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 +JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf +0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx +JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j +GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Verisign Class 4 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS +tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM +8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW +Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX +Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt +mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd +RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG +UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- + +Entrust.net Secure Server CA +============================ +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg +cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl +ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG +A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi +eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p +dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ +aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 +gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw +ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw +CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l +dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw +NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow +HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN +Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 +n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC +AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER +gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B +AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS +o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z +2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX +OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Equifax Secure Global eBusiness CA +================================== +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp +bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx +HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds +b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV +PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN +qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn +hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs +MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN +I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY +NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 1 +============================= +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB +LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE +ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz +IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ +1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a +IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk +MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW +Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF +AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 +lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ +KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 2 +============================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE +ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y +MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT +DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn +2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 +BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx +JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e +uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 +jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia +78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm +V+GRMOrN +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +UTN-USER First-Network Applications +=================================== +-----BEGIN CERTIFICATE----- +MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp +BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 +WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T +YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB +cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug +mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj +DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu +Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi +P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE +j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w +HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j +cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G +CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y +IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK +RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp +xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq +DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE +-----END CERTIFICATE----- + +America Online Root Certification Authority 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG +v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z +DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh +sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP +8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z +o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf +GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF +VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft +3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g +Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- + +America Online Root Certification Authority 2 +============================================= +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en +fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 +f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO +qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN +RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 +gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn +6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid +FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 +Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj +B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op +aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY +T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p ++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg +JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy +zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO +ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh +1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf +GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff +Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP +cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 1 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw +NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 +7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 +EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl +0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 +2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa +HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT +iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 +28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV +yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR +vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P +qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z +IRlXvVWa +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +TDC Internet Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE +ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx +NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu +ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j +xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL +znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc +5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 +otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI +AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM +VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM +MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC +AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe +UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G +CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m +gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ +2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb +O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU +Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l +-----END CERTIFICATE----- + +TDC OCES Root CA +================ +-----BEGIN CERTIFICATE----- +MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE +ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 +MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH +nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 +zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV +iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde +dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO +3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB +5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k +ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm +cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp +Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x +LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM +MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm +aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy +MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 ++RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 +NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 +A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc +A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 +AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 +AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== +-----END CERTIFICATE----- + +UTN DATACorp SGC Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ +BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa +MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w +HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy +dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys +raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo +wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA +9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv +33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud +DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 +BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD +LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 +DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 +I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx +EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP +DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- + +UTN USERFirst Email Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 +BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 +OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx +FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx +ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz +dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx +B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 +om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG +TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl +yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE +AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV +HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll +bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne +xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ +5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV +NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ +w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +UTN USERFirst Object Root CA +============================ +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb +BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz +NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx +HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy +dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR +loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ +w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu +lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 +RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL +BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 +ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly +c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw +DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO +PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE +qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG +hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Qualified (Class QA) Root +================================= +-----BEGIN CERTIFICATE----- +MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn +eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 +bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 +LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 +dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP +aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV +CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e +8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb +m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ +0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM +0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 +YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh +biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p +a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz +YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg +YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg +ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov +L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr +Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 +aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg +YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 +IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 +DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN +wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg +W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc +R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR +5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +NetLock Business (Class B) Root +=============================== +-----BEGIN CERTIFICATE----- +MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg +VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD +VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv +bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg +VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB +iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S +o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr +1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ +RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh +dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 +ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv +c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg +YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh +c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz +Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA +bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl +IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 +YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj +cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM +43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR +stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI +-----END CERTIFICATE----- + +NetLock Express (Class C) Root +============================== +-----BEGIN CERTIFICATE----- +MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ +BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j +ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z +W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 +euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw +DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN +RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn +YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB +IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i +aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 +ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs +ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo +dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y +emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k +IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ +UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg +YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 +xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW +gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Firmaprofesional Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT +GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp +Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA +ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL +MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT +OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 +ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V +j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH +lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf +3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 +NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww +KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG +AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD +ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq +u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf +wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm +7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG +VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= +-----END CERTIFICATE----- + +Wells Fargo Root CA +=================== +-----BEGIN CERTIFICATE----- +MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl +bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv +MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX +x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 +E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 +OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j +sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj +YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF +BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD +ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv +m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R +OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx +x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 +tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 1 +============================================== +-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP +MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 +acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx +MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg +U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB +TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC +aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX +yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i +Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ +8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 +W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 +sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE +q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy +B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY +nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2 +============================================== +-----BEGIN CERTIFICATE----- +MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN +MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr +dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe +LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI +x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g +QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr +5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB +AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt +Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 +Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ +hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P +9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 +UrbnBEI= +-----END CERTIFICATE----- + +SwissSign Platinum CA - G2 +========================== +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw +HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM +U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu +669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF +eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne +WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo +j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 +8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T +aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy +domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D ++m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV +CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv +zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 +Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 +NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 +U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 +KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl +9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B +aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs +OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY +Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci +IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +S-TRUST Authentication and Encryption Root CA 2005 PN +===================================================== +-----BEGIN CERTIFICATE----- +MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh +cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT +LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w +NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk +ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj +aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp +b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob +4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL +g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf +eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 +KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB +/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv +bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU +D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD +pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 +P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA +nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit +F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b +Hz2eBIPdltkdOpQ= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. +====================================== +-----BEGIN CERTIFICATE----- +MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT +AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg +LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w +HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ +U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh +IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN +yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU +2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 +4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP +2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm +8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf +HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa +Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK +5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b +czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g +ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF +BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug +cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf +AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX +EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v +/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 +MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 +3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk +eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f +/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h +RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU +Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 2 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw +MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw +IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 +xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ +Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u +SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G +dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ +KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj +TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP +JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk +vQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 3 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw +MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W +yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo +6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ +uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk +2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE +O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 +yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 +IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal +092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc +5A== +-----END CERTIFICATE----- + +TC TrustCenter Universal CA I +============================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN +MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg +VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw +JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC +qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv +xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw +ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O +gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j +BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG +1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy +vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 +ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a +7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +ComSign CA +========== +-----BEGIN CERTIFICATE----- +MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD +EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy +MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp +Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q +ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy +P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN +GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk +YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM +rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy +oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P +AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ +VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 +QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI +mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb +/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG +zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U +AGegcQCCSA== +-----END CERTIFICATE----- + +ComSign Secured CA +================== +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE +AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w +NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD +QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs +49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH +7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB +kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 +9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw +AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t +U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA +j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC +AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a +BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp +FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP +51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +Buypass Class 3 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 +MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx +ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 +n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia +AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c +1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 +pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA +EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 +htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj +el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg +QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe +Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt +IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by +X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b +gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr +eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ +TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy +Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn +uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI +qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm +ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 +Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW +Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t +FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm +zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k +XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT +bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU +RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK +1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt +2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ +Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 +AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ +VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 +yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa +XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n +0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ +RjXZ+Hxb +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky +CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX +bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ +D/xwzoiQ +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi +=================================================== +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz +ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 +MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 +cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u +aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY +8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y +jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI +JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk +9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG +SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d +F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq +D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 +Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq +fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +TC TrustCenter Universal CA III +=============================== +-----BEGIN CERTIFICATE----- +MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe +Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU +QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex +KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt +QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO +juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut +CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 +M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G +A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA +g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ +KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK +BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV +CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq +woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +A-Trust-nQual-03 +================ +-----BEGIN CERTIFICATE----- +MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE +Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy +a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R +dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw +RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 +ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 +c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA +zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n +yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE +SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 +iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V +cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV +eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 +ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr +sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd +JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS +mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 +ahq97BvIxYSazQ== +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/class/exceptions.php b/vendor/campaignmonitor/createsend-php/class/exceptions.php new file mode 100644 index 00000000..9ce49e4d --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/class/exceptions.php @@ -0,0 +1,10 @@ +_level = $level; + } + + function log_message($message, $module, $level) { + if($this->_level >= $level) { + echo date('G:i:s').' - '.$module.': '.$message."
\n"; + } + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/class/serialisation.php b/vendor/campaignmonitor/createsend-php/class/serialisation.php new file mode 100644 index 00000000..dd1a7694 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/class/serialisation.php @@ -0,0 +1,136 @@ +log_message('Getting serialiser', __FUNCTION__, CS_REST_LOG_VERBOSE); + if(function_exists('json_decode') && function_exists('json_encode')) { + return new CS_REST_NativeJsonSerialiser($log); + } else { + return new CS_REST_ServicesJsonSerialiser($log); + } + } +} + +if (!class_exists('CS_REST_BaseSerialiser')) { + class CS_REST_BaseSerialiser { + + var $_log; + + function __construct($log) { + $this->_log = $log; + } + + /** + * Recursively ensures that all data values are utf-8 encoded. + * @param array $data All values of this array are checked for utf-8 encoding. + */ + function check_encoding($data) { + + foreach($data as $k => $v) { + // If the element is a sub-array then recusively encode the array + if(is_array($v)) { + $data[$k] = $this->check_encoding($v); + // Otherwise if the element is a string then we need to check the encoding + } else if(is_string($v)) { + if((function_exists('mb_detect_encoding') && mb_detect_encoding($v) !== 'UTF-8') || + (function_exists('mb_check_encoding') && !mb_check_encoding($v, 'UTF-8'))) { + // The string is using some other encoding, make sure we utf-8 encode + $v = mb_convert_encoding($v, 'UTF-8', 'ISO-8859-1'); + } + + $data[$k] = $v; + } + } + + return $data; + } + } +} + +if (!class_exists('CS_REST_DoNothingSerialiser')) { + class CS_REST_DoNothingSerialiser extends CS_REST_BaseSerialiser { + function __construct() {} + function get_type() { return 'do_nothing'; } + function serialise($data) { return $data; } + function deserialise($text) { + $data = json_decode($text); + return is_null($data) ? $text : $data; + } + function check_encoding($data) { return $data; } + } +} + +if (!class_exists('CS_REST_NativeJsonSerialiser')) { + class CS_REST_NativeJsonSerialiser extends CS_REST_BaseSerialiser { + + function get_format() { + return 'json'; + } + + function get_type() { + return 'native'; + } + + function serialise($data) { + if(is_null($data) || $data == '') return ''; + return json_encode($this->check_encoding($data)); + } + + function deserialise($text) { + $data = json_decode($text); + + return $this->strip_surrounding_quotes(is_null($data) ? $text : $data); + } + + /** + * We've had sporadic reports of people getting ID's from create routes with the surrounding quotes present. + * There is no case where these should be present. Just get rid of it. + */ + function strip_surrounding_quotes($data) { + if(is_string($data)) { + return trim($data, '"'); + } + + return $data; + } + } +} + +if (!class_exists('CS_REST_ServicesJsonSerialiser')) { + class CS_REST_ServicesJsonSerialiser extends CS_REST_BaseSerialiser { + + var $_serialiser; + + function __construct($log) { + parent::__construct($log); + if (!class_exists('Services_JSON', false)) { + require_once dirname(__FILE__).'/services_json.php'; + } + + $this->_serialiser = new Services_JSON(); + } + + function get_content_type() { + return 'application/json'; + } + + function get_format() { + return 'json'; + } + + function get_type() { + return 'services_json'; + } + + function serialise($data) { + if(is_null($data) || $data == '') return ''; + return $this->_serialiser->encode($this->check_encoding($data)); + } + + function deserialise($text) { + $data = $this->_serialiser->decode($text); + + return is_null($data) ? $text : $data; + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/class/services_json.php b/vendor/campaignmonitor/createsend-php/class/services_json.php new file mode 100644 index 00000000..dddd1815 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/class/services_json.php @@ -0,0 +1,788 @@ + + * @author Matt Knapp + * @author Brett Stimmerman + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +defined('SERVICES_JSON_SLICE') or define('SERVICES_JSON_SLICE', 1); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +defined('SERVICES_JSON_IN_STR') or define('SERVICES_JSON_IN_STR', 2); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +defined('SERVICES_JSON_IN_ARR') or define('SERVICES_JSON_IN_ARR', 3); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +defined('SERVICES_JSON_IN_OBJ') or define('SERVICES_JSON_IN_OBJ', 4); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +defined('SERVICES_JSON_IN_CMT') or define('SERVICES_JSON_IN_CMT', 5); + +/** + * Behavior switch for Services_JSON::decode() + */ +defined('SERVICES_JSON_LOOSE_TYPE') or define('SERVICES_JSON_LOOSE_TYPE', 16); + +/** + * Behavior switch for Services_JSON::decode() + */ +defined('SERVICES_JSON_SUPPRESS_ERRORS') or define('SERVICES_JSON_SUPPRESS_ERRORS', 32); + +/** + * Converts to and from JSON format. + * + * Brief example of use: + * + * + * // create a new instance of Services_JSON + * $json = new Services_JSON(); + * + * // convert a complexe value to JSON notation, and send it to the browser + * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); + * $output = $json->encode($value); + * + * print($output); + * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] + * + * // accept incoming POST data, assumed to be in JSON notation + * $input = file_get_contents('php://input', 1000000); + * $value = $json->decode($input); + * + */ +if (!class_exists('Services_JSON')) { + class Services_JSON + { + public int $use = 0; + + /** + * constructs a new JSON instance + * + * @param int $use object behavior flags; combine with boolean-OR + * + * possible values: + * - SERVICES_JSON_LOOSE_TYPE: loose typing. + * "{...}" syntax creates associative arrays + * instead of objects in decode(). + * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. + * Values which can't be encoded (e.g. resources) + * appear as NULL instead of throwing errors. + * By default, a deeply-nested resource will + * bubble up with an error, so all return values + * from encode() should be checked with isError() + */ + function __construct($use = 0) + { + $this->use = $use; + } + + /** + * convert a string from one UTF-16 char to one UTF-8 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf16 UTF-16 character + * @return string UTF-8 character + * @access private + */ + function utf162utf8($utf16) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); + } + + $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]); + + switch(true) { + case ((0x7F & $bytes) == $bytes): + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x7F & $bytes); + + case (0x07FF & $bytes) == $bytes: + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xC0 | (($bytes >> 6) & 0x1F)) + . chr(0x80 | ($bytes & 0x3F)); + + case (0xFFFF & $bytes) == $bytes: + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xE0 | (($bytes >> 12) & 0x0F)) + . chr(0x80 | (($bytes >> 6) & 0x3F)) + . chr(0x80 | ($bytes & 0x3F)); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + function utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8[0]) >> 2)) + . chr((0xC0 & (ord($utf8[0]) << 6)) + | (0x3F & ord($utf8[1]))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8[0]) << 4)) + | (0x0F & (ord($utf8[1]) >> 2))) + . chr((0xC0 & (ord($utf8[1]) << 6)) + | (0x7F & ord($utf8[2]))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function encode($var) + { + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var[$c]); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var[$c]; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var[$c]; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var[$c + 1])); + $c += 1; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var[$c + 1]), + ord($var[$c + 2])); + $c += 2; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var[$c + 1]), + ord($var[$c + 2]), + ord($var[$c + 3])); + $c += 3; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var[$c + 1]), + ord($var[$c + 2]), + ord($var[$c + 3]), + ord($var[$c + 4])); + $c += 4; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var[$c + 1]), + ord($var[$c + 2]), + ord($var[$c + 3]), + ord($var[$c + 4]), + ord($var[$c + 5])); + $c += 5; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + $properties = array_map(array($this, 'name_value'), + array_keys($var), + array_values($var)); + + foreach($properties as $property) { + if($this->isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + // treat it like a regular array + $elements = array_map(array($this, 'encode'), $var); + + foreach($elements as $element) { + if($this->isError($element)) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = get_object_vars($var); + + $properties = array_map(array($this, 'name_value'), + array_keys($vars), + array_values($vars)); + + foreach($properties as $property) { + if($this->isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) + ? 'null' + : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function name_value($name, $value) + { + $encoded_value = $this->encode($value); + + if($this->isError($encoded_value)) { + return $encoded_value; + } + + return $this->encode(strval($name)) . ':' . $encoded_value; + } + + /** + * reduce a string by removing leading and trailing comments and whitespace + * + * @param $str string string value to strip of comments and whitespace + * + * @return string string value stripped of comments and whitespace + * @access private + */ + function reduce_string($str) + { + $str = preg_replace(array( + + // eliminate single line comments in '// ...' form + '#^\s*//(.+)$#m', + + // eliminate multi-line comments in '/* ... */' form, at start of string + '#^\s*/\*(.+)\*/#Us', + + // eliminate multi-line comments in '/* ... */' form, at end of string + '#/\*(.+)\*/\s*$#Us' + + ), '', $str); + + // eliminate extraneous space + return trim($str); + } + + /** + * decodes a JSON string into appropriate variable + * + * @param string $str JSON-formatted string + * + * @return mixed number, boolean, string, array, or object + * corresponding to given JSON input string. + * See argument 1 to Services_JSON() above for object-output behavior. + * Note that decode() always returns strings + * in ASCII or UTF-8 format! + * @access public + */ + function decode($str) + { + $str = $this->reduce_string($str); + + switch (strtolower($str)) { + case 'true': + return true; + + case 'false': + return false; + + case 'null': + return null; + + default: + $m = array(); + + if (is_numeric($str)) { + // Lookie-loo, it's a number + + // This would work on its own, but I'm trying to be + // good about returning integers where appropriate: + // return (float)$str; + + // Return float or int, as appropriate + return ((float)$str == (integer)$str) + ? (integer)$str + : (float)$str; + + } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { + // STRINGS RETURNED IN UTF-8 FORMAT + $delim = substr($str, 0, 1); + $chrs = substr($str, 1, -1); + $utf8 = ''; + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c < $strlen_chrs; ++$c) { + + $substr_chrs_c_2 = substr($chrs, $c, 2); + $ord_chrs_c = ord($chrs[$c]); + + switch (true) { + case $substr_chrs_c_2 == '\b': + $utf8 .= chr(0x08); + ++$c; + break; + case $substr_chrs_c_2 == '\t': + $utf8 .= chr(0x09); + ++$c; + break; + case $substr_chrs_c_2 == '\n': + $utf8 .= chr(0x0A); + ++$c; + break; + case $substr_chrs_c_2 == '\f': + $utf8 .= chr(0x0C); + ++$c; + break; + case $substr_chrs_c_2 == '\r': + $utf8 .= chr(0x0D); + ++$c; + break; + + case $substr_chrs_c_2 == '\\"': + case $substr_chrs_c_2 == '\\\'': + case $substr_chrs_c_2 == '\\\\': + case $substr_chrs_c_2 == '\\/': + if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || + ($delim == "'" && $substr_chrs_c_2 != '\\"')) { + $utf8 .= $chrs[++$c]; + } + break; + + case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): + // single, escaped unicode character + $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) + . chr(hexdec(substr($chrs, ($c + 4), 2))); + $utf8 .= $this->utf162utf8($utf16); + $c += 5; + break; + + case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): + $utf8 .= $chrs[$c]; + break; + + case ($ord_chrs_c & 0xE0) == 0xC0: + // characters U-00000080 - U-000007FF, mask 110XXXXX + //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 2); + ++$c; + break; + + case ($ord_chrs_c & 0xF0) == 0xE0: + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 3); + $c += 2; + break; + + case ($ord_chrs_c & 0xF8) == 0xF0: + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 4); + $c += 3; + break; + + case ($ord_chrs_c & 0xFC) == 0xF8: + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 5); + $c += 4; + break; + + case ($ord_chrs_c & 0xFE) == 0xFC: + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 6); + $c += 5; + break; + + } + + } + + return $utf8; + + } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { + // array, or object notation + + if ($str[0] == '[') { + $stk = array(SERVICES_JSON_IN_ARR); + $arr = array(); + } else { + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = array(); + } else { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = new stdClass(); + } + } + + array_push($stk, array('what' => SERVICES_JSON_SLICE, + 'where' => 0, + 'delim' => false)); + + $chrs = substr($str, 1, -1); + $chrs = $this->reduce_string($chrs); + + if ($chrs == '') { + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } else { + return $obj; + + } + } + + //print("\nparsing {$chrs}\n"); + + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c <= $strlen_chrs; ++$c) { + + $top = end($stk); + $substr_chrs_c_2 = substr($chrs, $c, 2); + + if (($c == $strlen_chrs) || (($chrs[$c] == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { + // found a comma that is not inside a string, array, etc., + // OR we've reached the end of the character list + $slice = substr($chrs, $top['where'], ($c - $top['where'])); + array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); + //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + // we are in an array, so just push an element onto the stack + array_push($arr, $this->decode($slice)); + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + // we are in an object, so figure + // out the property name and set an + // element in an associative array, + // for now + $parts = array(); + + if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // "name":value pair + $key = $this->decode($parts[1]); + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // name:value pair, where name is unquoted + $key = $parts[1]; + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } + + } + + } elseif ((($chrs[$c] == '"') || ($chrs[$c] == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { + // found a quote, and we are not inside a string + array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs[$c])); + //print("Found start of string at {$c}\n"); + + } elseif (($chrs[$c] == $top['delim']) && + ($top['what'] == SERVICES_JSON_IN_STR) && + ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { + // found a quote, we're in a string, and it's not escaped + // we know that it's not escaped becase there is _not_ an + // odd number of backslashes at the end of the string so far + array_pop($stk); + //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); + + } elseif (($chrs[$c] == '[') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-bracket, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); + //print("Found start of array at {$c}\n"); + + } elseif (($chrs[$c] == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { + // found a right-bracket, and we're in an array + array_pop($stk); + //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($chrs[$c] == '{') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-brace, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); + //print("Found start of object at {$c}\n"); + + } elseif (($chrs[$c] == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { + // found a right-brace, and we're in an object + array_pop($stk); + //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($substr_chrs_c_2 == '/*') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a comment start, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); + $c++; + //print("Found start of comment at {$c}\n"); + + } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { + // found a comment end, and we're in one now + array_pop($stk); + $c++; + + for ($i = $top['where']; $i <= $c; ++$i) + $chrs = substr_replace($chrs, ' ', $i, 1); + + //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } + + } + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + return $obj; + + } + + } + } + } + + function isError($data, $code = null) + { + if (is_object($data) && (get_class($data) == 'services_json_error' || + is_subclass_of($data, 'services_json_error'))) { + return true; + } + + return false; + } + } +} + +if (!class_exists('Services_JSON_Error')) { + class Services_JSON_Error + { + function __construct($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + + } + } +} + +?> diff --git a/vendor/campaignmonitor/createsend-php/class/transport.php b/vendor/campaignmonitor/createsend-php/class/transport.php new file mode 100644 index 00000000..067aee2c --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/class/transport.php @@ -0,0 +1,352 @@ +log_message('No transport is available', __FUNCTION__, CS_REST_LOG_ERROR); + trigger_error('No transport is available.'. + ($requires_ssl ? ' Try using non-secure (http) mode or ' : ' Please '). + 'ensure the cURL extension is loaded', E_USER_ERROR); + } + } +} + +if(!function_exists("CS_REST_TRANSPORT_can_use_raw_socket")) { + function CS_REST_TRANSPORT_can_use_raw_socket($requires_ssl) { + if(function_exists('fsockopen')) { + if($requires_ssl) { + return extension_loaded('openssl'); + } + + return true; + } + + return false; + } +} + +if (!class_exists('CS_REST_BaseTransport')) { + class CS_REST_BaseTransport { + + var $_log; + + function __construct($log) { + $this->_log = $log; + } + + function split_and_inflate($response, $may_be_compressed) { + $ra = explode("\r\n\r\n", $response); + + $result = array_pop($ra); + $headers = array_pop($ra); + + if($may_be_compressed && preg_match('/^Content-Encoding:\s+gzip\s+$/im', $headers)) { + $original_length = strlen($response); + $result = gzinflate(substr($result, 10, -8)); + + $this->_log->log_message('Inflated gzipped response: '.$original_length.' bytes ->'. + strlen($result).' bytes', get_class(), CS_REST_LOG_VERBOSE); + } + + return array($headers, $result); + } + + } +} +/** + * Provide HTTP request functionality via cURL extensions + * + * @author tobyb + * @since 1.0 + */ +if (!class_exists('CS_REST_CurlTransport')) { + class CS_REST_CurlTransport extends CS_REST_BaseTransport { + + var $_curl_zlib; + + function __construct($log) { + parent::__construct($log); + + $curl_version = curl_version(); + $this->_curl_zlib = isset($curl_version['libz_version']); + } + + /** + * @return string The type of transport used + */ + function get_type() { + return 'cURL'; + } + + function make_call($call_options) { + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $call_options['route']); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, true); + $headers = array(); + $headers[] = 'Content-Type: '.$call_options['contentType']; + + + if (array_key_exists('authdetails', $call_options) && + isset($call_options['authdetails'])) { + if (array_key_exists('username', $call_options['authdetails']) && + array_key_exists('password', $call_options['authdetails'])) { + # Authenticating using basic auth for retrieving user's API key. + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $call_options['authdetails']['username'].':'.$call_options['authdetails']['password']); + } elseif (array_key_exists('access_token', $call_options['authdetails'])) { + # Authenticating using OAuth. + $access_token = $call_options['authdetails']['access_token']; + $headers[] = 'Authorization: Bearer '.$access_token; + } elseif (array_key_exists('api_key', $call_options['authdetails'])) { + # Authenticating using an API key. + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + $api_key = $call_options['authdetails']['api_key']; + curl_setopt($ch, CURLOPT_USERPWD, $api_key.':nopass'); + } + } + + curl_setopt($ch, CURLOPT_USERAGENT, $call_options['userAgent']); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, CS_REST_SOCKET_TIMEOUT); + curl_setopt($ch, CURLOPT_TIMEOUT, CS_REST_CALL_TIMEOUT); + + $inflate_response = false; + if($this->_curl_zlib) { + $this->_log->log_message('curl+zlib support available. Requesting gzipped response.', + get_class($this), CS_REST_LOG_VERBOSE); + curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); + } else if(function_exists('gzinflate')) { + $headers[] = 'Accept-Encoding: gzip'; + $inflate_response = true; + } + + if($call_options['protocol'] === 'https') { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + + if(strlen(ini_get('curl.cainfo')) === 0) { + curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__).'/cacert.pem'); + } + } + + switch($call_options['method']) { + case CS_REST_PUT: + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, CS_REST_PUT); + $headers[] = 'Content-Length: '.strlen($call_options['data']); + curl_setopt($ch, CURLOPT_POSTFIELDS, $call_options['data']); + break; + case CS_REST_POST: + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, isset($call_options['data']) ? $call_options['data'] : ''); + break; + case CS_REST_DELETE: + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, CS_REST_DELETE); + break; + } + + if(count($headers) > 0) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + } + + $response = curl_exec($ch); + + if(!$response && $response !== '') { + $this->_log->log_message('Error making request with curl_error: '.curl_errno($ch), + get_class($this), CS_REST_LOG_ERROR); + + require_once dirname(__FILE__).'/exceptions.php'; + throw new CurlException(curl_error($ch), curl_errno($ch)); + } + + list( $headers, $result ) = $this->split_and_inflate($response, $inflate_response); + + $this->_log->log_message('API Call Info for '.$call_options['method'].' '. + curl_getinfo($ch, CURLINFO_EFFECTIVE_URL).': '.curl_getinfo($ch, CURLINFO_SIZE_UPLOAD). + ' bytes uploaded. '.curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD).' bytes downloaded'. + ' Total time (seconds): '.curl_getinfo($ch, CURLINFO_TOTAL_TIME), + get_class($this), CS_REST_LOG_VERBOSE); + + $result = array( + 'code' => curl_getinfo($ch, CURLINFO_HTTP_CODE), + 'response' => $result + ); + + curl_close($ch); + + return $result; + } + } +} + +if (!class_exists('CS_REST_SocketWrapper')) { + class CS_REST_SocketWrapper { + var $socket; + + function open($domain, $port) { + $this->socket = fsockopen($domain, $port, $errno, $errstr, CS_REST_SOCKET_TIMEOUT); + + if(!$this->socket) { + die('Error making request with '.$errno.': '.$errstr); + return false; + } else if(function_exists('stream_set_timeout')) { + stream_set_timeout($this->socket, CS_REST_SOCKET_TIMEOUT); + } + + return true; + } + + function write($data) { + fwrite($this->socket, $data); + } + + function read() { + ob_start(); + fpassthru($this->socket); + + return ob_get_clean(); + } + + function close() { + fclose($this->socket); + } + } +} + +if (!class_exists('CS_REST_SocketTransport')) { + class CS_REST_SocketTransport extends CS_REST_BaseTransport { + + var $_socket_wrapper; + + function __construct($log, $socket_wrapper = NULL) { + parent::__construct($log); + + if(is_null($socket_wrapper)) { + $socket_wrapper = new CS_REST_SocketWrapper(); + } + + $this->_socket_wrapper = $socket_wrapper; + } + + /** + * @return string The type of transport used + */ + function get_type() { + return 'Socket'; + } + + function make_call($call_options) { + $start_host = strpos($call_options['route'], $call_options['host']); + $host_len = strlen($call_options['host']); + + $domain = substr($call_options['route'], $start_host, $host_len); + $host = $domain; + $path = substr($call_options['route'], $start_host + $host_len); + $protocol = substr($call_options['route'], 0, $start_host); + $port = 80; + + $this->_log->log_message('Creating socket to '.$domain.' over '.$protocol.' for request to '.$path, + get_class($this), CS_REST_LOG_VERBOSE); + + if($protocol === 'https://') { + $domain = 'ssl://'.$domain; + $port = 443; + } + + if($this->_socket_wrapper->open($domain, $port)) { + $inflate_response = function_exists('gzinflate'); + + $request = $this->_build_request($call_options, $host, $path, $inflate_response); + $this->_log->log_message('Sending
'.$request.'
down the socket', + get_class($this), CS_REST_LOG_VERBOSE); + + $this->_socket_wrapper->write($request); + $response = $this->_socket_wrapper->read(); + $this->_socket_wrapper->close(); + + $this->_log->log_message('API Call Info for '.$call_options['method'].' '. + $call_options['route'].': '.strlen($request). + ' bytes uploaded. '.strlen($response).' bytes downloaded', + get_class($this), CS_REST_LOG_VERBOSE); + + list( $headers, $result ) = $this->split_and_inflate($response, $inflate_response); + + $this->_log->log_message('Received headers
'.$headers.'
', + get_class($this), CS_REST_LOG_VERBOSE); + + return array( + 'code' => $this->_get_status_code($headers), + 'response' => trim($result) + ); + } + } + + function _get_status_code($headers) { + if (preg_match('%^\s*HTTP/1\.1 (?P\d{3})%', $headers, $regs)) { + $this->_log->log_message('Got HTTP Status Code: '.$regs['code'], + get_class($this), CS_REST_LOG_VERBOSE); + return $regs['code']; + } + + $this->_log->log_message('Failed to get HTTP status code from request headers
'.$headers.'
', + get_class($this), CS_REST_LOG_ERROR); + trigger_error('Failed to get HTTP status code from request', E_USER_ERROR); + } + + function _build_request($call_options, $host, $path, $accept_gzip) { + $request_auth_details = ''; + + if (array_key_exists('authdetails', $call_options)) { + if (array_key_exists('username', $call_options['authdetails']) && + array_key_exists('password', $call_options['authdetails'])) { + # Authenticating using basic auth for retrieving user's API key. + $request_auth_details .= 'Authorization: Basic '.base64_encode($call_options['authdetails']['username'].':'.$call_options['authdetails']['password'])."\n"; + } elseif (array_key_exists('access_token', $call_options['authdetails'])) { + # Authenticating using OAuth. + $access_token = $call_options['authdetails']['access_token']; + $request_auth_details .= 'Authorization: Bearer '.$access_token."\n"; + } elseif (array_key_exists('api_key', $call_options['authdetails'])) { + # Authenticating using an API key. + $api_key = $call_options['authdetails']['api_key']; + $request_auth_details .= 'Authorization: Basic '.base64_encode($api_key.':nopass')."\n"; + } + } + + $request = + $call_options['method'].' '.$path." HTTP/1.1\n". + 'Host: '.$host."\n". + $request_auth_details. + 'User-Agent: '.$call_options['userAgent']."\n". + "Connection: Close\n". + 'Content-Type: '.$call_options['contentType']."\n"; + + if($accept_gzip) { + $request .= + "Accept-Encoding: gzip\n"; + } + + if(isset($call_options['data'])) { + $request .= + 'Content-Length: '.strlen($call_options['data'])."\n\n". + $call_options['data']; + } + + return $request."\n\n"; + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/composer.json b/vendor/campaignmonitor/createsend-php/composer.json new file mode 100644 index 00000000..f959c3d6 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/composer.json @@ -0,0 +1,40 @@ +{ + "name": "campaignmonitor/createsend-php", + "type": "library", + "description": "A php library which implements the complete functionality of the Campaign Monitor API.", + "keywords": ["campaign", "monitor", "api"], + "homepage": "http://campaignmonitor.github.io/createsend-php/", + "license": "MIT", + "authors": [ + { + "name": "Toby Brain", + "email": "tobio85@gmail.com", + "role": "Developer" + } + ], + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "simpletest/simpletest": "1.2.0" + }, + "autoload": { + "classmap": [ + "csrest_administrators.php", + "csrest_campaigns.php", + "csrest_clients.php", + "csrest_general.php", + "csrest_events.php", + "csrest_lists.php", + "csrest_people.php", + "csrest_segments.php", + "csrest_subscribers.php", + "csrest_templates.php", + "csrest_transactional_classicemail.php", + "csrest_transactional_smartemail.php", + "csrest_transactional_timeline.php", + "csrest_journeys.php", + "csrest_journey_emails.php" + ] + } +} diff --git a/vendor/campaignmonitor/createsend-php/csrest_administrators.php b/vendor/campaignmonitor/createsend-php/csrest_administrators.php new file mode 100644 index 00000000..dfee6b34 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_administrators.php @@ -0,0 +1,110 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->_admins_base_route = $this->_base_route.'admins'; + } + + /** + * Adds a new administrator to the current account + * @param array $admin The administrator details to use during creation. + * This array should be of the form + * array ( + * 'EmailAddress' => The new administrator email address + * 'Name' => The name of the new administrator + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function add($admin) { + return $this->post_request($this->_admins_base_route.'.json', $admin); + } + + /** + * Updates details for an existing administrator associated with the current account + * @param string $email The email address of the administrator to be updated + * @param array $admin The updated administrator details to use for the update. + * This array should be of the form + * array ( + * 'EmailAddress' => The new email address + * 'Name' => The updated name of the administrator + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update($email, $admin) { + return $this->put_request($this->_admins_base_route.'.json?email='.urlencode($email), $admin); + } + + /** + * Gets the details for a specific administrator + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'EmailAddress' => The email address of the administrator + * 'Name' => The name of the administrator + * 'Status' => The status of the administrator + * ) + * } + */ + function get($email) { + return $this->get_request($this->_admins_base_route.'.json?email='.urlencode($email)); + } + + + /** + * deletes the given administrator from the current account + * @param string $email The email address of the administrator to delete + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete($email) { + return $this->delete_request($this->_admins_base_route.'.json?email='.urlencode($email)); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_campaigns.php b/vendor/campaignmonitor/createsend-php/csrest_campaigns.php new file mode 100644 index 00000000..fdab3308 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_campaigns.php @@ -0,0 +1,442 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $campaign_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_campaign_id($campaign_id); + } + + /** + * Change the campaign id used for calls after construction + * @param $campaign_id + * @access public + */ + function set_campaign_id($campaign_id) { + $this->_campaigns_base_route = $this->_base_route.'campaigns/'.$campaign_id.'/'; + } + + /** + * Creates a new campaign based on the provided campaign info. + * At least on of the ListIDs and Segments parameters must be provided + * @param string $client_id The client to create the campaign for + * @param array $campaign_info The campaign information to use during creation. + * This array should be of the form + * array( + * 'Subject' => string required The campaign subject + * 'Name' => string required The campaign name + * 'FromName' => string required The From name for the campaign + * 'FromEmail' => string required The From address for the campaign + * 'ReplyTo' => string required The Reply-To address for the campaign + * 'HtmlUrl' => string required A url to download the campaign HTML from + * 'TextUrl' => string optional A url to download the campaign + * text version from. If not provided, text content will be + * automatically generated from HTML content. + * 'ListIDs' => array optional An array of list ids to send the campaign to + * 'SegmentIDs' => array optional An array of segment ids to send the campaign to. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created campaign + */ + function create($client_id, $campaign_info) { + return $this->post_request($this->_base_route.'campaigns/'.$client_id.'.json', $campaign_info); + } + + /** + * Creates a new campaign from a template based on the info provided. + * At least on of the ListIDs and Segments parameters must be provided + * @param string $client_id The client to create the campaign for + * @param array $campaign_info The campaign information to use during creation. + * This array should be of the form + * array( + * 'Subject' => string required The campaign subject + * 'Name' => string required The campaign name + * 'FromName' => string required The From name for the campaign + * 'FromEmail' => string required The From address for the campaign + * 'ReplyTo' => string required The Reply-To address for the campaign + * 'ListIDs' => array optional An array of list ids to send the campaign to + * 'SegmentIDs' => array optional An array of segment ids to send the campaign to + * 'TemplateID' => string required The ID of the template to use + * 'TemplateContent' => array required The content which will be used to fill the editable areas of the template + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created campaign + */ + function create_from_template($client_id, $campaign_info) { + return $this->post_request($this->_base_route.'campaigns/'.$client_id.'/fromtemplate.json', $campaign_info); + } + + /** + * Sends a preview of an existing campaign to the specified recipients. + * @param array $recipients The recipients to send the preview to. + * @param string $personalize How to personalize the campaign content. Valid options are: + * 'Random': Choose a random campaign recipient and use their personalisation data + * 'Fallback': Use the fallback terms specified in the campaign content + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function send_preview($recipients, $personalize = 'Random') { + $preview_data = array( + 'PreviewRecipients' => $recipients, + 'Personalize' => $personalize + ); + + return $this->post_request($this->_campaigns_base_route.'sendpreview.json', $preview_data); + } + + /** + * Sends an existing campaign based on the scheduling information provided + * @param array $schedule The campaign scheduling information. + * This array should be of the form + * array ( + * 'ConfirmationEmail' => string required The email address to send a confirmation email to, + * 'SendDate' => string required The date to send the campaign or 'immediately'. + * The date should be in the format 'y-M-d' + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function send($schedule) { + return $this->post_request($this->_campaigns_base_route.'send.json', $schedule); + } + + /** + * Unschedules the campaign, moving it back into the drafts. If the campaign has been sent or is + * in the process of sending, this api request will fail. + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function unschedule() { + return $this->post_request($this->_campaigns_base_route.'unschedule.json', NULL); + } + + /** + * Deletes an existing campaign from the system + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete() { + return $this->delete_request(trim($this->_campaigns_base_route, '/').'.json'); + } + + /** + * Gets all email addresses on the current clients suppression list + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'LIST') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The suppressed email address + * 'ListID' => The ID of the list this subscriber comes from + * } + * ) + * } + */ + function get_recipients($page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_campaigns_base_route.'recipients.json', $page_number, + $page_size, $order_field, $order_direction); + } + + /** + * Gets all bounces recorded for a campaign + * @param string $since The date to start getting bounces from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'LIST', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email that bounced + * 'ListID' => The ID of the list the subscriber was on + * 'BounceType' => The type of bounce + * 'Date' => The date the bounce message was received + * 'Reason' => The reason for the bounce + * } + * ) + * } + * ) + */ + function get_bounces($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_campaigns_base_route.'bounces.json?date='.urlencode($since), + $page_number, $page_size, $order_field, $order_direction); + } + + /** + * Gets the lists a campaign was sent to + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'Lists' => array( + * { + * 'ListID' => The list id + * 'Name' => The list name + * } + * ), + * 'Segments' => array( + * { + * 'ListID' => The list id of the segment + * 'SegmentID' => The id of the segment + * 'Title' => The title of the segment + * } + * ) + * } + */ + function get_lists_and_segments() { + return $this->get_request($this->_campaigns_base_route.'listsandsegments.json'); + } + + /** + * Gets a summary of all campaign reporting statistics + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'Name' => The name of the campaign + * 'Recipients' => The total recipients of the campaign + * 'TotalOpened' => The total number of opens recorded + * 'Clicks' => The total number of recorded clicks + * 'Unsubscribed' => The number of recipients who unsubscribed + * 'Bounced' => The number of recipients who bounced + * 'UniqueOpened' => The number of recipients who opened + * 'WebVersionURL' => The url of the web version of the campaign + * 'WebVersionTextURL' => The url of the web version of the text version of the campaign + * 'WorldviewURL' => The public Worldview URL for the campaign + * 'Forwards' => The number of times the campaign has been forwarded to a friend + * 'Likes' => The number of times the campaign has been 'liked' on Facebook + * 'Mentions' => The number of times the campaign has been tweeted about + * 'SpamComplaints' => The number of recipients who marked the campaign as spam + * } + */ + function get_summary() { + return $this->get_request($this->_campaigns_base_route.'summary.json'); + } + + /** + * Gets the email clients that subscribers used to open the campaign + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * Client => The email client name + * Version => The email client version + * Percentage => The percentage of subscribers who used this email client + * Subscribers => The actual number of subscribers who used this email client + * } + * ) + */ + function get_email_client_usage() { + return $this->get_request($this->_campaigns_base_route.'emailclientusage.json'); + } + + /** + * Gets all opens recorded for a campaign since the provided date + * @param string $since The date to start getting opens from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'LIST', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who opened + * 'ListID' => The list id of the list containing the subscriber + * 'Date' => The date of the open + * 'IPAddress' => The ip address where the open originated + * 'Latitude' => The geocoded latitude from the IP address + * 'Longitude' => The geocoded longitude from the IP address + * 'City' => The geocoded city from the IP address + * 'Region' => The geocoded region from the IP address + * 'CountryCode' => The geocoded two letter country code from the IP address + * 'CountryName' => The geocoded full country name from the IP address + * } + * ) + * } + */ + function get_opens($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_campaigns_base_route.'opens.json?date='.urlencode($since), + $page_number, $page_size, $order_field, $order_direction); + } + + /** + * Gets all clicks recorded for a campaign since the provided date + * @param string $since The date to start getting clicks from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'LIST', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who clicked + * 'ListID' => The list id of the list containing the subscriber + * 'Date' => The date of the click + * 'IPAddress' => The ip address where the click originated + * 'URL' => The url that the subscriber clicked on + * 'Latitude' => The geocoded latitude from the IP address + * 'Longitude' => The geocoded longitude from the IP address + * 'City' => The geocoded city from the IP address + * 'Region' => The geocoded region from the IP address + * 'CountryCode' => The geocoded two letter country code from the IP address + * 'CountryName' => The geocoded full country name from the IP address + * } + * ) + * } + */ + function get_clicks($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_campaigns_base_route.'clicks.json?date='.urlencode($since), + $page_number, $page_size, $order_field, $order_direction); + } + + /** + * Gets all unsubscribes recorded for a campaign since the provided date + * @param string $since The date to start getting unsubscribes from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'LIST', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who unsubscribed + * 'ListID' => The list id of the list containing the subscriber + * 'Date' => The date of the unsubscribe + * 'IPAddress' => The ip address where the unsubscribe originated + * } + * ) + * } + */ + function get_unsubscribes($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_campaigns_base_route.'unsubscribes.json?date='.urlencode($since), + $page_number, $page_size, $order_field, $order_direction); + } + + /** + * Gets all spam complaints recorded for a campaign since the provided date + * @param string $since The date to start getting spam complaints from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'LIST', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who unsubscribed + * 'ListID' => The list id of the list containing the subscriber + * 'Date' => The date of the unsubscribe + * } + * ) + * } + */ + function get_spam($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_campaigns_base_route.'spam.json?date='.urlencode($since), + $page_number, $page_size, $order_field, $order_direction); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_clients.php b/vendor/campaignmonitor/createsend-php/csrest_clients.php new file mode 100644 index 00000000..4db71266 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_clients.php @@ -0,0 +1,519 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct( + $client_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_client_id($client_id); + } + + /** + * Change the client id used for calls after construction + * @param $client_id + * @access public + */ + function set_client_id($client_id) { + $this->_clients_base_route = $this->_base_route.'clients/'.$client_id.'/'; + } + + /** + * Gets a list of sent campaigns for the current client + * @param string|array $tags The array or comma separated string of tags to filter by + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param string $sent_from_date Only include campaigns after this date, in the format YYYY-MM-DD + * @param string $sent_to_date Only include campaigns before this date, in the format YYYY-MM-DD + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'WebVersionURL' => The web version url of the campaign + * 'WebVersionTextURL' => The web version url of the text version of the campaign + * 'CampaignID' => The id of the campaign + * 'Subject' => The campaign subject + * 'Name' => The name of the campaign + * 'FromName' => The from name for the campaign + * 'FromEmail' => The from email address for the campaign + * 'ReplyTo' => The reply to email address for the campaign + * 'SentDate' => The sent data of the campaign + * 'TotalRecipients' => The number of recipients of the campaign + * 'Tags' => An array of the tags associated with the campaign + * } + * ) + * } + */ + function get_campaigns($tags = NULL, $page_number = NULL, $page_size = NULL, $order_direction = NULL, $sent_from_date = NULL, $sent_to_date = NULL) { + if(!is_null($tags)) { + $query['tags'] = is_array($tags) + ? implode(',', $tags) + : $tags; + } + + if(!is_null($sent_from_date)) { + $query['sentFromDate'] = $sent_from_date; + } + + if(!is_null($sent_to_date)) { + $query['sentToDate'] = $sent_to_date; + } + + $query = !empty($query) ? '?'.http_build_query($query) : ''; + + return $this->get_request_paged($this->_clients_base_route.'campaigns.json'.$query, + $page_number, $page_size, NULL, $order_direction); + } + + /** + * Gets a list of scheduled campaigns for the current client + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'CampaignID' => The id of the campaign + * 'Name' => The name of the campaign + * 'Subject' => The subject of the campaign + * 'FromName' => The from name for the campaign + * 'FromEmail' => The from email address for the campaign + * 'ReplyTo' => The reply to email address for the campaign + * 'DateCreated' => The date the campaign was created + * 'PreviewURL' => The preview url of the campaign + * 'PreviewTextURL' => The preview url of the text version of the campaign + * 'DateScheduled' => The date the campaign is scheduled to be sent + * 'ScheduledTimeZone' => The time zone in which the campaign is scheduled to be sent at 'DateScheduled' + * 'Tags' => An array of the tags associated with the campaign + * } + * ) + */ + function get_scheduled() { + return $this->get_request($this->_clients_base_route.'scheduled.json'); + } + + /** + * Gets a list of draft campaigns for the current client + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'CampaignID' => The id of the campaign + * 'Name' => The name of the campaign + * 'Subject' => The subject of the campaign + * 'FromName' => The from name for the campaign + * 'FromEmail' => The from email address for the campaign + * 'ReplyTo' => The reply to email address for the campaign + * 'DateCreated' => The date the campaign was created + * 'PreviewURL' => The preview url of the draft campaign + * 'PreviewTextURL' => The preview url of the text version of the campaign + * 'Tags' => An array of the tags associated with the campaign + * } + * ) + */ + function get_drafts() { + return $this->get_request($this->_clients_base_route.'drafts.json'); + } + + /** + * Gets all subscriber lists the current client has created + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'ListID' => The id of the list + * 'Name' => The name of the list + * } + * ) + */ + function get_lists() { + return $this->get_request($this->_clients_base_route.'lists.json'); + } + + /** + * Gets the lists across a client to which a subscriber with a particular + * email address belongs. + * @param string $email_address Subscriber's email address. + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'ListID' => The id of the list + * 'ListName' => The name of the list + * 'SubscriberState' => The state of the subscriber in the list + * 'DateSubscriberAdded' => The date the subscriber was added + * } + * ) + */ + function get_lists_for_email($email_address) { + return $this->get_request($this->_clients_base_route . + 'listsforemail.json?email='.urlencode($email_address)); + } + + /** + * Gets all list segments the current client has created + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'ListID' => The id of the list owning this segment + * 'SegmentID' => The id of this segment + * 'Title' => The title of this segment + * } + * ) + */ + function get_segments() { + return $this->get_request($this->_clients_base_route.'segments.json'); + } + + /** + * Gets all email addresses on the current client's suppression list + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The suppressed email address + * 'Date' => The date the email was suppressed + * 'State' => The state of the suppressed email + * } + * ) + * } + */ + function get_suppressionlist($page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + + return $this->get_request_paged($this->_clients_base_route.'suppressionlist.json', + $page_number, $page_size, $order_field, $order_direction, NULL, '?'); + } + + /** + * Adds email addresses to a client's suppression list. + * @param array $emails The email addresses to suppress. + * @access public + */ + function suppress($emails) { + $data = array('EmailAddresses' => $emails); + return $this->post_request($this->_clients_base_route.'suppress.json', $data); + } + + /** + * Unsuppresses an email address by removing it from the the client's + * suppression list. + * @param string $email The email address to be unsuppressed + * @access public + */ + function unsuppress($email) { + return $this->put_request($this->_clients_base_route.'unsuppress.json?email=' . urlencode($email), ''); + } + + /** + * Gets all templates the current client has access to + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'TemplateID' => The id of the template + * 'Name' => The name of the template + * 'PreviewURL' => The url to preview the template from + * 'ScreenshotURL' => The url of the template screenshot + * } + * ) + */ + function get_templates() { + return $this->get_request($this->_clients_base_route.'templates.json'); + } + + /** + * Get all the tags the current client has access to + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'Name' => The name of the tag + * 'NumberOfCampaigns' => The number of campaigns the tag is used on + * } + * ) + */ + function get_tags() { + return $this->get_request($this->_clients_base_route.'tags.json'); + } + + /** + * Gets all templates the current client has access to + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ApiKey' => The clients API Key, THIS IS NOT THE CLIENT ID + * 'BasicDetails' => + * { + * 'ClientID' => The id of the client + * 'CompanyName' => The company name of the client + * 'ContactName' => The contact name of the client + * 'EmailAddress' => The clients contact email address + * 'Country' => The clients country + * 'TimeZone' => The clients timezone + * } + * 'BillingDetails' => + * If on monthly billing + * { + * 'CurrentTier' => The current monthly tier the client sits in + * 'CurrentMonthlyRate' => The current pricing rate the client pays per month + * 'MarkupPercentage' => The percentage markup applied to the base rates + * 'Currency' => The currency paid in + * 'ClientPays' => Whether the client pays for themselves, + * 'MonthlyScheme' => Basic or Unlimited + * } + * If paying per campaign + * { + * 'CanPurchaseCredits' => Whether the client can purchase credits + * 'Credits' => The number of credits belonging to the client + * 'BaseDeliveryFee' => The base fee payable per campaign + * 'BaseRatePerRecipient' => The base fee payable per campaign recipient + * 'BaseDesignSpamTestRate' => The base fee payable per design and spam test + * 'MarkupOnDelivery' => The markup applied per campaign + * 'MarkupPerRecipient' => The markup applied per campaign recipient + * 'MarkupOnDesignSpamTest' => The markup applied per design and spam test + * 'Currency' => The currency fees are paid in + * 'ClientPays' => Whether client client pays for themselves + * } + * } + */ + function get() { + return $this->get_request(trim($this->_clients_base_route, '/').'.json'); + } + + /** + * Deletes an existing client from the system + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete() { + return $this->delete_request(trim($this->_clients_base_route, '/').'.json'); + } + + /** + * Creates a new client based on the provided information + * @param array $client Basic information of the new client. + * This should be an array of the form + * array( + * 'CompanyName' => The company name of the client + * 'Country' => The clients country + * 'TimeZone' => The clients timezone + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created client + */ + function create($client) { + if(isset($client['ContactName'])) { + trigger_error('[DEPRECATION] Use Person->add to set name on a new person in a client. For now, we will create a default person with the name provided.', E_USER_NOTICE); + } + if(isset($client['EmailAddress'])) { + trigger_error('[DEPRECATION] Use Person->add to set email on a new person in a client. For now, we will create a default person with the email provided.', E_USER_NOTICE); + } + return $this->post_request($this->_base_route.'clients.json', $client); + } + + /** + * Updates the basic information for a client + * @param array $client_basics Basic information of the client. + * This should be an array of the form + * array( + * 'CompanyName' => The company name of the client + * 'Country' => The clients country + * 'TimeZone' => The clients timezone + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function set_basics($client_basics) { + if(isset($client['ContactName'])) { + trigger_error('[DEPRECATION] Use person->update to set name on a particular person in a client. For now, we will update the default person with the name provided.', E_USER_NOTICE); + } + if(isset($client['EmailAddress'])) { + trigger_error('[DEPRECATION] Use person->update to set email on a particular person in a client. For now, we will update the default person with the email address provided.', E_USER_NOTICE); + } + return $this->put_request($this->_clients_base_route.'setbasics.json', $client_basics); + } + + /** + * Updates the billing details of the current client, setting the client to the payg billing model + * For clients not set to pay themselves then all fields below ClientPays are ignored + * All Markup fields are optional + * @param array $client_billing Payg billing details of the client. + * This should be an array of the form + * array( + * 'Currency' => The currency fees are paid in + * 'ClientPays' => Whether client client pays for themselves + * 'MarkupPercentage' => Can be used to set the percentage markup for all unset fees + * 'CanPurchaseCredits' => Whether the client can purchase credits + * 'MarkupOnDelivery' => The markup applied per campaign + * 'MarkupPerRecipient' => The markup applied per campaign recipient + * 'MarkupOnDesignSpamTest' => The markup applied per design and spam test + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function set_payg_billing($client_billing) { + return $this->put_request($this->_clients_base_route.'setpaygbilling.json', $client_billing); + } + + /** + * Updates the billing details of the current client, setting the client to the monthly billing model + * For clients not set to pay themselves then the markup percentage field is ignored + * @param array $client_billing Payg billing details of the client. + * This should be an array of the form + * array( + * 'Currency' => The currency fees are paid in + * 'ClientPays' => Whether client client pays for themselves + * 'MarkupPercentage' => Sets the percentage markup used for all monthly tiers + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function set_monthly_billing($client_billing) { + return $this->put_request($this->_clients_base_route.'setmonthlybilling.json', $client_billing); + } + + /** + * Transfer credits to or from this client. + * + * @param array $transfer_data Details for the credit transfer. This array + * should be of the form: + * array( + * 'Credits' => An in representing the number of credits to transfer. + * This value may be either positive if you want to allocate credits + * from your account to the client, or negative if you want to + * deduct credits from the client back into your account. + * 'CanUseMyCreditsWhenTheyRunOut' => A boolean value which if set + * to true, will allow the client to continue sending using your + * credits or payment details once they run out of credits, and if + * set to false, will prevent the client from using your credits to + * continue sending until you allocate more credits to them. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object + * of the form: + * { + * 'AccountCredits' => Integer representing credits in your account now + * 'ClientCredits' => Integer representing credits in this client's + * account now + * } + */ + function transfer_credits($transfer_data) { + return $this->post_request($this->_clients_base_route.'credits.json', + $transfer_data); + } + + /** + * returns the people associated with this client. + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array({ + * 'EmailAddress' => the email address of the person + * 'Name' => the name of the person + * 'AccessLevel' => the access level of the person + * 'Status' => the status of the person + * }) + */ + function get_people() { + return $this->get_request($this->_clients_base_route.'people.json'); + } + + /** + * retrieves the email address of the primary contact for this client + * @return CS_REST_Wrapper_Result a successful response will be an array in the form: + * array('EmailAddress'=> email address of primary contact) + */ + function get_primary_contact() { + return $this->get_request($this->_clients_base_route.'primarycontact.json'); + } + + /** + * assigns the primary contact for this client to the person with the specified email address + * @param string $emailAddress the email address of the person designated to be the primary contact + * @return CS_REST_Wrapper_Result a successful response will be an array in the form: + * array('EmailAddress'=> email address of primary contact) + */ + function set_primary_contact($emailAddress) { + return $this->put_request($this->_clients_base_route.'primarycontact.json?email=' . urlencode($emailAddress), ''); + } + + + + /** + * Gets a list of journeys for the current client + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array({ + * 'ListID' => The id of the list + * 'JourneyID' => The id of the journey + * 'Name' => Name of the journey + * 'Status' => Status of the journey + * }) + */ + function get_journeys() { + return $this->get_request($this->_clients_base_route.'journeys.json'); + } + } +} diff --git a/vendor/campaignmonitor/createsend-php/csrest_events.php b/vendor/campaignmonitor/createsend-php/csrest_events.php new file mode 100644 index 00000000..4eb8f958 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_events.php @@ -0,0 +1,332 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $client_id string The client id to send event to + * @param $event_type string The event type we support - `custom`, `identify` and `shopify` + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $auth_details, + $client_id, + $event_type, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_client_id($client_id); + if (!isset($event_type)) { + trigger_error('$event_type should be one of \'custom\', \'identify\' or \'shopify\''); + } + $this->setEventType($event_type); + } + + /** + * Change the client id used for calls after construction + * @param $client_id + * @access public + */ + function set_client_id($client_id) { + if (!isset($client_id)) { + trigger_error('$client_id needs to be set'); + } + $this->_events_base_route = $this->_base_route.'events/'.$client_id.'/'; + $this->_client_id = $client_id; + } + + /** + * Set the type of event that we support: 'custom', 'identify' and 'shopify' + * @param $event_type string Event that we support: 'custom', 'identify' and 'shopify' + * @access private + */ + private function setEventType($event_type) { + if (!isset($event_type)) { + trigger_error('$event_type needs to be set'); + return new CS_REST_Wrapper_Result(null, 400); + } + + if (strcmp($event_type, "custom") !== 0 && + strcmp($event_type,"identify") !== 0 && + strcmp($event_type,"shopify") !== 0) { + trigger_error('$event_type needs to be one of \'custom\', \'identify\' or \'shopify\''); + $this->_invalid_event = true; + return new CS_REST_Wrapper_Result(null, 400); + } + $this->_event_type = $event_type; + } + + + /* + * Validate email address + * @param $email string email address + * @access private + */ + private function validateEmail($email) { + if (!isset($email)) { + trigger_error('$email needs to be set'); + return new CS_REST_Wrapper_Result(null, 400); + } + + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + trigger_error('$email needs to be a valid email address'); + return new CS_REST_Wrapper_Result(null, 400); + } + + return $email; + } + + /** + * Get the event type name + * @access public + */ + function getEventType() { + return $this->_event_type; + } + + /** + * Tracks an event + * @param string $email required email in the form "user@example.com" + * + * @param string $event_name. Name to group events by for reporting max length 1000 + * For example "Page View", "Order confirmation" + * + * @param array $data optional. Event payload. + * This should be an array, with details of the event + * array( + * 'RandomFieldObject' => array( + * 'Example'' => 'test' + * ), + * 'RandomFieldURL' => 'Example', + * 'RandomArray' => array(1,3,5,6,7), + * ) + * @param $anonymous_id string Anonymous ID to use for identify events + * @param $user_id string User ID to use for identify events + * @access public + * @return CS_REST_Wrapper_Result A successful response will include an Event ID. + * array( + * array( + * 'EventID' => 'string' + * ) + * ) + */ + function track($email, $event_name, $anonymous_id = NULL, $user_id = NULL, $data = NULL) + { + // Basic validation + if (!isset($event_name)) { + trigger_error('$event_name needs to be set'); + return new CS_REST_Wrapper_Result(null, 400); + } + if (strlen($event_name) > 1000) { + trigger_error('$event_name needs to be shorter, max length is 1000 bytes'); + return new CS_REST_Wrapper_Result(null, 400); + } + if (isset($data)) { + if (!is_array($data)) { + trigger_error('$data needs to be a valid array'); + return new CS_REST_Wrapper_Result(null, 400); + } + } + if (empty($data)) { + $data = NULL; + } + + if (strcmp($this->_event_type, "identify") === 0) { + return $this->sendIdentifyTrack($email, $event_name, $anonymous_id, $user_id, $data); + } elseif (strcmp($this->_event_type, "custom") === 0 || strcmp($this->_event_type, "shopify") === 0) { + return $this->sendNonIdentifyTrack($email, $event_name, $anonymous_id, $user_id, $data); + } + + trigger_error('event type is invalid. Supported - custom, identify or shopify'); + return new CS_REST_Wrapper_Result(null, 400); + } + + /* + * Send identify track event + * @param $email string email address + * @param $event_name string event name + * @param $anonymousId string anonymous id + * @param $userId string user id + * @param $data array event data + * @access private + */ + private function sendIdentifyTrack($email, $event_name, $anonymousId, $userId, $data) { + if (!isset($email)) { + trigger_error('email needs to be a set for identify event'); + return new CS_REST_Wrapper_Result(null, 400); + } + $minRequiredParam = 1; // anonymous id / user id + $paramPresent = 0; + if (isset($anonymousId)) { + $paramPresent += 1; + } + if (isset($userId)) { + $paramPresent += 1; + } + + if ($paramPresent < $minRequiredParam) { + trigger_error('at least one of: anonymous id, user id needs to be set and be a valid string for identify event'); + return new CS_REST_Wrapper_Result(null, 400); + } + + $this->_anonymous_id = $anonymousId; + $this->_email = $this->validateEmail($email); + $this->_user_id = $userId; + + $payload = array( + 'ContactID' => + array( + 'Email' => $this->_email, + 'AnonymousID' => $this->_anonymous_id, + 'UserID' => $this->_user_id, + ), + 'EventName' => $event_name, + 'Data' => $data + ); + return $this->sendTrack($payload); + } + + /* + * Send non-identify track event (custom or shopify) + * @param $email string email + * @param $event_name string event name + * @param $data array event data + */ + private function sendNonIdentifyTrack($email, $event_name, $anonymousId, $userId, $data) { + $paramPresent = 0; + if (isset($email)) { + $this->_email = $this->validateEmail($email); + $paramPresent += 1; + } else { + $this->_email = NULL; + } + $minRequiredParam = 1; // anonymous id / user id / email + if (isset($anonymousId)) { + $paramPresent += 1; + } + if (isset($userId)) { + $paramPresent += 1; + } + + if ($paramPresent < $minRequiredParam) { + trigger_error('at least one of: anonymous id, user id, email needs to be set and be a valid string for identify event'); + return new CS_REST_Wrapper_Result(null, 400); + } + + $this->_anonymous_id = $anonymousId; + $this->_user_id = $userId; + + $payload = array( + 'ContactID' => + array( + 'Email' => $this->_email, + 'AnonymousID' => $this->_anonymous_id, + 'UserID' => $this->_user_id + ), + 'EventName' => $event_name, + 'Data' => $data + ); + return $this->sendTrack($payload); + } + + /* + * Send track event payload + * @param $payload array Payload to send to track endpoint + * @access private + */ + private function sendTrack($payload) { + if ($this->_invalid_event) { + trigger_error('$event_type must be one of \'identify\', \'custom\' or \'shopify\''); + return new CS_REST_Wrapper_Result(null, 400); + } + // Basic validation before finally POST'ing + if (!isset($this->_base_route) || !isset($this->_event_type) || !isset($this->_client_id)) { + trigger_error('one of: $_base_route, $_event_type, $_client_id is missing during URL construction'); + return new CS_REST_Wrapper_Result(null, 400); + } + if (isset($payload) && is_array($payload)) { + $event_url = $this->_base_route . 'events/' . $this->_event_type . '/' . $this->_client_id . '/track'; + return $this->post_request($event_url, $payload); + } + trigger_error('$payload needs to be a valid array'); + return new CS_REST_Wrapper_Result(null, 400); + } + } +} + diff --git a/vendor/campaignmonitor/createsend-php/csrest_general.php b/vendor/campaignmonitor/createsend-php/csrest_general.php new file mode 100644 index 00000000..d69ae369 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_general.php @@ -0,0 +1,214 @@ + The access token to use for API calls + * 'expires_in' => The number of seconds until this access token expires + * 'refresh_token' => The refresh token to refresh the access token once it expires + * } + * @access public + **/ + public static function exchange_token( + $client_id, $client_secret, $redirect_uri, $code) { + + $body = "grant_type=authorization_code"; + $body .= "&client_id=".urlencode($client_id); + $body .= "&client_secret=".urlencode($client_secret); + $body .= "&redirect_uri=".urlencode($redirect_uri); + $body .= "&code=".urlencode($code); + + $options = array('contentType' => 'application/x-www-form-urlencoded'); + + $wrap = new CS_REST_Wrapper_Base( + NULL, 'https', CS_REST_LOG_NONE, CS_HOST, NULL, + new CS_REST_DoNothingSerialiser(), NULL); + + return $wrap->post_request(CS_OAUTH_TOKEN_URI, $body, $options); + } + + /** + * Constructor. + * @param $auth_details array Authentication details to use for API calls. + * This array must take one of the following forms: + * If using OAuth to authenticate: + * array( + * 'access_token' => 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function CS_REST_Wrapper_Base( + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + $this->CS_REST_Wrapper_Base($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + } + + /** + * Gets an array of valid timezones + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array(timezones) + */ + function get_timezones() { + return $this->get_request($this->_base_route.'timezones.json'); + } + + /** + * Gets the current date in your accounts timezone + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'SystemDate' => string The current system date in your accounts timezone + * } + */ + function get_systemdate() { + return $this->get_request($this->_base_route.'systemdate.json'); + } + + /** + * Gets an array of valid countries + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array(countries) + */ + function get_countries() { + return $this->get_request($this->_base_route.'countries.json'); + } + + /** + * Gets an array of clients + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'ClientID' => The clients API ID, + * 'Name' => The clients name + * } + * ) + */ + function get_clients() { + return $this->get_request($this->_base_route.'clients.json'); + } + + /** + * Gets your billing details. + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'Credits' => The number of credits belonging to the account + * } + */ + function get_billing_details() { + return $this->get_request($this->_base_route.'billingdetails.json'); + } + + /** + * Gets an array of administrators + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'EmailAddress' => The administrators email address + * 'Name' => The administrators name + * 'Status' => The administrators status + * } + * ) + */ + function get_administrators() { + return $this->get_request($this->_base_route.'admins.json'); + } + + /** + * Retrieves the email address of the primary contact for this account + * @return CS_REST_Wrapper_Result a successful response will be an array in the form: + * array('EmailAddress'=> email address of primary contact) + */ + function get_primary_contact() { + return $this->get_request($this->_base_route.'primarycontact.json'); + } + + /** + * Assigns the primary contact for this account to the administrator with the specified email address + * @param $emailAddress string The email address of the administrator designated to be the primary contact + * @return CS_REST_Wrapper_Result a successful response will be an array in the form: + * array('EmailAddress'=> email address of primary contact) + */ + function set_primary_contact($emailAddress) { + return $this->put_request($this->_base_route.'primarycontact.json?email=' . urlencode($emailAddress), ''); + } + + /** + * Get a URL which initiates a new external session for the user with the given email. + * Full details: http://www.campaignmonitor.com/api/account/#single_sign_on + * + * @param $session_options array Options for initiating the external login session. + * This should be an array of the form: + * array( + * 'Email' => 'The email address of the Campaign Monitor user for whom the login session should be created', + * 'Chrome' => 'Which 'chrome' to display - Must be either "all", "tabs", or "none"', + * 'Url' => 'The URL to display once logged in. e.g. "/subscribers/"', + * 'IntegratorID' => 'The Integrator ID. You need to contact Campaign Monitor support to get an Integrator ID.', + * 'ClientID' => 'The Client ID of the client which should be active once logged in to the Campaign Monitor account.' ) + * + * @return CS_REST_Wrapper_Result A successful response will be an array of the form: + * array('SessionUrl'=> 'https://external1.createsend.com/cd/create/ABCDEF12/DEADBEEF?url=FEEDDAD1') + */ + function external_session_url($session_options) { + return $this->put_request($this->_base_route.'externalsession.json', $session_options); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_journey_emails.php b/vendor/campaignmonitor/createsend-php/csrest_journey_emails.php new file mode 100644 index 00000000..05b257a7 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_journey_emails.php @@ -0,0 +1,253 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + + function __construct ( + $email_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_email_id($email_id); + } + + + /** + * Change the email id used for calls after construction + * @param $email_id + * @access public + */ + function set_email_id($email_id) { + $this->_journey_emails_base_route = $this->_base_route.'journeys/email/'.$email_id; + } + + + + /** + * Gets all email addresses from the journey email id specified + * @param string $since The date to start getting bounces from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field Not used + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'SentDate' => The date the subscriber was sent the mailing + * } + * ) + * } + */ + + function get_journey_recipients($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_journey_emails_base_route.'/recipients.json?date='.urlencode($since), $page_number, + $page_size, $order_field, $order_direction); + } + + + /** + * Gets all recipients from the journey email id specified + * @param string $since The date to start getting bounces from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field Not used + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who opened + * 'Date' => The date of the open + * 'IPAddress' => The ip address where the open originated + * 'Latitude' => The geocoded latitude from the IP address + * 'Longitude' => The geocoded longitude from the IP address + * 'City' => The geocoded city from the IP address + * 'Region' => The geocoded region from the IP address + * 'CountryCode' => The geocoded two letter country code from the IP address + * 'CountryName' => The geocoded full country name from the IP address + * } + * ) + * } + */ + + function get_journey_opens($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_journey_emails_base_route.'/opens.json?date='.urlencode($since), $page_number, + $page_size, $order_field, $order_direction); + } + + /** + * Gets all recipients who opened the journey email + * @param string $since The date to start getting bounces from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field Not used + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who clicked + * 'Date' => The date of the click + * 'URL' => The URL of the link that was clicked + * 'IPAddress' => The ip address where the click originated + * 'Latitude' => The geocoded latitude from the IP address + * 'Longitude' => The geocoded longitude from the IP address + * 'City' => The geocoded city from the IP address + * 'Region' => The geocoded region from the IP address + * 'CountryCode' => The geocoded two letter country code from the IP address + * 'CountryName' => The geocoded full country name from the IP address + * } + * ) + * } + */ + + function get_journey_clicks($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_journey_emails_base_route.'/clicks.json?date='.urlencode($since), $page_number, + $page_size, $order_field, $order_direction); + } + + /** + * Gets all recipients who unsubscribed from the journey email + * @param string $since The date to start getting bounces from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field Not used + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who unsubscribed + * 'Date' => The date of the unsubscribe + * 'IPAddress' => The ip address where the unsubscribe originated + * } + * ) + * } + */ + function get_journey_unsubscribes($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_journey_emails_base_route.'/unsubscribes.json?date='.urlencode($since), $page_number, + $page_size, $order_field, $order_direction); + } + + /** + * Gets all recipients who bounced from the journey email send + * @param string $since The date to start getting bounces from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field Not used + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber who unsubscribed + * 'BounceType' => The bounce type + * 'Date' => The date of the bounce + * 'Reason' => The reason for the bounce + * } + * ) + * } + */ + + function get_journey_bounces($since = '', $page_number = NULL, $page_size = NULL, $order_field = NULL, + $order_direction = NULL) { + return $this->get_request_paged($this->_journey_emails_base_route.'/bounces.json?date='.urlencode($since), $page_number, + $page_size, $order_field, $order_direction); + } + } + +} diff --git a/vendor/campaignmonitor/createsend-php/csrest_journeys.php b/vendor/campaignmonitor/createsend-php/csrest_journeys.php new file mode 100644 index 00000000..c1d0da5b --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_journeys.php @@ -0,0 +1,96 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + + function __construct ( + $journey_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_journey_id($journey_id); + } + + + /** + * Change the email id used for calls after construction + * @param $email_id + * @access public + */ + function set_journey_id($journey_id) { + $this->_journeys_base_route = $this->_base_route.'journeys/'.$journey_id; + } + + /** + * Gets the details of the current journey + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'JourneyID' => The journey id + * 'Name' => The name of the journey + * 'TriggerType' => The method in which the journey was triggered + * 'Status' => The status of the journey + * 'Emails' => array( + * { + * 'EmailID' => The ID of the email attached to the journey + * 'Name' => The name of the email attached to the journey + * 'Bounced' => The number of recipients who bounced + * 'Clicked' => The total number of recorded clicks + * 'Opened' => The total number of recorded opens + * 'Sent' => The total recipients of the journey email + * 'UniqueOpened' => The number of recipients who opened + * 'Unsubscribed' => The number of recipients who unsubscribed + * } + * ) + * + */ + + function get_journey_summary() { + return $this->get_request(trim($this->_journeys_base_route, '/').'.json'); + } + } + +} diff --git a/vendor/campaignmonitor/createsend-php/csrest_lists.php b/vendor/campaignmonitor/createsend-php/csrest_lists.php new file mode 100644 index 00000000..16f7bcd2 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_lists.php @@ -0,0 +1,599 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $list_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_list_id($list_id); + } + + /** + * Change the list id used for calls after construction + * @param $list_id + * @access public + */ + function set_list_id($list_id) { + $this->_lists_base_route = $this->_base_route.'lists/'.$list_id.'/'; + } + + /** + * Creates a new list based on the provided details. + * Both the UnsubscribePage and the ConfirmationSuccessPage parameters are optional + * @param string $client_id The client to create the campaign for + * @param array $list_details The list details to use during creation. + * This array should be of the form + * array( + * 'Title' => string The list title + * 'UnsubscribePage' => string The page to redirect subscribers to when they unsubscribe + * 'ConfirmedOptIn' => boolean Whether this list requires confirmation of subscription + * 'ConfirmationSuccessPage' => string The page to redirect subscribers to when + * they confirm their subscription + * 'UnsubscribeSetting' => string Unsubscribe setting must be + * CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS or + * CS_REST_LIST_UNSUBSCRIBE_SETTING_ONLY_THIS_LIST. + * See the documentation for details: http://www.campaignmonitor.com/api/lists/#creating_a_list + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created list + */ + function create($client_id, $list_details) { + return $this->post_request($this->_base_route.'lists/'.$client_id.'.json', $list_details); + } + + /** + * Updates the details of an existing list + * Both the UnsubscribePage and the ConfirmationSuccessPage parameters are optional + * @param string $client_id The client to create the campaign for + * @param array $list_details The list details to use during creation. + * This array should be of the form + * array( + * 'Title' => string The list title + * 'UnsubscribePage' => string The page to redirect subscribers to when they unsubscribe + * 'ConfirmedOptIn' => boolean Whether this list requires confirmation of subscription + * 'ConfirmationSuccessPage' => string The page to redirect subscribers to when + * they confirm their subscription + * 'UnsubscribeSetting' => string Unsubscribe setting must be + * CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS or + * CS_REST_LIST_UNSUBSCRIBE_SETTING_ONLY_THIS_LIST. + * See the documentation for details: http://www.campaignmonitor.com/api/lists/#updating_a_list + * 'AddUnsubscribesToSuppList' => boolean When UnsubscribeSetting + * is CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS, + * whether unsubscribes from this list should be added to the + * suppression list. + * 'ScrubActiveWithSuppList' => boolean When UnsubscribeSetting + * is CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS, + * whether active subscribers should be scrubbed against the + * suppression list. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update($list_details) { + return $this->put_request(trim($this->_lists_base_route, '/').'.json', $list_details); + } + + /** + * Creates a new custom field for the current list + * @param array $custom_field_details The details of the new custom field. + * This array should be of the form + * array( + * 'FieldName' => string The name of the new custom field + * 'DataType' => string The data type of the new custom field + * This should be one of + * CS_REST_CUSTOM_FIELD_TYPE_TEXT + * CS_REST_CUSTOM_FIELD_TYPE_NUMBER + * CS_REST_CUSTOM_FIELD_TYPE_MULTI_SELECTONE + * CS_REST_CUSTOM_FIELD_TYPE_MULTI_SELECTMANY + * CS_REST_CUSTOM_FIELD_TYPE_DATE + * CS_REST_CUSTOM_FIELD_TYPE_COUNTRY + * CS_REST_CUSTOM_FIELD_TYPE_USSTATE + * 'Options' => array Valid options for either + * Multi-Optioned field data type. + * 'VisibleInPreferenceCenter' => boolean representing whether or + * not the field should be visible in the subscriber preference + * center. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the + * personalisation tag of the newly created custom field + */ + function create_custom_field($custom_field_details) { + return $this->post_request($this->_lists_base_route.'customfields.json', $custom_field_details); + } + + /** + * Updates a custom field for the current list + * @param string $key The personalisation tag of the field to update + * @param array $custom_field_details The details of the new custom field. + * This array should be of the form + * array( + * 'FieldName' => string The new name for the field + * 'VisibleInPreferenceCenter' => boolean representing whether or + * not the field should be visible in the subscriber preference + * center. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the + * personalisation tag of the updated custom field + */ + function update_custom_field($key, $custom_field_details) { + return $this->put_request($this->_lists_base_route.'customfields/'.rawurlencode($key).'.json', + $custom_field_details); + } + + /** + * Updates the optios for the given multi-optioned custom field + * @param string $key The personalisation tag of the field to update + * @param array $new_options The set of options to add to the custom field + * @param boolean $keep_existing Whether to remove any existing options not contained in $new_options + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update_field_options($key, $new_options, $keep_existing) { + $options = array( + 'KeepExistingOptions' => $keep_existing, + 'Options' => $new_options + ); + + return $this->put_request($this->_lists_base_route.'customfields/'.rawurlencode($key).'/options.json', + $options); + } + + /** + * Deletes an existing list from the system + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete() { + return $this->delete_request(trim($this->_lists_base_route, '/').'.json'); + } + + /** + * Deletes an existing custom field from the system + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete_custom_field($key) { + return $this->delete_request($this->_lists_base_route.'customfields/'.rawurlencode($key).'.json'); + } + + /** + * Gets a list of all custom fields defined for the current list + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'FieldName' => The name of the custom field + * 'Key' => The personalisation tag of the custom field + * 'DataType' => The data type of the custom field + * 'FieldOptions' => Valid options for a multi-optioned custom field + * 'VisibleInPreferenceCenter' => Boolean representing whether or + * not the field is visible in the subscriber preference center + * } + * ) + */ + function get_custom_fields() { + return $this->get_request($this->_lists_base_route.'customfields.json'); + } + + /** + * Gets a list of all segments defined for the current list + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'ListID' => The current list id + * 'SegmentID' => The id of this segment + * 'Title' => The title of this segment + * } + * ) + */ + function get_segments() { + return $this->get_request($this->_lists_base_route.'segments.json'); + } + + /** + * Gets all active subscribers added since the given date + * @param string $added_since The date to start getting subscribers from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'NAME', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param boolean $include_tracking_pref Whether or not to return the ConsentToTrack value (true, false) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'Name' => The name of the subscriber + * 'Date' => The date when the status of subscriber last changed (ie: becomes active) + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber, will be 'Active' + * 'CustomFields' => array ( + * { + * 'Key' => The personalisation tag of the custom field + * 'Value' => The value of the custom field for this subscriber + * } + * ) + * } + * ) + * } + */ + function get_active_subscribers($added_since = '', $page_number = NULL, + $page_size = NULL, $order_field = NULL, $order_direction = NULL, $include_tracking_pref = NULL) { + + return $this->get_request_paged($this->_lists_base_route.'active.json?date='.urlencode($added_since), + $page_number, $page_size, $order_field, $order_direction, $include_tracking_pref); + } + + /** + * Gets all unconfirmed subscribers added since the given date + * @param string $added_since The date to start getting subscribers from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'NAME', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param boolean $include_tracking_pref Whether or not to return the ConsentToTrack value (true, false) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'Name' => The name of the subscriber + * 'Date' => The date when the status of subscriber last changed (ie: becomes unconfirmed) + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber, will be 'Unconfirmed' + * 'CustomFields' => array ( + * { + * 'Key' => The personalisation tag of the custom field + * 'Value' => The value of the custom field for this subscriber + * } + * ) + * } + * ) + * } + */ + function get_unconfirmed_subscribers($added_since = '', $page_number = NULL, + $page_size = NULL, $order_field = NULL, $order_direction = NULL, $include_tracking_pref = NULL) { + + return $this->get_request_paged($this->_lists_base_route.'unconfirmed.json?date='.urlencode($added_since), + $page_number, $page_size, $order_field, $order_direction, $include_tracking_pref); + } + + /** + * Gets all bounced subscribers who have bounced out since the given date + * @param string $added_since The date to start getting subscribers from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'NAME', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param boolean $include_tracking_pref Whether or not to return the ConsentToTrack value (true, false) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'Name' => The name of the subscriber + * 'Date' => The date when the status of subscriber last changed (ie: becomes bounced) + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber, will be 'Bounced' + * 'CustomFields' => array ( + * { + * 'Key' => The personalisation tag of the custom field + * 'Value' => The value of the custom field for this subscriber + * } + * ) + * } + * ) + * } + */ + function get_bounced_subscribers($bounced_since = '', $page_number = NULL, + $page_size = NULL, $order_field = NULL, $order_direction = NULL, $include_tracking_pref = NULL) { + + return $this->get_request_paged($this->_lists_base_route.'bounced.json?date='.urlencode($bounced_since), + $page_number, $page_size, $order_field, $order_direction, $include_tracking_pref); + } + + /** + * Gets all unsubscribed subscribers who have unsubscribed since the given date + * @param string $added_since The date to start getting subscribers from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'NAME', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param boolean $include_tracking_pref Whether or not to return the ConsentToTrack value (true, false) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'Name' => The name of the subscriber + * 'Date' => The date when the status of subscriber last changed (ie: becomes unsubscribed) + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber, will be 'Unsubscribed' + * 'CustomFields' => array ( + * { + * 'Key' => The personalisation tag of the custom field + * 'Value' => The value of the custom field for this subscriber + * } + * ) + * } + * ) + * } + */ + function get_unsubscribed_subscribers($unsubscribed_since = '', $page_number = NULL, + $page_size = NULL, $order_field = NULL, $order_direction = NULL, $include_tracking_pref = NULL) { + + return $this->get_request_paged($this->_lists_base_route.'unsubscribed.json?date='.urlencode($unsubscribed_since), + $page_number, $page_size, $order_field, $order_direction,$include_tracking_pref); + } + + /** + * Gets all subscribers who have been deleted since the given date + * @param string $deleted_since The date to start getting subscribers from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'NAME', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param boolean $include_tracking_pref Whether or not to return the ConsentToTrack value (true, false) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'Name' => The name of the subscriber + * 'Date' => The date when the status of subscriber last changed (ie: becomes deleted) + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber, will be 'Deleted' + * 'CustomFields' => array ( + * { + * 'Key' => The personalisation tag of the custom field + * 'Value' => The value of the custom field for this subscriber + * } + * ) + * } + * ) + * } + */ + function get_deleted_subscribers($deleted_since = '', $page_number = NULL, + $page_size = NULL, $order_field = NULL, $order_direction = NULL, $include_tracking_pref = NULL) { + + return $this->get_request_paged($this->_lists_base_route.'deleted.json?date='.urlencode($deleted_since), + $page_number, $page_size, $order_field, $order_direction, $include_tracking_pref); + } + + /** + * Gets the basic details of the current list + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ListID' => The id of the list + * 'Title' => The title of the list + * 'UnsubscribePage' => The page which subscribers are redirected to upon unsubscribing + * 'ConfirmedOptIn' => Whether the list is Double-Opt In + * 'ConfirmationSuccessPage' => The page which subscribers are + * redirected to upon confirming their subscription + * 'UnsubscribeSetting' => The unsubscribe setting for the list. Will + * be either CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS or + * CS_REST_LIST_UNSUBSCRIBE_SETTING_ONLY_THIS_LIST. + * } + */ + function get() { + return $this->get_request(trim($this->_lists_base_route, '/').'.json'); + } + + /** + * Gets statistics for list subscriptions, deletions, bounces and unsubscriptions + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'TotalActiveSubscribers' + * 'NewActiveSubscribersToday' + * 'NewActiveSubscribersYesterday' + * 'NewActiveSubscribersThisWeek' + * 'NewActiveSubscribersThisMonth' + * 'NewActiveSubscribersThisYeay' + * 'TotalUnsubscribes' + * 'UnsubscribesToday' + * 'UnsubscribesYesterday' + * 'UnsubscribesThisWeek' + * 'UnsubscribesThisMonth' + * 'UnsubscribesThisYear' + * 'TotalDeleted' + * 'DeletedToday' + * 'DeletedYesterday' + * 'DeletedThisWeek' + * 'DeletedThisMonth' + * 'DeletedThisYear' + * 'TotalBounces' + * 'BouncesToday' + * 'BouncesYesterday' + * 'BouncesThisWeek' + * 'BouncesThisMonth' + * 'BouncesThisYear' + * } + */ + function get_stats() { + return $this->get_request($this->_lists_base_route.'stats.json'); + } + + /** + * Gets the webhooks which are currently subcribed to event on this list + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * 'WebhookID' => The if of + * 'Events' => An array of the events this webhook is subscribed to ('Subscribe', 'Update', 'Deactivate') + * 'Url' => The url the webhook data will be POSTed to + * 'Status' => The current status of this webhook + * 'PayloadFormat' => The format in which data will be POSTed + * } + * ) + */ + function get_webhooks() { + return $this->get_request($this->_lists_base_route.'webhooks.json'); + } + + /** + * Creates a new webhook based on the provided details + * @param array $webhook The details of the new webhook + * This array should be of the form + * array( + * 'Events' => array The events to subscribe to. Valid events are + * CS_REST_LIST_WEBHOOK_SUBSCRIBE, + * CS_REST_LIST_WEBHOOK_DEACTIVATE, + * CS_REST_LIST_WEBHOOK_UPDATE + * 'Url' => string The url of the page to POST the webhook events to + * 'PayloadFormat' => The format to use when POSTing webhook event data, either + * CS_REST_WEBHOOK_FORMAT_JSON or + * CS_REST_WEBHOOK_FORMAT_XML + * (xml or json) + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created webhook + */ + function create_webhook($webhook) { + return $this->post_request($this->_lists_base_route.'webhooks.json', $webhook); + } + + /** + * Sends test events for the given webhook id + * @param string $webhook_id The id of the webhook to test + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty. + */ + function test_webhook($webhook_id) { + return $this->get_request($this->_lists_base_route.'webhooks/'.$webhook_id.'/test.json'); + } + + /** + * Deletes an existing webhook from the system + * @param string $webhook_id The id of the webhook to delete + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete_webhook($webhook_id) { + return $this->delete_request($this->_lists_base_route.'webhooks/'.$webhook_id.'.json'); + } + + /** + * Activates an existing deactivated webhook + * @param string $webhook_id The id of the webhook to activate + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function activate_webhook($webhook_id) { + return $this->put_request($this->_lists_base_route.'webhooks/'.$webhook_id.'/activate.json', ''); + } + + /** + * Deactivates an existing activated webhook + * @param string $webhook_id The id of the webhook to deactivate + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function deactivate_webhook($webhook_id) { + return $this->put_request($this->_lists_base_route.'webhooks/'.$webhook_id.'/deactivate.json', ''); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_people.php b/vendor/campaignmonitor/createsend-php/csrest_people.php new file mode 100644 index 00000000..9252d847 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_people.php @@ -0,0 +1,127 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $client_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_client_id($client_id); + + } + + /** + * Change the client id used for calls after construction + * @param $client_id + * @access public + */ + function set_client_id($client_id) { + $this->_people_base_route = $this->_base_route.'clients/'.$client_id . '/people'; + } + + /** + * Adds a new person to the specified client + * @param array $person The person details to use during creation. + * This array should be of the form + * array ( + * 'EmailAddress' => The new person email address + * 'Name' => The name of the new person + * 'AccessLevel' => The access level of the new person. See http://www.campaignmonitor.com/api/clients/#setting_access_details for details + * 'Password' => (optional) if not specified, an invitation will be sent to the person by email + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function add($person) { + return $this->post_request($this->_people_base_route.'.json', $person); + } + + /** + * Updates details for an existing person associated with the specified client. + * @param string $email The email address of the person to be updated + * @param array $person The updated person details to use for the update. + * This array should be of the form + * array ( + * 'EmailAddress' => The new email address + * 'Name' => The name of the person + * 'AccessLevel' => the access level of the person + * 'Password' => (optional) if specified, changes the password to the specified value + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update($email, $person) { + return $this->put_request($this->_people_base_route.'.json?email='.urlencode($email), $person); + } + + /** + * Gets the details for a specific person + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'EmailAddress' => The email address of the person + * 'Name' => The name of the person + * 'Status' => The status of the person + * 'AccessLevel' => The access level of the person + * ) + * } + */ + function get($email) { + return $this->get_request($this->_people_base_route.'.json?email='.urlencode($email)); + } + + + /** + * deletes the given person from the current client + * @param string $email The email address of the person to delete + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete($email) { + return $this->delete_request($this->_people_base_route.'.json?email='.urlencode($email)); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_segments.php b/vendor/campaignmonitor/createsend-php/csrest_segments.php new file mode 100644 index 00000000..c5ba8561 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_segments.php @@ -0,0 +1,210 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $segment_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_segment_id($segment_id); + } + + /** + * Change the segment id used for calls after construction + * @param $segment_id + * @access public + */ + function set_segment_id($segment_id) { + $this->_segments_base_route = $this->_base_route.'segments/'.$segment_id; + } + + /** + * Creates a new segment on the given list with the provided details + * @param int $list_id The list on which to create the segment + * @param $segment_details The details of the new segment + * This should be an array of the form + * array( + * 'Title' => The title of the new segment + * 'RuleGroups' => array( + * array( + * 'Rules' => array( + * array( + * 'RuleType' => The subject of this rule + * 'Clause' => The specific clauses for this rule + * ) + * ) + * ) + * ) + * ) + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created segment + */ + function create($list_id, $segment_details) { + return $this->post_request($this->_base_route.'segments/'.$list_id.'.json', $segment_details); + } + + /** + * Updates the current segment with the provided details. Calls to this route will clear any existing rules + * @param $segment_details The new details for the segment + * This should be an array of the form + * array( + * 'Title' => The title of the new segment + * 'RuleGroups' => array( + * array( + * 'Rules' => array( + * array( + * 'RuleType' => The subject of this rule + * 'Clause' => The specific clauses for this rule + * ) + * ) + * ) + * ) + * ) + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update($segment_details) { + return $this->put_request($this->_segments_base_route.'.json', $segment_details); + } + + /** + * Adds the given rule to the current segment + * @param $rule The rule to add to the segment + * This should be an array of the form + * array( + * 'Rules' => array( + * array( + * 'RuleType' => The subject of this rule + * 'Clause' => The specific clauses for this rule + * ) + * ) + * ) + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function add_rulegroup($rulegroup) { + return $this->post_request($this->_segments_base_route.'/rules.json', $rulegroup); + } + + /** + * Gets the details of the current segment + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ActiveSubscribers' => The number of active subscribers in this segment + * 'Rules' => array( + * { + * 'Subject' => The subject of the rule + * 'Clauses' => array The clauses making up this segment rule + * } + * ), + * 'ListID' => The ID of the list on which this segment is applied + * 'SegmentID' => The ID of this segment + * 'Title' => The title of this segment + * } + */ + function get() { + return $this->get_request($this->_segments_base_route.'.json'); + } + + /** + * Deletes an existing segment from the system + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete() { + return $this->delete_request($this->_segments_base_route.'.json'); + } + + /** + * Deletes all rules for the current segment + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function clear_rules() { + return $this->delete_request($this->_segments_base_route.'/rules.json'); + } + + /** + * Gets a paged collection of subscribers which fall into the given segment + * @param string $subscribed_since The date to start getting subscribers from + * @param int $page_number The page number to get + * @param int $page_size The number of records per page + * @param string $order_field The field to order the record set by ('EMAIL', 'NAME', 'DATE') + * @param string $order_direction The direction to order the record set ('ASC', 'DESC') + * @param boolean $include_tracking_pref Whether or not to return the ConsentToTrack value (true, false) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'ResultsOrderedBy' => The field the results are ordered by + * 'OrderDirection' => The order direction + * 'PageNumber' => The page number for the result set + * 'PageSize' => The page size used + * 'RecordsOnThisPage' => The number of records returned + * 'TotalNumberOfRecords' => The total number of records available + * 'NumberOfPages' => The total number of pages for this collection + * 'Results' => array( + * { + * 'EmailAddress' => The email address of the subscriber + * 'Name' => The name of the subscriber + * 'Date' => The date when the status of subscriber last changed. + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber, will be 'Active' + * 'CustomFields' => array ( + * { + * 'Key' => The personalisation tag of the custom field + * 'Value' => The value of the custom field for this subscriber + * } + * ) + * } + * ) + * } + */ + function get_subscribers($subscribed_since = '', $page_number = NULL, + $page_size = NULL, $order_field = NULL, $order_direction = NULL, $include_tracking_pref = NULL) { + + return $this->get_request_paged($this->_segments_base_route.'/active.json?date='.urlencode($subscribed_since), + $page_number, $page_size, $order_field, $order_direction, $include_tracking_pref); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_subscribers.php b/vendor/campaignmonitor/createsend-php/csrest_subscribers.php new file mode 100644 index 00000000..f892a8e2 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_subscribers.php @@ -0,0 +1,236 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param string $protocol The protocol to use for requests (http|https) + * @param int $debug_level The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param string $host The host to send API requests to. There is no need to change this + * @param CS_REST_Log $log The logger to use. Used for dependency injection + * @param object|null $serialiser The serialiser to use. Used for dependency injection + * @param object|null $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $list_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_list_id($list_id); + + } + + /** + * Change the list id used for calls after construction + * @param $list_id + * @access public + */ + function set_list_id($list_id) { + $this->_subscribers_base_route = $this->_base_route.'subscribers/'.$list_id; + } + + /** + * Adds a new subscriber to the specified list + * @param array $subscriber The subscriber details to use during creation. + * This array should be of the form + * array ( + * 'EmailAddress' => The new subscribers email address + * 'Name' => The name of the new subscriber + * 'CustomFields' => array( + * array( + * 'Key' => The custom fields personalisation tag + * 'Value' => The value for this subscriber + * ) + * ) + * 'ConsentToTrack' => Subscriber tracking preference ("yes", "no") + * 'Resubscribe' => Whether we should resubscribe this subscriber if they already exist in the list + * 'RestartSubscriptionBasedAutoResponders' => Whether we should restart subscription based auto responders which are sent when the subscriber first subscribes to a list. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function add($subscriber) { + return $this->post_request($this->_subscribers_base_route.'.json', $subscriber); + } + + /** + * Updates an existing subscriber (email, name, state, or custom fields) in the specified list. + * The update is performed even for inactive subscribers, but will return an error in the event of the + * given email not existing in the list. + * @param string $email The email address of the susbcriber to be updated + * @param array $subscriber The subscriber details to use for the update. Empty parameters will remain unchanged + * This array should be of the form + * array ( + * 'EmailAddress' => The new email address + * 'Name' => The name of the subscriber + * 'CustomFields' => array( + * array( + * 'Key' => The custom fields personalisation tag + * 'Value' => The value for this subscriber + * 'Clear' => true/false (pass true to remove this custom field. in the case of a [multi-option, select many] field, pass an option in the 'Value' field to clear that option or leave Value blank to remove all options) + * ) + * ) + * 'ConsentToTrack' => Subscriber tracking preference ("yes", "no") + * 'Resubscribe' => Whether we should resubscribe this subscriber if they already exist in the list + * 'RestartSubscriptionBasedAutoResponders' => Whether we should restart subscription based auto responders which are sent when the subscriber first subscribes to a list. + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update($email, $subscriber) { + return $this->put_request($this->_subscribers_base_route.'.json?email='.urlencode($email), $subscriber); + } + + /** + * Imports an array of subscribers into the current list + * @param array $subscribers An array of subscribers to import. + * This array should be of the form + * array ( + * array ( + * 'EmailAddress' => The new subscribers email address + * 'Name' => The name of the new subscriber + * 'CustomFields' => array( + * array( + * 'Key' => The custom fields personalisation tag + * 'Value' => The value for this subscriber + * 'Clear' => true/false (pass true to remove this custom field. in the case of a [multi-option, select many] field, pass an option in the 'Value' field to clear that option or leave Value blank to remove all options) + * ) + * ) + * ) + * ) + * @param bool $resubscribe Whether we should resubscribe any existing subscribers + * @param bool $queueSubscriptionBasedAutoResponders By default, subscription based auto responders do not trigger during an import. Pass a value of true to override this behaviour + * @param bool $restartSubscriptionBasedAutoResponders By default, subscription based auto responders will not be restarted + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'TotalUniqueEmailsSubmitted' => The number of unique emails submitted in the call + * 'TotalExistingSubscribers' => The number of subscribers who already existed in the list + * 'TotalNewSubscribers' => The number of new subscriptions to the list + * 'DuplicateEmailsInSubmission' => array The emails which appeared more than once in the batch + * 'FailureDetails' => array ( + * { + * 'EmailAddress' => The email address which failed + * 'Code' => The Create Send API Error code + * 'Message' => The reason for the failure + * } + * ) + * } + * + */ + function import($subscribers, $resubscribe, $queueSubscriptionBasedAutoResponders = false, $restartSubscriptionBasedAutoResponders = false) { + $subscribers = array( + 'Resubscribe' => $resubscribe, + 'QueueSubscriptionBasedAutoResponders' => $queueSubscriptionBasedAutoResponders, + 'Subscribers' => $subscribers, + 'RestartSubscriptionBasedAutoresponders' => $restartSubscriptionBasedAutoResponders + ); + + return $this->post_request($this->_subscribers_base_route.'/import.json', $subscribers); + } + + /** + * Gets a subscriber details, including custom fields + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'EmailAddress' => The subscriber email address + * 'Name' => The subscribers name + * 'Date' => The date when the status of subscriber last changed. + * 'ListJoinedDate' => The date the subscriber was first added to the list + * 'State' => The current state of the subscriber + * 'CustomFields' => array( + * { + * 'Key' => The custom fields personalisation tag + * 'Value' => The custom field value for this subscriber + * } + * ) + * } + */ + function get($email, $include_tracking_pref = NULL) { + return $this->get_request($this->_subscribers_base_route.'.json?email='.urlencode($email), $include_tracking_pref); + } + + /** + * Gets the sending history to a specific subscriber + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * { + * ID => The id of the email which was sent + * Type => 'Campaign' + * Name => The name of the email + * Actions => array( + * { + * Event => The type of action (Click, Open, Unsubscribe etc) + * Date => The date the event occurred + * IPAddress => The IP that the event originated from + * Detail => Any available details about the event i.e the URL for clicks + * } + * ) + * } + * ) + */ + function get_history($email) { + return $this->get_request($this->_subscribers_base_route.'/history.json?email='.urlencode($email)); + } + + /** + * Unsubscribes the given subscriber from the current list + * @param string $email The email address to unsubscribe + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function unsubscribe($email) { + // We need to build the subscriber data structure. + $email = array( + 'EmailAddress' => $email + ); + + return $this->post_request($this->_subscribers_base_route.'/unsubscribe.json', $email); + } + + /** + * deletes the given subscriber from the current list + * @param string $email The email address to delete + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete($email) { + return $this->delete_request($this->_subscribers_base_route.'.json?email='.urlencode($email)); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_templates.php b/vendor/campaignmonitor/createsend-php/csrest_templates.php new file mode 100644 index 00000000..c55cf609 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_templates.php @@ -0,0 +1,120 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $template_id, + $auth_details, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_template_id($template_id); + } + + /** + * Change the template id used for calls after construction + * @param $template_id + * @access public + */ + function set_template_id($template_id) { + $this->_templates_base_route = $this->_base_route.'templates/'.$template_id.'.json'; + } + + /** + * Creates a new template for the specified client based on the provided data + * @param string $client_id The client to create the template for + * @param array $template_details The details of the template + * This should be an array of the form + * array( + * 'Name' => The name of the template + * 'HtmlPageURL' => The url where the template html can be accessed + * 'ZipFileURL' => The url where the template image zip can be accessed + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created template + */ + function create($client_id, $template_details) { + return $this->post_request($this->_base_route.'templates/'.$client_id.'.json', $template_details); + } + + /** + * Updates the current template with the provided code + * @param array $template_details The details of the template + * This should be an array of the form + * array( + * 'Name' => The name of the template + * 'HtmlPageURL' => The url where the template html can be accessed + * 'ZipFileURL' => The url where the template image zip can be accessed + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function update($template_details) { + return $this->put_request($this->_templates_base_route, $template_details); + } + + /** + * Deletes the current template from the system + * @access public + * @return CS_REST_Wrapper_Result A successful response will be empty + */ + function delete() { + return $this->delete_request($this->_templates_base_route); + } + + /** + * Gets the basic details of the current template + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * { + * 'TemplateID' => The id of the template + * 'Name' => The name of the template + * 'PreviewURL' => A url where the template can be previewed from + * 'ScreenshotURL' => The url of the template screenshot if one was provided + * } + */ + function get() { + return $this->get_request($this->_templates_base_route); + } + } +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/csrest_transactional_classicemail.php b/vendor/campaignmonitor/createsend-php/csrest_transactional_classicemail.php new file mode 100644 index 00000000..0e3c1176 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_transactional_classicemail.php @@ -0,0 +1,138 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $auth_details, + $client_id = NULL, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_client($client_id); + } + + /** + * Change the client id used for calls after construction + * Only required if using OAuth or an Account level API Key + * @param $client_id + * @access public + */ + function set_client($client_id) { + $this->_client_id_param = array("clientID" => $client_id); + } + + /** + * Sends a new classic transactional email + * @param array $message The details of the template + * This should be an array of the form + * array( + * 'From' => string required The From name/email in the form "first last " + * 'ReplyTo' => string optional The Reply-To address + * 'To' => array( + * "First Last ", "another@example.com" + * ) optional To recipients + * 'CC' => array( + * "First Last ", "another@example.com" + * ) optional CC recipients + * 'BCC' => array( + * "First Last ", "another@example.com" + * ) optional BCC recipients + * 'Subject' => string required The subject of the email + * 'Html' => string The HTML content of the message + * 'Text' => string optional The text content of the message + * 'Attachments' => array + * "Name" => string required + * "Type" => string required + * "Content" => string required + * ) optional + * ) + * @param string $group Optional. Name to group emails by for reporting + * For example "Password reset", "Order confirmation" + * @param array $options optional. Advanced options for sending this email (optional) + * This should be an array, each property is optionals + * array( + * TrackOpens => whether to track opens, defaults to true + * TrackClicks => whether to track clicks, defaults to true + * InlineCSS => whether inline CSS, defaults to true + * AddRecipientsToListID => ID of a list to add all recipeints to + * ) + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the include the details of the action, including a Message ID. + * array( + * array( + * "MessageID" => string + * "Recipient" => string + * "Status" => string + * ) + * ) + */ + function send($message, $group = NULL, $consent_to_track, $add_to_list_ID = NULL, $options = array()) { + $all_params = array( + "Group" => $group, + "AddRecipientsToListID" => $add_to_list_ID, + "ConsentToTrack" => $consent_to_track + ); + $data = array_merge( + $this->_client_id_param, $message, $all_params, $options + ); + return $this->post_request($this->_base_route.'transactional/classicemail/send', $data); + } + + /** + * Gets the list of Classic Groups + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an array of the form + * array( + * array( + * "Group" => string + * "CreatedAt" => string + * ) + * ) + */ + function groups() { + $data = array_merge($this->_client_id_param); + return $this->get_request($this->_base_route . 'transactional/classicemail/groups', $data); + } + + } +} + diff --git a/vendor/campaignmonitor/createsend-php/csrest_transactional_smartemail.php b/vendor/campaignmonitor/createsend-php/csrest_transactional_smartemail.php new file mode 100644 index 00000000..a0348dfc --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_transactional_smartemail.php @@ -0,0 +1,184 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $smartemail_id, + $auth_details, + $client_id = NULL, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_client($client_id); + $this->set_smartemail_id($smartemail_id); + } + + /** + * Change the client id used for calls after construction + * Only required if using OAuth or an Account level API Key + * @param $client_id + * @access public + */ + function set_client($client_id) { + $this->_client_id_param = array("clientID" => $client_id); + } + + /** + * Change the smart email id used for calls after construction + * @param $smartemail_id + * @access public + */ + function set_smartemail_id($smartemail_id) { + $this->_smartemail_base_route = $this->_base_route . 'transactional/smartEmail/' . $smartemail_id; + } + + /** + * Gets a list of smart emails + * @access public + * @param $options optional array Query params to filter list + * This should be an array of the form + * array( + * "status" => "all|drafts|active" + * ) + * @return CS_REST_Wrapper_Result A successful response will be an object of the form + * array( + * array ( + * 'ID' => string + * 'Name' => string + * 'CreatedAt' => datestring + * 'Status' => string + * ) + * ) + */ + function get_list($options = array()) { + $data = array_merge($this->_client_id_param, $options); + return $this->get_request_with_params($this->_base_route . 'transactional/smartemail', $data); + } + + /** + * Sends a new smart transactional email + * @param array $message The details of the template + * This should be an array of the form + * array( + * 'To' => array( + * "First Last ", "another@example.com" + * ) optional To recipients + * 'CC' => array( + * "First Last ", "another@example.com" + * ) optional CC recipients + * 'BCC' => array( + * "First Last ", "another@example.com" + * ) optional BCC recipients + * 'Attachments' => array( + * array( + * "Name" => string + * "Type" => string mime type + * "Content" => string base64-encoded + * ) + * ) optional + * 'Data' => array( + * "variable" => "value", + * "variable" => "value", + * ) + * ) + * @param boolean $add_to_list optional. Whether to add all recipients to the list specified for the smart email + * @access public + * @return CS_REST_Wrapper_Result A successful response will be the include the details of the action, including a Message ID. + * array( + * array( + * "MessageID" => string + * "Recipient" => string + * "Status" => string + * ) + * ) + */ + function send($message, $consent_to_track, $add_to_list = true) { + $data = array_merge($message, array( + "AddRecipientsToList" => $add_to_list, + "ConsentToTrack" => $consent_to_track + )); + return $this->post_request($this->_smartemail_base_route . '/send.json', $data); + } + + /** + * Gets the details of Smart Email + * @access public + * @return CS_REST_Wrapper_Result A successful response will be an array of the form + * array( + * "SmartEmailID" => string + * "Name" => string + * "CreatedAt" => string + * "Status" => string + * "Properties" => array ( + * "From" =. string + * "ReplyTo" => string + * "Subject" => string + * "Content": array( + * "HTML": string + * "Text": string + * "EmailVariables": array( + * "username", + * "reset_token" + * ), + * "InlineCss": boolean + * }, + * "TextPreviewUrl": string + * "HtmlPreviewUrl": string + * ), + * "AddRecipientsToList": string + * } + */ + function get_details() { + return $this->get_request($this->_smartemail_base_route); + } + + } +} diff --git a/vendor/campaignmonitor/createsend-php/csrest_transactional_timeline.php b/vendor/campaignmonitor/createsend-php/csrest_transactional_timeline.php new file mode 100644 index 00000000..51fce3b5 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/csrest_transactional_timeline.php @@ -0,0 +1,163 @@ + 'your access token', + * 'refresh_token' => 'your refresh token') + * + * Or if using an API key: + * array('api_key' => 'your api key') + * @param $protocol string The protocol to use for requests (http|https) + * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE + * @param $host string The host to send API requests to. There is no need to change this + * @param $log CS_REST_Log The logger to use. Used for dependency injection + * @param $serialiser The serialiser to use. Used for dependency injection + * @param $transport The transport to use. Used for dependency injection + * @access public + */ + function __construct ( + $auth_details, + $client_id = NULL, + $protocol = 'https', + $debug_level = CS_REST_LOG_NONE, + $host = 'api.createsend.com', + $log = NULL, + $serialiser = NULL, + $transport = NULL) { + parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport); + $this->set_client($client_id); + } + + /** + * Change the client id used for calls after construction + * Only required if using OAuth or an Account level API Key + * @param $client_id + * @access public + */ + function set_client($client_id) { + $this->_client_id_param = array("clientID" => $client_id); + } + + /** + * Gets the list of sent messages + * @access public + * @param $params, array Parameters used to filter results + * This should be an array of the form + * array( + * "status" => string delivered|bounced|spam|all + * "count" => integer optional, maximum number of results to return in a single request (default: 50, max: 200) + * "sentBeforeID" => string optional, messageID used for pagination, returns emails sent before the specified message + * "sentAfterID" => string optional, messageID used for pagination, returns emails sent after the specified message + * "smartEmaiLID" => string optional, smart email to filter by + * "group" => string optional, classic group name to filter by + * ) + * @return CS_REST_Wrapper_Result A successful response will be an array of the form + * array( + * array( + * "MessageID" => string + * "Status" => string + * "SentAt" => string + * "Recipient" => string + * "From" => string + * "Subject" => string + * "TotalOpens" => integer + * "TotalClicks" => integer + * "CanBeResent" => boolean + * "Group" => string, optional + * "SmartEmailID" => string, optional + * ) + * ) + */ + function messages($query = array()) { + $params = array_merge($this->_client_id_param, $query); + return $this->get_request_with_params($this->_base_route . 'transactional/messages', $params); + } + + /** + * Gets the list of details of a sent message + * @access public + * @param $message_id, string Message ID to get the details for + * @return CS_REST_Wrapper_Result The details of the message + */ + function details($message_id, $show_details = false, $exclude_message_body = false) { + $params = array_merge($this->_client_id_param, + array("statistics" => $show_details, "excludemessagebody" => $exclude_message_body)); + return $this->get_request_with_params($this->_base_route . 'transactional/messages/' . $message_id, $params); + } + + + /** + * Resend a sent message + * @access public + * @param $message_id, string Message ID to resend + * @return CS_REST_Wrapper_Result The details of the message + * array( + * "MessageID" => string + * "Recipient" => string + * "Status" => string + * ) + */ + function resend($message_id) { + $data = array_merge($this->_client_id_param); + return $this->post_request($this->_base_route.'transactional/messages/' . $message_id . '/resend', $data); + } + + /** + * Gets statistics for sends/bounces/opens/clicks + * @access public + * @param $params, array Parameters used to filter results + * This should be an array of the form + * array( + * "from" => iso-8601 date, optional, default 30 days ago + * "to" => iso-8601 date, optional, default today + * "timezone" => client|utc, optional, how to handle date boundaries + * "group" => string optional, classic group name to filter by + * "smartEmailID" => string optional. smart email to filter results by + * ) + * @return CS_REST_Wrapper_Result A successful response will be an array of the form + * array( + * array( + * "MessageID" => string + * "Status" => string + * "SentAt" => string + * "Recipient" => string + * "From" => string + * "Subject" => string + * "TotalOpens" => integer + * "TotalClicks" => integer + * "CanBeResent" => boolean + * "Group" => string, optional + * "SmartEmailID" => string, optional + * ) + * ) + */ + function statistics($query = array()) { + $params = array_merge($this->_client_id_param, $query); + return $this->get_request_with_params($this->_base_route.'transactional/statistics', $params); + } + + } +} + diff --git a/vendor/campaignmonitor/createsend-php/samples/authentication/auth_with_api_key.php b/vendor/campaignmonitor/createsend-php/samples/authentication/auth_with_api_key.php new file mode 100644 index 00000000..dc413231 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/authentication/auth_with_api_key.php @@ -0,0 +1,19 @@ + 'your api key'); +$wrap = new CS_REST_General($auth); + +$result = $wrap->get_clients(); + + +echo "Result of /api/v3.1/clients\n
"; +if($result->was_successful()) { + echo "Got clients\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/authentication/auth_with_oauth.php b/vendor/campaignmonitor/createsend-php/samples/authentication/auth_with_oauth.php new file mode 100644 index 00000000..060366fe --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/authentication/auth_with_oauth.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + +$result = $wrap->get_clients(); + + +echo "Result of /api/v3.1/clients\n
"; +if($result->was_successful()) { + echo "Got clients\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/authentication/exchange_token.php b/vendor/campaignmonitor/createsend-php/samples/authentication/exchange_token.php new file mode 100644 index 00000000..00566c75 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/authentication/exchange_token.php @@ -0,0 +1,24 @@ +was_successful()) { + $access_token = $result->response->access_token; + $expires_in = $result->response->expires_in; + $refresh_token = $result->response->refresh_token; + # Save $access_token, $expires_in, and $refresh_token. + echo "access token: ".$access_token."\n"; + echo "expires in (seconds): ".$expires_in."\n"; + echo "refresh token: ".$refresh_token."\n"; +} else { + echo 'An error occurred:\n'; + echo $result->response->error.': '.$result->response->error_description."\n"; + # Handle error... +} diff --git a/vendor/campaignmonitor/createsend-php/samples/authentication/get_authorize_url.php b/vendor/campaignmonitor/createsend-php/samples/authentication/get_authorize_url.php new file mode 100644 index 00000000..bd9795d8 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/authentication/get_authorize_url.php @@ -0,0 +1,12 @@ +"; diff --git a/vendor/campaignmonitor/createsend-php/samples/authentication/refresh_token.php b/vendor/campaignmonitor/createsend-php/samples/authentication/refresh_token.php new file mode 100644 index 00000000..f71e4ed9 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/authentication/refresh_token.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token' +); +$wrap = new CS_REST_General($auth); +$result = $wrap->get_clients(); +if (!$result->was_successful()) { + # If you receive '121: Expired OAuth Token', refresh the access token + if ($result->response->Code == 121) { + list($new_access_token, $new_expires_in, $new_refresh_token) = + $wrap->refresh_token(); + # Save $new_access_token, $new_expires_in, and $new_refresh_token + } + # Make the call again + $result = $wrap->get_clients(); +} +var_dump($result->response); diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/create.php b/vendor/campaignmonitor/createsend-php/samples/campaign/create.php new file mode 100644 index 00000000..719fc053 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/create.php @@ -0,0 +1,29 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns(NULL, $auth); + +$result = $wrap->create('Campaigns Client ID', array( + 'Subject' => 'Campaign Subject', + 'Name' => 'Campaign Name', + 'FromName' => 'Campaign From Name', + 'FromEmail' => 'Campaign From Email Address', + 'ReplyTo' => 'Campaign Reply To Email Address', + 'HtmlUrl' => 'Campaign HTML Import URL', + # 'TextUrl' => 'Optional campaign text import URL', + 'ListIDs' => array('First List', 'Second List'), + 'SegmentIDs' => array('First Segment', 'Second Segment') +)); + +echo "Result of POST /api/v3.1/campaigns/{clientID}\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/create_from_template.php b/vendor/campaignmonitor/createsend-php/samples/campaign/create_from_template.php new file mode 100644 index 00000000..ac12212f --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/create_from_template.php @@ -0,0 +1,99 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns(NULL, $auth); + +$template_content = array( + 'Singlelines' => array( + array( + 'Content' => 'This is a heading', + 'Href' => 'http://example.com/' + ) + ), + 'Multilines' => array( + array( + 'Content' => '

This is example

multiline content...

' + ) + ), + 'Images' => array( + array( + 'Content' => 'http://example.com/image.png', + 'Alt' => 'This is alt text for an image', + 'Href' => 'http://example.com/' + ) + ), + 'Repeaters' => array( + array( + 'Items' => array( + array( + 'Layout' => 'My layout', + 'Singlelines' => array( + array( + 'Content' => 'This is a repeater heading', + 'Href' => 'http://example.com/' + ) + ), + 'Multilines' => array( + array( + 'Content' => '

This is example

multiline content...

' + ) + ), + 'Images' => array( + array( + 'Content' => 'http://example.com/image.png', + 'Alt' => 'This is alt text for a repeater image', + 'Href' => 'http://example.com/' + ) + ) + ) + ) + ) + ) +); + +# $template_content as defined above would be used to fill the content of +# a template with markup similar to the following: +# +# +# My Template +# +#

Enter heading...

+#
Enter description...
+# +# +# +#
+#

+#
+# +#
+#
+#
+#

Unsubscribe

+# +# + +$result = $wrap->create_from_template('Campaigns Client ID', array( + 'Subject' => 'Campaign Subject', + 'Name' => 'Campaign Name', + 'FromName' => 'Campaign From Name', + 'FromEmail' => 'Campaign From Email Address', + 'ReplyTo' => 'Campaign Reply To Email Address', + 'ListIDs' => array('First List', 'Second List'), + 'SegmentIDs' => array('First Segment', 'Second Segment'), + 'TemplateID' => 'Template ID', + 'TemplateContent' => $template_content +)); + +echo "Result of POST /api/v3.1/campaigns/{clientID}/fromtemplate\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/delete.php b/vendor/campaignmonitor/createsend-php/samples/campaign/delete.php new file mode 100644 index 00000000..74cbfcee --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/delete.php @@ -0,0 +1,18 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to Delete', $auth); +$result = $wrap->delete(); + +echo "Result of DELETE /api/v3.1/campaigns/{id}\n
"; +if($result->was_successful()) { + echo "Deleted with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_bounces.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_bounces.php new file mode 100644 index 00000000..267af8ea --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_bounces.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get bounces for', $auth); +$result = $wrap->get_bounces('Get bounces since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_bounces(page, page size, order field, order direction); + +echo "Result of GET /api/v3.1/campaigns/{id}/bounces\n
"; +if($result->was_successful()) { + echo "Got bounces\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_clicks.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_clicks.php new file mode 100644 index 00000000..8f24a523 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_clicks.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get clicks for', $auth); +$result = $wrap->get_clicks('Get clicks since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_clicks(date('Y-m-d', strtotime('-30 days')), page, page size, order field, order direction); + +echo "Result of GET /api/v3.1/campaigns/{id}/clicks\n
"; +if($result->was_successful()) { + echo "Got clicks\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_email_client_usage.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_email_client_usage.php new file mode 100644 index 00000000..1a9e2c13 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_email_client_usage.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get the email client usage for', $auth); +$result = $wrap->get_email_client_usage(); + +echo "Result of GET /api/v3.1/campaigns/{id}/emailclientusage\n
"; +if($result->was_successful()) { + echo "Got email client usage\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_lists_and_segments.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_lists_and_segments.php new file mode 100644 index 00000000..06df4829 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_lists_and_segments.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get lists for', $auth); +$result = $wrap->get_lists_and_segments(); + +echo "Result of GET /api/v3.1/campaigns/{id}/listsandsegments\n
"; +if($result->was_successful()) { + echo "Got lists and segments\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_opens.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_opens.php new file mode 100644 index 00000000..f73dc821 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_opens.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get opens for', $auth); +$result = $wrap->get_opens('Get opens since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_opens(date('Y-m-d', strtotime('-30 days')), page, page size, order field, order direction); + +echo "Result of GET /api/v3.1/campaigns/{id}/opens\n
"; +if($result->was_successful()) { + echo "Got opens\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_recipients.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_recipients.php new file mode 100644 index 00000000..d722b48d --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_recipients.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get recipients for', $auth); +$result = $wrap->get_recipients(1, 50, 'email', 'asc'); +//$result = $wrap->get_recipients(page number, page size, order by, order direction); + +echo "Result of GET /api/v3.1/campaigns/{id}/recipients\n
"; +if($result->was_successful()) { + echo "Got recipients\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_spam.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_spam.php new file mode 100644 index 00000000..c6d9e388 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_spam.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get spam complaints for', $auth); +$result = $wrap->get_spam('Get spam complaints since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_spam(date('Y-m-d', strtotime('-30 days')), page, page size, order field, order direction); + +echo "Result of GET /api/v3.1/campaigns/{id}/spam\n
"; +if($result->was_successful()) { + echo "Got spam complaints\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_summary.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_summary.php new file mode 100644 index 00000000..06f34baa --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_summary.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get the summary of', $auth); +$result = $wrap->get_summary(); + +echo "Result of GET /api/v3.3/campaigns/{id}/summary\n
"; +if($result->was_successful()) { + echo "Got summary\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/get_unsubscribes.php b/vendor/campaignmonitor/createsend-php/samples/campaign/get_unsubscribes.php new file mode 100644 index 00000000..e6b2c905 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/get_unsubscribes.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to get unsubscribes for', $auth); +$result = $wrap->get_unsubscribes('Get unsubscribes since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_unsubscribes(date('Y-m-d', strtotime('-30 days')), page, page size, order field, order direction); + +echo "Result of GET /api/v3.1/campaigns/{id}/unsubscribes\n
"; +if($result->was_successful()) { + echo "Got unsubscribes\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/send.php b/vendor/campaignmonitor/createsend-php/samples/campaign/send.php new file mode 100644 index 00000000..533b900e --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/send.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to Send', $auth); + +$result = $wrap->send(array( + 'ConfirmationEmail' => 'Confirmation Email Address', + 'SendDate' => 'Date to send (yyyy-mm-dd or immediately)' +)); + +echo "Result of POST /api/v3.1/campaigns/{id}/send\n
"; +if($result->was_successful()) { + echo "Scheduled with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/send_preview.php b/vendor/campaignmonitor/createsend-php/samples/campaign/send_preview.php new file mode 100644 index 00000000..922425b4 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/send_preview.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to Test', $auth); +$result = $wrap->send_preview(array( + 'test1@test.com', + 'test2@test.com' +), 'Fallback'); + +echo "Result of POST /api/v3.1/campaigns/{id}/sendpreview\n
"; +if($result->was_successful()) { + echo "Preview sent with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/campaign/unschedule.php b/vendor/campaignmonitor/createsend-php/samples/campaign/unschedule.php new file mode 100644 index 00000000..9e1ef6a6 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/campaign/unschedule.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Campaigns('Campaign ID to unschedule', $auth); + +$result = $wrap->unschedule(); + +echo "Result of POST /api/v3.1/campaigns/{id}/unschedule\n
"; +if($result->was_successful()) { + echo "Scheduled with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/create.php b/vendor/campaignmonitor/createsend-php/samples/client/create.php new file mode 100644 index 00000000..8433825a --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/create.php @@ -0,0 +1,23 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients(NULL, $auth); + +$result = $wrap->create(array( + 'CompanyName' => 'Clients company name', + 'Country' => 'Clients country', + 'Timezone' => 'Clients timezone' +)); + +echo "Result of POST /api/v3.1/clients\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/delete.php b/vendor/campaignmonitor/createsend-php/samples/client/delete.php new file mode 100644 index 00000000..e9095806 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/delete.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Client ID to Delete', $auth); + +$result = $wrap->delete(); + +echo "Result of DELETE /api/v3.1/clients/{id}\n
"; +if($result->was_successful()) { + echo 'Deleted'; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get.php b/vendor/campaignmonitor/createsend-php/samples/client/get.php new file mode 100644 index 00000000..ae2d21ea --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Your client ID', $auth); +$result = $wrap->get(); + +echo "Result of GET /api/v3.1/clients/{id}\n
"; +if($result->was_successful()) { + echo "Got client
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_campaigns.php b/vendor/campaignmonitor/createsend-php/samples/client/get_campaigns.php new file mode 100644 index 00000000..1655bbe6 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_campaigns.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get Campaigns for', + $auth); + +$result = $wrap->get_campaigns(); + +echo "Result of /api/v3.3/clients/{id}/campaigns\n
"; +if($result->was_successful()) { + echo "Got campaigns\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_drafts.php b/vendor/campaignmonitor/createsend-php/samples/client/get_drafts.php new file mode 100644 index 00000000..986c858d --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_drafts.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get drafts for', + $auth); + +$result = $wrap->get_drafts(); + +echo "Result of /api/v3.3/clients/{id}/drafts\n
"; +if($result->was_successful()) { + echo "Got drafts\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_journeys.php b/vendor/campaignmonitor/createsend-php/samples/client/get_journeys.php new file mode 100644 index 00000000..a5cc0f04 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_journeys.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get Journeys for', + $auth); + +$result = $wrap->get_journeys(); + +echo "Result of /api/v3.2/clients/{id}/journeys\n
"; +if($result->was_successful()) { + echo "Got journeys\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_lists.php b/vendor/campaignmonitor/createsend-php/samples/client/get_lists.php new file mode 100644 index 00000000..98abcc0f --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_lists.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get Lists for', + $auth); + +$result = $wrap->get_lists(); + +echo "Result of /api/v3.1/clients/{id}/lists\n
"; +if($result->was_successful()) { + echo "Got lists\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_lists_for_email.php b/vendor/campaignmonitor/createsend-php/samples/client/get_lists_for_email.php new file mode 100644 index 00000000..b7f937e5 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_lists_for_email.php @@ -0,0 +1,24 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get Lists for', + $auth); + +$email_address = 'your_email_address@example.com'; + +$result = $wrap->get_lists_for_email($email_address); + +echo "Result of /api/v3.1/clients/{id}/listsforemail\n
"; +if($result->was_successful()) { + echo "Got lists to which email address ".$email_address." is subscribed\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_scheduled.php b/vendor/campaignmonitor/createsend-php/samples/client/get_scheduled.php new file mode 100644 index 00000000..dc20a800 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_scheduled.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get scheduled campaigns for', + $auth); + +$result = $wrap->get_scheduled(); + +echo "Result of /api/v3.3/clients/{id}/scheduled\n
"; +if($result->was_successful()) { + echo "Got scheduled campaigns\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_segments.php b/vendor/campaignmonitor/createsend-php/samples/client/get_segments.php new file mode 100644 index 00000000..95aa19fd --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_segments.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get segments for', + $auth); + +$result = $wrap->get_segments(); + +echo "Result of /api/v3.1/clients/{id}/segments\n
"; +if($result->was_successful()) { + echo "Got segments\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_suppressionlist.php b/vendor/campaignmonitor/createsend-php/samples/client/get_suppressionlist.php new file mode 100644 index 00000000..7bb179aa --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_suppressionlist.php @@ -0,0 +1,23 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get the suppression list of', + $auth); + +$result = $wrap->get_suppressionlist(1, 50, 'email', 'asc'); +//$result = $wrap->get_suppressionlist(page number, page size, order by, order direction); + +echo "Result of /api/v3.1/clients/{id}/suppressionlist\n
"; +if($result->was_successful()) { + echo "Got suppression list\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_tags.php b/vendor/campaignmonitor/createsend-php/samples/client/get_tags.php new file mode 100644 index 00000000..2763108e --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_tags.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get Tags for', + $auth); + +$result = $wrap->get_tags(); + +echo "Result of /api/v3.3/clients/{id}/tags\n
"; +if($result->was_successful()) { + echo "Got tags\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/get_templates.php b/vendor/campaignmonitor/createsend-php/samples/client/get_templates.php new file mode 100644 index 00000000..7a8c6566 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/get_templates.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients( + 'ClientID to get the templates of', + $auth); + +$result = $wrap->get_templates(); + +echo "Result of /api/v3.1/clients/{id}/templates\n
"; +if($result->was_successful()) { + echo "Got templates\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/set_basics.php b/vendor/campaignmonitor/createsend-php/samples/client/set_basics.php new file mode 100644 index 00000000..5e8990c6 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/set_basics.php @@ -0,0 +1,23 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Your client ID', $auth); + +$result = $wrap->set_basics(array( + 'CompanyName' => 'Clients company name', + 'Country' => 'Clients country', + 'Timezone' => 'Clients timezone' +)); + +echo "Result of PUT /api/v3.1/clients/{id}/setbasics\n
"; +if($result->was_successful()) { + echo "Updated with Code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/set_monthly_billing.php b/vendor/campaignmonitor/createsend-php/samples/client/set_monthly_billing.php new file mode 100644 index 00000000..e8a4d024 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/set_monthly_billing.php @@ -0,0 +1,24 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Your client ID', $auth); + +$result = $wrap->set_monthly_billing(array( + 'Currency' => 'USD', + 'ClientPays' => true, + 'MarkupPercentage' => 100/*, + 'MonthlyScheme' => 'Basic' */ +)); + +echo "Result of PUT /api/v3.1/clients/{id}/setmonthlybilling\n
"; +if($result->was_successful()) { + echo "Updated with Code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/set_payg_billing.php b/vendor/campaignmonitor/createsend-php/samples/client/set_payg_billing.php new file mode 100644 index 00000000..2a514184 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/set_payg_billing.php @@ -0,0 +1,36 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Your client ID', $auth); + +/* + * Specific markup values can be set via the + * + * MarkupOnDelivery + * MarkupPerRecipient + * MarkupOnDesignSpamTest + * + * fields + */ +$result = $wrap->set_payg_billing(array( + 'Currency' => 'USD', + 'ClientPays' => true, + 'MarkupPercentage' => 100, + 'CanPurchaseCredits' => false/*, +'MarkupOnDelivery' => 4, +'MarkupPerRecipient' => 3, +'MarkupOnDesignSpamTest' => 7 */ +)); + +echo "Result of PUT /api/v3.1/clients/{id}/setpaygbilling\n
"; +if($result->was_successful()) { + echo "Updated with Code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/suppress.php b/vendor/campaignmonitor/createsend-php/samples/client/suppress.php new file mode 100644 index 00000000..3a873a63 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/suppress.php @@ -0,0 +1,24 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Your client ID', $auth); + +$emails = array( + 'example@example.com', + 'another@example.com' +); + +$result = $wrap->suppress($emails); + +echo "Result of PUT /api/v3.1/clients/{id}/suppress\n
"; +if($result->was_successful()) { + echo "Updated with Code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/transfer_credits.php b/vendor/campaignmonitor/createsend-php/samples/client/transfer_credits.php new file mode 100644 index 00000000..114c6462 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/transfer_credits.php @@ -0,0 +1,25 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Client ID', $auth); + +$transfer_details = array( + 'Credits' => 200, + 'CanUseMyCreditsWhenTheyRunOut' => false +); + +$result = $wrap->transfer_credits($transfer_details); + +echo "Result of POST /api/v3.1/clients/{id}/credits\n
"; +if($result->was_successful()) { + echo "Transferred with response\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/client/unsuppress.php b/vendor/campaignmonitor/createsend-php/samples/client/unsuppress.php new file mode 100644 index 00000000..feb85ec5 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/client/unsuppress.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Clients('Your client ID', $auth); + +$result = $wrap->unsuppress('Email address to unsuppress'); + +echo "Result of PUT /api/v3.1/clients/{id}/unsuppress\n
"; +if($result->was_successful()) { + echo "Updated with Code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/events/event_track.php b/vendor/campaignmonitor/createsend-php/samples/events/event_track.php new file mode 100644 index 00000000..6f5a383b --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/events/event_track.php @@ -0,0 +1,42 @@ + "sample api key"); +$client_id = "sample client id"; +$api_event_type = "identify"; +$wrap = new CS_REST_Events($auth, $client_id, $api_event_type); + +echo "\nSending a $api_event_type event...\n"; + +$contact = "joe@example.org"; +$event_type = "checkout"; +$event_data = array( + "Page" => "/cart/checkout", + "Items" => array( + array( + "Description" => "Rubber Widget", + "Quantity" => 1, + "Price" => 300, + ), + array( + "Description" => "Paint 1L", + "Quantity" => 10, + "Price" => 1, + ), + ), + "User" => "joe@example.org", + "CardType" => "VISA", +); + +if (strcmp($wrap->getEventType(), "identify") === 0) { + // `Identify` event + $anon_id = "anonymousid-0"; + $user_id = "userid-0"; + $result = $wrap->track($contact, $event_type, $anon_id, $user_id, $event_data); +} else { + // `Non-identify` event (custom, shopify) + $result = $wrap->track($contact, $event_type, NULL, NULL, $event_data); +} +echo "\nEvent Sent! Here's the response:\n"; +var_dump($result); + diff --git a/vendor/campaignmonitor/createsend-php/samples/external_session_url.php b/vendor/campaignmonitor/createsend-php/samples/external_session_url.php new file mode 100644 index 00000000..a9fd6457 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/external_session_url.php @@ -0,0 +1,27 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + +$result = $wrap->external_session_url(array( + 'Email' => 'The email address of the Campaign Monitor user for whom the login session should be created', + 'Chrome' => 'Which chrome to display - Must be either "all", "tabs", or "none"', + 'Url' => 'The URL to display once logged in. e.g. "/subscribers/"', + 'IntegratorID' => 'The Integrator ID. You need to contact Campaign Monitor support to get an Integrator ID.', + 'ClientID' => 'The Client ID of the client which should be active once logged in to the Campaign Monitor account.' +)); + +echo "Result of PUT /api/v3.1/externalsession\n
"; +if($result->was_successful()) { + echo "Succeeded with Code ".$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/get_apikey.php b/vendor/campaignmonitor/createsend-php/samples/get_apikey.php new file mode 100644 index 00000000..aaf148c7 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/get_apikey.php @@ -0,0 +1,17 @@ +get_apikey('Your username', 'Your password', 'account.test.createsend.com'); + +echo "Result of /api/v3.1/apikey\n
"; +if($result->was_successful()) { + echo "Got API Key\n
".$result->response->ApiKey; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} + diff --git a/vendor/campaignmonitor/createsend-php/samples/get_billing_details.php b/vendor/campaignmonitor/createsend-php/samples/get_billing_details.php new file mode 100644 index 00000000..0a892689 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/get_billing_details.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + + +$result = $wrap->get_billing_details(); + +echo "Result of /api/v3.1/billingdetails\n
"; +if($result->was_successful()) { + echo "Got billing details\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/get_clients.php b/vendor/campaignmonitor/createsend-php/samples/get_clients.php new file mode 100644 index 00000000..90ac01f1 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/get_clients.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + + +$result = $wrap->get_clients(); + + +echo "Result of /api/v3.1/clients\n
"; +if($result->was_successful()) { + echo "Got clients\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/get_countries.php b/vendor/campaignmonitor/createsend-php/samples/get_countries.php new file mode 100644 index 00000000..bf183915 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/get_countries.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + + +$result = $wrap->get_countries(); + +echo "Result of /api/v3.1/countries\n
"; +if($result->was_successful()) { + echo "Got countries\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/get_systemdate.php b/vendor/campaignmonitor/createsend-php/samples/get_systemdate.php new file mode 100644 index 00000000..3f156e7a --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/get_systemdate.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + + +$result = $wrap->get_systemdate(); + +echo "Result of /api/v3.1/systemdate\n
"; +if($result->was_successful()) { + echo "Got system date\n
".$result->response->SystemDate; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/get_timezones.php b/vendor/campaignmonitor/createsend-php/samples/get_timezones.php new file mode 100644 index 00000000..929dcf5a --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/get_timezones.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_General($auth); + + +$result = $wrap->get_timezones(); + +echo "Result of /api/v3.1/timezones\n
"; +if($result->was_successful()) { + echo "Got timezones\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_bounces.php b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_bounces.php new file mode 100644 index 00000000..3def5e59 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_bounces.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_JourneyEmails('Email ID to get bounces for', $auth); + +//$result = $wrap->get_journey_bounces(date('Y-m-d', strtotime('-30 days')), page, page size, order direction); +$result = $wrap->get_journey_bounces('Get bounces since', 1, 50, 'email', 'asc'); + +echo "Result of GET /api/v3.2/journeys/email/{id}/bounces\n
"; +if($result->was_successful()) { + echo "Got bounces\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_clicks.php b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_clicks.php new file mode 100644 index 00000000..b1b16c9e --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_clicks.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_JourneyEmails('Email ID to get clicks for', $auth); + +//$result = $wrap->get_journey_clicks(date('Y-m-d', strtotime('-30 days')), page, page size, order direction); +$result = $wrap->get_journey_clicks('Get clicks since', 1, 50, 'email', 'asc'); + +echo "Result of GET /api/v3.2/journeys/email/{id}/clicks\n
"; +if($result->was_successful()) { + echo "Got clicks\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_opens.php b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_opens.php new file mode 100644 index 00000000..a303d031 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_opens.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_JourneyEmails('Email ID to get opens for', $auth); + +//$result = $wrap->get_journey_opens(date('Y-m-d', strtotime('-30 days')), page, page size, order direction); +$result = $wrap->get_journey_opens('Get opens since', 1, 50, 'email', 'asc'); + +echo "Result of GET /api/v3.2/journeys/email/{id}/opens\n
"; +if($result->was_successful()) { + echo "Got opens\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_recipients.php b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_recipients.php new file mode 100644 index 00000000..a08caf47 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_recipients.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_JourneyEmails('Email ID to get recipients for', $auth); + +//$result = $wrap->get_journey_recipients(date('Y-m-d', strtotime('-30 days')), page, page size, order direction); +$result = $wrap->get_journey_recipients('Get recipients since', 1, 50, 'email', 'asc'); + +echo "Result of GET /api/v3.2/journeys/email/{id}/recipients\n
"; +if($result->was_successful()) { + echo "Got recipients\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_summary.php b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_summary.php new file mode 100644 index 00000000..41b5fd10 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_summary.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Journeys('Journey ID to get the summary of', $auth); +$result = $wrap->get_summary(); + +echo "Result of GET /api/v3.2/journeys/{id}\n
"; +if($result->was_successful()) { + echo "Got summary\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_unsubscribes.php b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_unsubscribes.php new file mode 100644 index 00000000..d3741830 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/journeys/get_journey_unsubscribes.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_JourneyEmails('Email ID to get unsubscribes for', $auth); + +//$result = $wrap->get_journey_unsubscribes(date('Y-m-d', strtotime('-30 days')), page, page size, order direction); +$result = $wrap->get_journey_unsubscribes('Get unsubscribes since', 1, 50, 'email', 'asc'); + +echo "Result of GET /api/v3.2/journeys/email/{id}/unsubscribes\n
"; +if($result->was_successful()) { + echo "Got unsubscribes\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/activate_webhook.php b/vendor/campaignmonitor/createsend-php/samples/list/activate_webhook.php new file mode 100644 index 00000000..69a8db38 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/activate_webhook.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->activate_webhook('Webhook ID'); + +echo "Result of PUT /api/v3.1/lists/{ID}/webhooks/{WHID}/activate\n
"; +if($result->was_successful()) { + echo "Activated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/create.php b/vendor/campaignmonitor/createsend-php/samples/list/create.php new file mode 100644 index 00000000..334328e7 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/create.php @@ -0,0 +1,25 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists(NULL, $auth); + +$result = $wrap->create('Lists Client ID', array( + 'Title' => 'List Title', + 'UnsubscribePage' => 'List unsubscribe page', + 'ConfirmedOptIn' => false, + 'ConfirmationSuccessPage' => 'List confirmation success page', + 'UnsubscribeSetting' => CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS +)); + +echo "Result of POST /api/v3.1/lists/{clientID}\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} diff --git a/vendor/campaignmonitor/createsend-php/samples/list/create_custom_field.php b/vendor/campaignmonitor/createsend-php/samples/list/create_custom_field.php new file mode 100644 index 00000000..ff2c91d4 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/create_custom_field.php @@ -0,0 +1,34 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +/* + * The DataType parameter must be one of + * CS_REST_CUSTOM_FIELD_TYPE_TEXT + * CS_REST_CUSTOM_FIELD_TYPE_NUMBER + * CS_REST_CUSTOM_FIELD_TYPE_MULTI_SELECTONE + * CS_REST_CUSTOM_FIELD_TYPE_MULTI_SELECTMANY + * CS_REST_CUSTOM_FIELD_TYPE_DATE + * CS_REST_CUSTOM_FIELD_TYPE_COUNTRY + * CS_REST_CUSTOM_FIELD_TYPE_USSTATE + * + */ +$result = $wrap->create_custom_field(array( + 'FieldName' => 'Custom field name', + 'DataType' => CS_REST_CUSTOM_FIELD_TYPE_MULTI_SELECTONE, + 'Options' => array('First option', 'Second Option') +)); + +echo "Result of POST /api/v3.1/lists/{ID}/customfields\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/create_webhook.php b/vendor/campaignmonitor/createsend-php/samples/list/create_webhook.php new file mode 100644 index 00000000..93a6bd9d --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/create_webhook.php @@ -0,0 +1,33 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +/* + * The Events array must contain a combination of + * CS_REST_LIST_WEBHOOK_SUBSCRIBE + * CS_REST_LIST_WEBHOOK_DEACTIVATE + * CS_REST_LIST_WEBHOOK_UPDATE + * + * The payload format must be one of + * CS_REST_WEBHOOK_FORMAT_JSON or + * CS_REST_WEBHOOK_FORMAT_XML + */ +$result = $wrap->create_webhook(array( + 'Events' => array(CS_REST_LIST_WEBHOOK_SUBSCRIBE, CS_REST_LIST_WEBHOOK_DEACTIVATE), + 'Url' => 'http://www.example.com/webhook_receiver.php', + 'PayloadFormat' => CS_REST_WEBHOOK_FORMAT_JSON +)); + +echo "Result of POST /api/v3.1/lists/{ID}/webhooks\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/deactivate_webhook.php b/vendor/campaignmonitor/createsend-php/samples/list/deactivate_webhook.php new file mode 100644 index 00000000..500b3035 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/deactivate_webhook.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->deactivate_webhook('Webhook ID'); + +echo "Result of PUT /api/v3.1/lists/{ID}/webhooks/{WHID}/deactivate\n
"; +if($result->was_successful()) { + echo "Deactivated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/delete.php b/vendor/campaignmonitor/createsend-php/samples/list/delete.php new file mode 100644 index 00000000..651bf9de --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/delete.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->delete(); + +echo "Result of DELETE /api/v3.1/lists/{ID}\n
"; +if($result->was_successful()) { + echo "Deleted with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/delete_custom_field.php b/vendor/campaignmonitor/createsend-php/samples/list/delete_custom_field.php new file mode 100644 index 00000000..5277953f --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/delete_custom_field.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->delete_custom_field('Custom field key'); + +echo "Result of DELETE /api/v3.1/lists/{ID}/{Key}\n
"; +if($result->was_successful()) { + echo "Deleted with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/delete_webhook.php b/vendor/campaignmonitor/createsend-php/samples/list/delete_webhook.php new file mode 100644 index 00000000..bfb29b2c --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/delete_webhook.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->delete_webhook('Webhook ID'); + +echo "Result of DELETE /api/v3.1/lists/{ID}/webhooks/{WHID}\n
"; +if($result->was_successful()) { + echo "Deleted with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get.php b/vendor/campaignmonitor/createsend-php/samples/list/get.php new file mode 100644 index 00000000..96dc297a --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get(); + +echo "Result of GET /api/v3.1/lists/{ID}\n
"; +if($result->was_successful()) { + echo "Got list details\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_active_subscribers.php b/vendor/campaignmonitor/createsend-php/samples/list/get_active_subscribers.php new file mode 100644 index 00000000..e3039d18 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_active_subscribers.php @@ -0,0 +1,24 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +//The 6th argument will return the tracking preference of the subscribers - 'ConsentToTrack' +$result = $wrap->get_active_subscribers('Added since', 1, 50, 'email', 'asc', true); + +//$result = $wrap->get_active_subscribers(date('Y-m-d', strtotime('-30 days')), +// page number, page size, order by, order direction); + +echo "Result of GET /api/v3.3/lists/{ID}/active\n
"; +if($result->was_successful()) { + echo "Got subscribers\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_bounced_subscribers.php b/vendor/campaignmonitor/createsend-php/samples/list/get_bounced_subscribers.php new file mode 100644 index 00000000..f921a1d0 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_bounced_subscribers.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_bounced_subscribers('Bounced Since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_bounced_subscribers(date('Y-m-d', strtotime('-30 days')), +// page number, page size, order by, order direction); + +echo "Result of GET /api/v3.3/lists/{ID}/bounced\n
"; +if($result->was_successful()) { + echo "Got subscribers\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_custom_fields.php b/vendor/campaignmonitor/createsend-php/samples/list/get_custom_fields.php new file mode 100644 index 00000000..e77f0690 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_custom_fields.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_custom_fields(); + +echo "Result of GET /api/v3.1/lists/{ID}/customfields\n
"; +if($result->was_successful()) { + echo "Got custom fields\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_deleted_subscribers.php b/vendor/campaignmonitor/createsend-php/samples/list/get_deleted_subscribers.php new file mode 100644 index 00000000..0503e319 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_deleted_subscribers.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_deleted_subscribers('Deleted Since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_bounced_subscribers(date('Y-m-d', strtotime('-30 days')), +// page number, page size, order by, order direction); + +echo "Result of GET /api/v3.3/lists/{ID}/deleted\n
"; +if($result->was_successful()) { + echo "Got subscribers\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_segments.php b/vendor/campaignmonitor/createsend-php/samples/list/get_segments.php new file mode 100644 index 00000000..20747dea --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_segments.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_segments(); + +echo "Result of GET /api/v3.1/lists/{ID}/segments\n
"; +if($result->was_successful()) { + echo "Got custom fields\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_stats.php b/vendor/campaignmonitor/createsend-php/samples/list/get_stats.php new file mode 100644 index 00000000..b97dce1c --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_stats.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_stats(); + +echo "Result of GET /api/v3.1/lists/{ID}/stats\n
"; +if($result->was_successful()) { + echo "Got list stats\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_unconfirmed_subscribers.php b/vendor/campaignmonitor/createsend-php/samples/list/get_unconfirmed_subscribers.php new file mode 100644 index 00000000..2aadf88a --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_unconfirmed_subscribers.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_unconfirmed_subscribers('Added since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_active_subscribers(date('Y-m-d', strtotime('-30 days')), +// page number, page size, order by, order direction); + +echo "Result of GET /api/v3.3/lists/{ID}/unconfirmed\n
"; +if($result->was_successful()) { + echo "Got subscribers\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_unsubscribed_subscribers.php b/vendor/campaignmonitor/createsend-php/samples/list/get_unsubscribed_subscribers.php new file mode 100644 index 00000000..5f72e85a --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_unsubscribed_subscribers.php @@ -0,0 +1,22 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_unsubscribed_subscribers('Unsubscribed Since', 1, 50, 'email', 'asc'); +//$result = $wrap->get_bounced_subscribers(date('Y-m-d', strtotime('-30 days')), +// page number, page size, order by, order direction); + +echo "Result of GET /api/v3.3/lists/{ID}/unsubscribed\n
"; +if($result->was_successful()) { + echo "Got subscribers\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/get_webhooks.php b/vendor/campaignmonitor/createsend-php/samples/list/get_webhooks.php new file mode 100644 index 00000000..45bd818c --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/get_webhooks.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->get_webhooks(); + +echo "Result of GET /api/v3.1/lists/{ID}/webhooks\n
"; +if($result->was_successful()) { + echo "Got list webhooks\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/list_webhook_receiver.php b/vendor/campaignmonitor/createsend-php/samples/list/list_webhook_receiver.php new file mode 100644 index 00000000..a528832d --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/list_webhook_receiver.php @@ -0,0 +1,31 @@ +deserialise($raw_post); + +$parsed_log = fopen('parsed_log.txt', 'a') or die('Can\'t open parsed log'); + +fwrite($parsed_log, date('H:i:s').' Got hook data for list: '.$deserialised_data->ListID."\n"); + +// And now just do something with the data +foreach ($deserialised_data->Events as $event) { + fwrite($parsed_log, 'Got '.$event->Type.' event for: '.$event->EmailAddress."\n"); + fwrite($parsed_log, var_export($event, true)); +} + +fclose($parsed_log); +?> diff --git a/vendor/campaignmonitor/createsend-php/samples/list/test_webhook.php b/vendor/campaignmonitor/createsend-php/samples/list/test_webhook.php new file mode 100644 index 00000000..84e1028e --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/test_webhook.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->test_webhook('Webhook ID'); + +echo "Result of POST /api/v3.1/lists/{ID}/webhooks/{WHID}/test\n
"; +if($result->was_successful()) { + echo "Test was successful"; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/update.php b/vendor/campaignmonitor/createsend-php/samples/list/update.php new file mode 100644 index 00000000..3f7702f8 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/update.php @@ -0,0 +1,27 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->update(array( + 'Title' => 'List Title', + 'UnsubscribePage' => 'List unsubscribe page', + 'ConfirmedOptIn' => true, + 'ConfirmationSuccessPage' => 'List confirmation success page', + 'UnsubscribeSetting' => CS_REST_LIST_UNSUBSCRIBE_SETTING_ALL_CLIENT_LISTS, + 'AddUnsubscribesToSuppList' => true, + 'ScrubActiveWithSuppList' => true +)); + +echo "Result of PUT /api/v3.1/lists/{ID}\n
"; +if($result->was_successful()) { + echo "Updated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/update_custom_field.php b/vendor/campaignmonitor/createsend-php/samples/list/update_custom_field.php new file mode 100644 index 00000000..531c2bb4 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/update_custom_field.php @@ -0,0 +1,25 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->update_custom_field( + '[CustomFieldKey]', + array( + 'FieldName' => 'new field name', + 'VisibleInPreferenceCenter' => true + ) +); + +echo "Result of PUT /api/v3.1/lists/{ID}/customfields/{fieldkey}\n
"; +if($result->was_successful()) { + echo "Updated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/list/update_field_options.php b/vendor/campaignmonitor/createsend-php/samples/list/update_field_options.php new file mode 100644 index 00000000..45a88381 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/list/update_field_options.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Lists('List ID', $auth); + +$result = $wrap->update_field_options('[CustomFieldKey]', + array('Option 1', 'Option 2'), true); + +echo "Result of PUT /api/v3.1/lists/{ID}/customfields/{fieldkey}/options\n
"; +if($result->was_successful()) { + echo "Updated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/add_rule.php b/vendor/campaignmonitor/createsend-php/samples/segment/add_rule.php new file mode 100644 index 00000000..b993a055 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/add_rule.php @@ -0,0 +1,26 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments('Segment ID', $auth); + +$result = $wrap->add_rulegroup(array( + 'Rules' => array( + array( + 'RuleType' => 'EmailAddress', + 'Clause' => 'CONTAINS example.com' + ) + ) +)); + +echo "Result of PUT /api/v3.1/segments/{segmentID}/rules\n
"; +if($result->was_successful()) { + echo "Updated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/clear_rules.php b/vendor/campaignmonitor/createsend-php/samples/segment/clear_rules.php new file mode 100644 index 00000000..dc987866 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/clear_rules.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments('Segment ID', $auth); + +$result = $wrap->clear_rules(); + +echo "Result of DELETE /api/v3.1/segments/{ID}/rules\n
"; +if($result->was_successful()) { + echo "Cleared with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/create.php b/vendor/campaignmonitor/createsend-php/samples/segment/create.php new file mode 100644 index 00000000..fc899fdc --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/create.php @@ -0,0 +1,43 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments(NULL, $auth); + +$result = $wrap->create('Segments List ID', array( + 'Title' => 'Segment Title', + 'RuleGroups' => array( + array( + 'Rules' => array( + array( + 'RuleType' => 'EmailAddress', + 'Clause' => 'CONTAINS example.com' + ) + ) + ), + array( + 'Rules' => array( + array( + 'RuleType' => '[customfield]', + 'Clause' => 'PROVIDED' + ), + array( + 'RuleType' => '[customfield]', + 'Clause' => 'EQUALS 1' + ) + ) + ) + ) +)); + +echo "Result of POST /api/v3.1/segments/{listID}\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/delete.php b/vendor/campaignmonitor/createsend-php/samples/segment/delete.php new file mode 100644 index 00000000..086aab7c --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/delete.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments('Segment ID', $auth); + + +$result = $wrap->delete(); + +echo "Result of DELETE /api/v3.1/segments/{ID}\n
"; +if($result->was_successful()) { + echo "Deleted with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/get.php b/vendor/campaignmonitor/createsend-php/samples/segment/get.php new file mode 100644 index 00000000..7da3b896 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/get.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments('Segment ID', $auth); + +$result = $wrap->get(); + +echo "Result of GET /api/v3.1/segments/{ID}\n
"; +if($result->was_successful()) { + echo "Got segment details\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/get_subscribers.php b/vendor/campaignmonitor/createsend-php/samples/segment/get_subscribers.php new file mode 100644 index 00000000..74ad7e64 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/get_subscribers.php @@ -0,0 +1,24 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments('Segment ID', $auth); + +//The 6th argument will return the tracking preference of the subscribers - 'ConsentToTrack' +$result = $wrap->get_subscribers('Added since', 1, 50, 'email', 'asc', true); + +//$result = $wrap->get_subscribers(date('Y-m-d', strtotime('-30 days')), +// page number, page size, order by, order description); + +echo "Result of GET /api/v3.3/segments/{segment id}/active\n
"; +if($result->was_successful()) { + echo "Got subscribers\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/segment/update.php b/vendor/campaignmonitor/createsend-php/samples/segment/update.php new file mode 100644 index 00000000..2e7df69b --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/segment/update.php @@ -0,0 +1,39 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Segments('Segment ID', $auth); + +$result = $wrap->update(array( + 'Title' => 'Segment Title', + 'RuleGroups' => array( + array( + 'Rules' => array( + array( + 'RuleType' => 'EmailAddress', + 'Clause' => 'CONTAINS example.com' + ) + ) + ), + array( + 'Rules' => array( + array( + 'RuleType' => '[customfield]', + 'Clause' => 'EQUALS 1' + ) + ) + ) + ) +)); + +echo "Result of PUT /api/v3.1/segments/{segmentID}\n
"; +if($result->was_successful()) { + echo "Updated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/add.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/add.php new file mode 100644 index 00000000..982d912b --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/add.php @@ -0,0 +1,41 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); +$result = $wrap->add(array( + 'EmailAddress' => 'Subscriber email', + 'Name' => 'Subscriber name', + 'CustomFields' => array( + array( + 'Key' => 'Field 1 Key', + 'Value' => 'Field Value' + ), + array( + 'Key' => 'Field 2 Key', + 'Value' => 'Field Value' + ), + array( + 'Key' => 'Multi Option Field 1', + 'Value' => 'Option 1' + ), + array( + 'Key' => 'Multi Option Field 1', + 'Value' => 'Option 2' + ) + ), + 'ConsentToTrack' => 'yes', + 'Resubscribe' => true +)); + +echo "Result of POST /api/v3.1/subscribers/{list id}.{format}\n
"; +if($result->was_successful()) { + echo "Subscribed with code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/delete.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/delete.php new file mode 100644 index 00000000..303acf40 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/delete.php @@ -0,0 +1,18 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); +$result = $wrap->delete('Email Address'); + +echo "Result of DELETE /api/v3.1/subscribers/{list id}.{format}?email={emailAddress}\n
"; +if($result->was_successful()) { + echo "Unsubscribed with code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/get.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/get.php new file mode 100644 index 00000000..b3fc935e --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/get.php @@ -0,0 +1,21 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); + +//The 2nd argument will return the tracking preference of the subscriber - 'ConsentToTrack' +$result = $wrap->get('Email address', true); + +echo "Result of GET /api/v3.3/subscribers/{list id}.{format}?email={email}\n
"; +if($result->was_successful()) { + echo "Got subscriber
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/get_history.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/get_history.php new file mode 100644 index 00000000..6b79d930 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/get_history.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); +$result = $wrap->get_history('Email address'); + +echo "Result of GET /api/v3.1/subscribers/{list id}/history.{format}?email={email}\n
"; +if($result->was_successful()) { + echo "Got subscriber history
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/import.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/import.php new file mode 100644 index 00000000..d9100b0b --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/import.php @@ -0,0 +1,79 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); + +$result = $wrap->import(array( + array( + 'EmailAddress' => 'Subscriber email', + 'Name' => 'Subscriber name', + 'CustomFields' => array( + array( + 'Key' => 'Field 1 Key', + 'Value' => 'Field Value' + ), + array( + 'Key' => 'Field 2 Key', + 'Value' => 'Field Value' + ), + array( + 'Key' => 'Multi Option Field 1', + 'Value' => 'Option 1' + ), + array( + 'Key' => 'Multi Option Field 1', + 'Value' => 'Option 2' + ) + ), + 'ConsentToTrack' => 'yes', + ), + array( + 'EmailAddress' => '2nd Subscriber email', + 'Name' => '2nd Subscriber name', + 'CustomFields' => array( + array( + 'Key' => 'Field 1 Key', + 'Value' => 'Field Value' + ), + array( + 'Key' => 'Field 2 Key', + 'Value' => 'Field Value' + ), + array( + 'Key' => 'Multi Option Field 1', + 'Value' => 'Option 1' + ), + array( + 'Key' => 'Multi Option Field 1', + 'Value' => 'Option 2' + ) + ), + 'ConsentToTrack' => 'yes', + ) +), false); + +echo "Result of POST /api/v3.1/subscribers/{list id}/import.{format}\n
"; +if($result->was_successful()) { + echo "Subscribed with results
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; + + if($result->response->ResultData->TotalExistingSubscribers > 0) { + echo 'Updated '.$result->response->ResultData->TotalExistingSubscribers.' existing subscribers in the list'; + } else if($result->response->ResultData->TotalNewSubscribers > 0) { + echo 'Added '.$result->response->ResultData->TotalNewSubscribers.' to the list'; + } else if(count($result->response->ResultData->DuplicateEmailsInSubmission) > 0) { + echo $result->response->ResultData->DuplicateEmailsInSubmission.' were duplicated in the provided array.'; + } + + echo 'The following emails failed to import correctly.
';
+    var_dump($result->response->ResultData->FailureDetails);
+}
+echo '
'; diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/unsubscribe.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/unsubscribe.php new file mode 100644 index 00000000..07443e91 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/unsubscribe.php @@ -0,0 +1,18 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); +$result = $wrap->unsubscribe('Email Address'); + +echo "Result of GET /api/v3.1/subscribers/{list id}/unsubscribe.{format}\n
"; +if($result->was_successful()) { + echo "Unsubscribed with code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/subscriber/update.php b/vendor/campaignmonitor/createsend-php/samples/subscriber/update.php new file mode 100644 index 00000000..5f3c79be --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/subscriber/update.php @@ -0,0 +1,29 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Subscribers('Your list ID', $auth); +$result = $wrap->update('Old Email Address', array( + 'EmailAddress' => 'New Email Address', + 'Name' => 'Subscriber name', + 'CustomFields' => array( + array( + 'Key' => 'Field Key', + 'Value' => 'Field Value' + ) + ), + 'ConsentToTrack' => 'unchanged', + 'Resubscribe' => true +)); + +echo "Result of PUT /api/v3.1/subscribers/{list id}.{format}?email={email}\n
"; +if($result->was_successful()) { + echo "Subscribed with code ".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/template/create.php b/vendor/campaignmonitor/createsend-php/samples/template/create.php new file mode 100644 index 00000000..7170acaa --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/template/create.php @@ -0,0 +1,23 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Templates(NULL, $auth); + +$result = $wrap->create('Templates Client ID', array( + 'Name' => 'Template Name', + 'HtmlPageURL' => 'Template HTML Url', + 'ZipFileURL' => 'Template Images Zip URL' +)); + +echo "Result of POST /api/v3.1/templates/{clientID}\n
"; +if($result->was_successful()) { + echo "Created with ID\n
".$result->response; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/template/delete.php b/vendor/campaignmonitor/createsend-php/samples/template/delete.php new file mode 100644 index 00000000..0031e5aa --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/template/delete.php @@ -0,0 +1,19 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Templates('Template ID', $auth); + +$result = $wrap->delete(); + +echo "Result of DELETE /api/v3.1/templates/{ID}\n
"; +if($result->was_successful()) { + echo "Deleted with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/template/get.php b/vendor/campaignmonitor/createsend-php/samples/template/get.php new file mode 100644 index 00000000..5fcc7863 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/template/get.php @@ -0,0 +1,20 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Templates('Template ID', $auth); + +$result = $wrap->get(); + +echo "Result of GET /api/v3.1/templates/{ID}\n
"; +if($result->was_successful()) { + echo "Got template details\n
";
+    var_dump($result->response);
+} else {
+    echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+}
+echo '
'; \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/template/update.php b/vendor/campaignmonitor/createsend-php/samples/template/update.php new file mode 100644 index 00000000..048f6ce8 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/template/update.php @@ -0,0 +1,23 @@ + 'your access token', + 'refresh_token' => 'your refresh token'); +$wrap = new CS_REST_Templates('Template ID', $auth); + +$result = $wrap->update(array( + 'Name' => 'Template Name', + 'HtmlPageURL' => 'Template HTML Url', + 'ZipFileURL' => 'Template Images Zip URL' +)); + +echo "Result of PUT /api/v3.1/templates/{ID}\n
"; +if($result->was_successful()) { + echo "Updated with code\n
".$result->http_status_code; +} else { + echo 'Failed with code '.$result->http_status_code."\n
";
+    var_dump($result->response);
+    echo '
'; +} \ No newline at end of file diff --git a/vendor/campaignmonitor/createsend-php/samples/transactional/classic_groups.php b/vendor/campaignmonitor/createsend-php/samples/transactional/classic_groups.php new file mode 100644 index 00000000..f025362b --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/transactional/classic_groups.php @@ -0,0 +1,12 @@ + "Your API Key"); + +$wrap = new CS_REST_Transactional_ClassicEmail($auth, $client_id); + +echo "Get the list of classic groups...\n"; +$result = $wrap->groups(); +var_dump($result->response); + diff --git a/vendor/campaignmonitor/createsend-php/samples/transactional/classic_send.php b/vendor/campaignmonitor/createsend-php/samples/transactional/classic_send.php new file mode 100644 index 00000000..97854540 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/transactional/classic_send.php @@ -0,0 +1,63 @@ + "Your API Key"); +$wrap = new CS_REST_Transactional_ClassicEmail($auth, $client_id); + +echo "\nSending a simple message...\n"; + +$simple_message = array( + "From" => "support@example.com", + "Subject" => "Test from createsend-php", + "To" => "Joe Bloggs ", + "HTML" => "This is the HTML message body with a link." +); +$group_name = 'PHP test group'; # optional but great for reporting, should not be unique per message +$consent_to_track = 'yes'; # Valid: 'yes', 'no', 'unchanged' + +$result = $wrap->send($simple_message, $group_name,$consent_to_track); +echo "\nSent! Here's the response:\n"; +var_dump($result->response); + +echo "\nSending a message with all the options...\n"; + +$complex_message = array( + "From" => "ed@example.com", + "ReplyTo" => "support@example.com", + "Subject" => "Test from createsend-php", + "To" => array( + "Sam Jones ", + "jane@example.org" + ), + "CC" => array( + "Mike ", + "Sally Perlis " + ), + "BCC" => array( + "tim@example.com", + "allison@example.com", + ), + "HTML" => "This is the HTML message body with a link.", + "Text" => "Instead of using the auto-generated text from the HTML, you can supply your own.", + "Attachments" => array( + array( + "Name" => "filename.gif", + "Type" => "image/gif", + "Content" => "R0lGODlhIAAgAKIAAP8AAJmZADNmAMzMAP//AAAAAP///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwMTQgNzkuMTU2Nzk3LCAyMDE0LzA4LzIwLTA5OjUzOjAyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowNzZGOUNGOUVDRDIxMUU0ODM2RjhGMjNCMTcxN0I2RiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowNzZGOUNGQUVDRDIxMUU0ODM2RjhGMjNCMTcxN0I2RiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA3NkY5Q0Y3RUNEMjExRTQ4MzZGOEYyM0IxNzE3QjZGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA3NkY5Q0Y4RUNEMjExRTQ4MzZGOEYyM0IxNzE3QjZGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAACAAIAAAA5loutz+MKpSpIWU3r1KCBW3eYQmWgWhmiemEgPbNqk6xDOd1XGYV77UzTfbTWC4nAHYQRKLu1VSuXxlpsodAFDAZrfcIbXDFXqhNacoQ3vZpuxHSJZ2zufyTqcunugdd00vQ0F4chQCAgYCaTcxiYuMMhGJFG89kYpFl5MzkoRPnpJskFSaDqctRoBxHEQsdGs0f7Qjq3utDwkAOw==" + ) + ) +); +$group_name = "PHP test group"; # optional, great for reporting, should not be unique message +$add_recipients_to_subscriber_list_ID = "6d0366fcee146ab9bdaf3247446bbfdd"; # optional, make sure you have permission +$consent_to_track = 'yes'; # Valid: 'yes', 'no', 'unchanged' + +$options = array( + "TrackOpens" => true, + "TrackClicks" => true, + "InlineCSS" => true, +); # all are true by default, but you can override +$result = $wrap->send($complex_message, $group_name, $consent_to_track, $add_recipients_to_subscriber_list_ID, $options); +echo "\nSent! Here's the response:\n"; +var_dump($result->response); + diff --git a/vendor/campaignmonitor/createsend-php/samples/transactional/smart_details.php b/vendor/campaignmonitor/createsend-php/samples/transactional/smart_details.php new file mode 100644 index 00000000..69709e63 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/transactional/smart_details.php @@ -0,0 +1,12 @@ + "Your API Key"); + +$smart_email_id = "Smart Email ID goes here"; #grab it from the URL +$wrap = new CS_REST_Transactional_SmartEmail($smart_email_id, $auth); + +echo "\nGetting the details of the smart email...\n"; +$result = $wrap->get_details($smart_email_id); +var_dump($result->response); + diff --git a/vendor/campaignmonitor/createsend-php/samples/transactional/smart_list.php b/vendor/campaignmonitor/createsend-php/samples/transactional/smart_list.php new file mode 100644 index 00000000..1a2fa511 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/transactional/smart_list.php @@ -0,0 +1,21 @@ + "Your API Key"); +$wrap = new CS_REST_Transactional_SmartEmail(NULL, $auth, $client_id); + +echo "\nGetting the list of smart emails...\n"; + +$result = $wrap->get_list(); +echo "Found " . count($result->response) . " smart emails, here's the first in the list:\n"; +var_dump($result->response); + + +echo "\nGetting the list smart emails, filtered by status...\n"; + +$total = $wrap->get_list(array("status" => 'all'))->response; +$active = $wrap->get_list(array("status" => 'active'))->response; +$draft = $wrap->get_list(array("status" => 'draft'))->response; +echo "Found " . count($active) . " active and " . count($draft) . " draft smart emails, for a total of " . count($total) . " smart emails.\n"; + diff --git a/vendor/campaignmonitor/createsend-php/samples/transactional/smart_send.php b/vendor/campaignmonitor/createsend-php/samples/transactional/smart_send.php new file mode 100644 index 00000000..4cad6328 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/transactional/smart_send.php @@ -0,0 +1,56 @@ + "Your API Key"); +$smart_email_id = "Smart Email ID goes here"; #grab it from the URL +$wrap = new CS_REST_Transactional_SmartEmail($smart_email_id, $auth); + +echo "\nSending a simple smart email...\n"; + +$simple_message = array( + "To" => "Jane Bloggs ", + "Data" => array( + "username" => "janebloggs" + ), +); +$consent_to_track = 'yes'; # Valid: 'yes', 'no', 'unchanged' +$result = $wrap->send($simple_message, $consent_to_track); +echo "\nSent! Here's the response:\n"; +var_dump($result->response); + + +echo "\nSending a message with all the options...\n"; + +$complex_message = array( + "To" => array( + "Sam Jones ", + "Phil Oye ", + "jane@example.org" + ), + "CC" => array( + "Mike ", + "Sally Perlis " + ), + "BCC" => array( + "tim@example.com", + "allison@example.com" + ), + "Data" => array( + "username" => "janebloggs" + ), + "Attachments" => array( + array( + "Name" => 'filename.gif', + "Type" => 'image/gif', + "Content" => 'R0lGODlhIAAgAKIAAP8AAJmZADNmAMzMAP//AAAAAP///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwMTQgNzkuMTU2Nzk3LCAyMDE0LzA4LzIwLTA5OjUzOjAyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowNzZGOUNGOUVDRDIxMUU0ODM2RjhGMjNCMTcxN0I2RiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowNzZGOUNGQUVDRDIxMUU0ODM2RjhGMjNCMTcxN0I2RiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA3NkY5Q0Y3RUNEMjExRTQ4MzZGOEYyM0IxNzE3QjZGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA3NkY5Q0Y4RUNEMjExRTQ4MzZGOEYyM0IxNzE3QjZGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAACAAIAAAA5loutz+MKpSpIWU3r1KCBW3eYQmWgWhmiemEgPbNqk6xDOd1XGYV77UzTfbTWC4nAHYQRKLu1VSuXxlpsodAFDAZrfcIbXDFXqhNacoQ3vZpuxHSJZ2zufyTqcunugdd00vQ0F4chQCAgYCaTcxiYuMMhGJFG89kYpFl5MzkoRPnpJskFSaDqctRoBxHEQsdGs0f7Qjq3utDwkAOw==' + ) + ) +); + +$add_recipients_to_subscriber_list = true; +$consent_to_track = 'yes'; # Valid: 'yes', 'no', 'unchanged' + +$result = $wrap->send($complex_message, $consent_to_track, $add_recipients_to_subscriber_list); +echo "\nSent! Here's the response:\n"; +var_dump($result->response); + diff --git a/vendor/campaignmonitor/createsend-php/samples/transactional/timeline.php b/vendor/campaignmonitor/createsend-php/samples/transactional/timeline.php new file mode 100644 index 00000000..a41076d0 --- /dev/null +++ b/vendor/campaignmonitor/createsend-php/samples/transactional/timeline.php @@ -0,0 +1,81 @@ + "Your API Key"); +$wrap = new CS_REST_Transactional_Timeline($auth, $client_id); + + +echo "\nGetting the statistics with the default parameters...\n"; +$result = $wrap->statistics(); +var_dump($result->response); + + +echo "\nGetting the statistics, filtered to a classic group...\n"; +$result = $wrap->statistics(array( + "from" => "2015-01-01", + "to" => "2015-06-30", + "timezone" => "utc", + "group" => "PHP Test Group" +)); +var_dump($result->response); + + +echo "\nGetting the statistics, filtered to a smart email...\n"; +$smart_email_id = "94b2a1a5-6754-416b-a87f-1edb81c460a2"; #grab it from the URL +$result = $wrap->statistics(array( + "from" => "2015-01-01", + "to" => "2015-06-30", + "timezone" => "client", + "smartEmailID" => $smart_email_id +)); +var_dump($result->response); + + +echo "\nGetting the most recent sent messages...\n"; +$result = $wrap->messages(); +$last_message_id = $result->response[0]->MessageID; +echo "\nHere's the first:\n"; +var_dump($result->response[0]); + + +echo "\nGetting the most recent messages for a smart email, with all the options...\n"; +$result = $wrap->messages(array( + "status" => 'all', + "count" => 200, + "sentBeforeID" => NULL, # message ID + "sentAfterID" => NULL, # message ID + "smartEmailID" => '94b2a1a5-6754-416b-a87f-1edb81c460a2', +)); +$last_message_id = $result->response[0]->MessageID; +echo "\nHere's the first:\n"; +var_dump($result->response[0]); + + +echo "\nGetting the most recent messages for a classic email, with all the options...\n"; +$result = $wrap->messages(array( + "status" => 'all', + "count" => 200, + "sentBeforeID" => NULL, # message ID + "sentAfterID" => NULL, # message ID + "group" => 'PHP test group', +)); +$last_message_id = $result->response[0]->MessageID; +echo "\nHere's the first:\n"; +var_dump($result->response[0]); + + +echo "\nGetting the details of the most recent message...\n"; +$result = $wrap->details($last_message_id); +var_dump($result->response); + + +echo "\nGetting the message details with details of opens and clicks...\n"; +$result = $wrap->details($last_message_id, true); +var_dump($result->response); + + +echo "\nResending message...\n"; +$result = $wrap->resend($last_message_id); +var_dump($result->response); + diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php new file mode 100644 index 00000000..7824d8f7 --- /dev/null +++ b/vendor/composer/ClassLoader.php @@ -0,0 +1,579 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..51e734a7 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..8fecc148 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,28 @@ + $vendorDir . '/sendgrid/sendgrid/lib/BaseSendGridClientInterface.php', + 'CS_REST_Administrators' => $vendorDir . '/campaignmonitor/createsend-php/csrest_administrators.php', + 'CS_REST_Campaigns' => $vendorDir . '/campaignmonitor/createsend-php/csrest_campaigns.php', + 'CS_REST_Clients' => $vendorDir . '/campaignmonitor/createsend-php/csrest_clients.php', + 'CS_REST_Events' => $vendorDir . '/campaignmonitor/createsend-php/csrest_events.php', + 'CS_REST_General' => $vendorDir . '/campaignmonitor/createsend-php/csrest_general.php', + 'CS_REST_JourneyEmails' => $vendorDir . '/campaignmonitor/createsend-php/csrest_journey_emails.php', + 'CS_REST_Journeys' => $vendorDir . '/campaignmonitor/createsend-php/csrest_journeys.php', + 'CS_REST_Lists' => $vendorDir . '/campaignmonitor/createsend-php/csrest_lists.php', + 'CS_REST_People' => $vendorDir . '/campaignmonitor/createsend-php/csrest_people.php', + 'CS_REST_Segments' => $vendorDir . '/campaignmonitor/createsend-php/csrest_segments.php', + 'CS_REST_Subscribers' => $vendorDir . '/campaignmonitor/createsend-php/csrest_subscribers.php', + 'CS_REST_Templates' => $vendorDir . '/campaignmonitor/createsend-php/csrest_templates.php', + 'CS_REST_Transactional_ClassicEmail' => $vendorDir . '/campaignmonitor/createsend-php/csrest_transactional_classicemail.php', + 'CS_REST_Transactional_SmartEmail' => $vendorDir . '/campaignmonitor/createsend-php/csrest_transactional_smartemail.php', + 'CS_REST_Transactional_Timeline' => $vendorDir . '/campaignmonitor/createsend-php/csrest_transactional_timeline.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'SendGrid' => $vendorDir . '/sendgrid/sendgrid/lib/SendGrid.php', + 'TwilioEmail' => $vendorDir . '/sendgrid/sendgrid/lib/TwilioEmail.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 00000000..7e0c83f5 --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,12 @@ + $vendorDir . '/alleyinteractive/wordpress-autoloader/src/class-autoloader.php', + '79f66bc0a1900f77abe4a9a299057a0a' => $vendorDir . '/starkbank/ecdsa/src/ellipticcurve.php', + 'd0b4d9ff2237dcc1a532ae9d039c0c2c' => $vendorDir . '/alleyinteractive/composer-wordpress-autoloader/src/autoload.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 00000000..15a2ff3a --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'), + 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), + 'SendGrid\\Stats\\' => array($vendorDir . '/sendgrid/sendgrid/lib/stats'), + 'SendGrid\\Mail\\' => array($vendorDir . '/sendgrid/sendgrid/lib/mail'), + 'SendGrid\\Helper\\' => array($vendorDir . '/sendgrid/sendgrid/lib/helper'), + 'SendGrid\\EventWebhook\\' => array($vendorDir . '/sendgrid/sendgrid/lib/eventwebhook'), + 'SendGrid\\Contacts\\' => array($vendorDir . '/sendgrid/sendgrid/lib/contacts'), + 'SendGrid\\' => array($vendorDir . '/sendgrid/php-http-client/lib'), + 'ComposerWordPressAutoloader\\' => array($vendorDir . '/alleyinteractive/composer-wordpress-autoloader/src'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 00000000..a58b8bb7 --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,48 @@ +register(true); + + $filesToLoad = \Composer\Autoload\ComposerStaticInit25bc4be1af5355191a5e11a0d8aebdc0::$files; + $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } + }, null, null); + foreach ($filesToLoad as $fileIdentifier => $file) { + $requireFile($fileIdentifier, $file); + } + + return $loader; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 00000000..99bec99a --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,106 @@ + __DIR__ . '/..' . '/alleyinteractive/wordpress-autoloader/src/class-autoloader.php', + '79f66bc0a1900f77abe4a9a299057a0a' => __DIR__ . '/..' . '/starkbank/ecdsa/src/ellipticcurve.php', + 'd0b4d9ff2237dcc1a532ae9d039c0c2c' => __DIR__ . '/..' . '/alleyinteractive/composer-wordpress-autoloader/src/autoload.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'T' => + array ( + 'TijsVerkoyen\\CssToInlineStyles\\' => 31, + ), + 'S' => + array ( + 'Symfony\\Component\\CssSelector\\' => 30, + 'SendGrid\\Stats\\' => 15, + 'SendGrid\\Mail\\' => 14, + 'SendGrid\\Helper\\' => 16, + 'SendGrid\\EventWebhook\\' => 22, + 'SendGrid\\Contacts\\' => 18, + 'SendGrid\\' => 9, + ), + 'C' => + array ( + 'ComposerWordPressAutoloader\\' => 28, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'TijsVerkoyen\\CssToInlineStyles\\' => + array ( + 0 => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src', + ), + 'Symfony\\Component\\CssSelector\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/css-selector', + ), + 'SendGrid\\Stats\\' => + array ( + 0 => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/stats', + ), + 'SendGrid\\Mail\\' => + array ( + 0 => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/mail', + ), + 'SendGrid\\Helper\\' => + array ( + 0 => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/helper', + ), + 'SendGrid\\EventWebhook\\' => + array ( + 0 => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/eventwebhook', + ), + 'SendGrid\\Contacts\\' => + array ( + 0 => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/contacts', + ), + 'SendGrid\\' => + array ( + 0 => __DIR__ . '/..' . '/sendgrid/php-http-client/lib', + ), + 'ComposerWordPressAutoloader\\' => + array ( + 0 => __DIR__ . '/..' . '/alleyinteractive/composer-wordpress-autoloader/src', + ), + ); + + public static $classMap = array ( + 'BaseSendGridClientInterface' => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/BaseSendGridClientInterface.php', + 'CS_REST_Administrators' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_administrators.php', + 'CS_REST_Campaigns' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_campaigns.php', + 'CS_REST_Clients' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_clients.php', + 'CS_REST_Events' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_events.php', + 'CS_REST_General' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_general.php', + 'CS_REST_JourneyEmails' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_journey_emails.php', + 'CS_REST_Journeys' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_journeys.php', + 'CS_REST_Lists' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_lists.php', + 'CS_REST_People' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_people.php', + 'CS_REST_Segments' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_segments.php', + 'CS_REST_Subscribers' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_subscribers.php', + 'CS_REST_Templates' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_templates.php', + 'CS_REST_Transactional_ClassicEmail' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_transactional_classicemail.php', + 'CS_REST_Transactional_SmartEmail' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_transactional_smartemail.php', + 'CS_REST_Transactional_Timeline' => __DIR__ . '/..' . '/campaignmonitor/createsend-php/csrest_transactional_timeline.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'SendGrid' => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/SendGrid.php', + 'TwilioEmail' => __DIR__ . '/..' . '/sendgrid/sendgrid/lib/TwilioEmail.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit25bc4be1af5355191a5e11a0d8aebdc0::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit25bc4be1af5355191a5e11a0d8aebdc0::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit25bc4be1af5355191a5e11a0d8aebdc0::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 00000000..f2557956 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,483 @@ +{ + "packages": [ + { + "name": "alleyinteractive/composer-wordpress-autoloader", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/alleyinteractive/composer-wordpress-autoloader.git", + "reference": "30acf9e3498a84af478e316ae3869fa362835695" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alleyinteractive/composer-wordpress-autoloader/zipball/30acf9e3498a84af478e316ae3869fa362835695", + "reference": "30acf9e3498a84af478e316ae3869fa362835695", + "shasum": "" + }, + "require": { + "alleyinteractive/wordpress-autoloader": "^1.1.1", + "composer-plugin-api": "^2.0", + "php": "^8.0" + }, + "require-dev": { + "composer/composer": "*", + "phpunit/phpunit": "^9.5.8", + "squizlabs/php_codesniffer": "^4.0" + }, + "time": "2023-12-06T20:21:22+00:00", + "type": "composer-plugin", + "extra": { + "class": "ComposerWordPressAutoloader\\Plugin" + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "ComposerWordPressAutoloader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Alley Interactive", + "email": "info@alley.co" + }, + { + "name": "Sean Fisher", + "email": "sean@alley.co" + } + ], + "description": "Autoload files using WordPress File Conventions using Composer", + "support": { + "issues": "https://github.com/alleyinteractive/composer-wordpress-autoloader/issues", + "source": "https://github.com/alleyinteractive/composer-wordpress-autoloader/tree/v1.1.0" + }, + "install-path": "../alleyinteractive/composer-wordpress-autoloader" + }, + { + "name": "alleyinteractive/wordpress-autoloader", + "version": "v1.1.1", + "version_normalized": "1.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/alleyinteractive/wordpress-autoloader.git", + "reference": "c7599d95f49f1cdc38fad19944a50b19ec0dd6ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alleyinteractive/wordpress-autoloader/zipball/c7599d95f49f1cdc38fad19944a50b19ec0dd6ca", + "reference": "c7599d95f49f1cdc38fad19944a50b19ec0dd6ca", + "shasum": "" + }, + "require": { + "php": "^7.4.0|^8.0|^8.1" + }, + "require-dev": { + "alleyinteractive/alley-coding-standards": "^0.3", + "phpunit/phpunit": "^9.5.8" + }, + "time": "2022-08-31T20:51:21+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/class-autoloader.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Alley Interactive", + "email": "info@alley.co" + } + ], + "description": "Autoload files using WordPress File Conventions", + "support": { + "issues": "https://github.com/alleyinteractive/wordpress-autoloader/issues", + "source": "https://github.com/alleyinteractive/wordpress-autoloader/tree/v1.1.1" + }, + "install-path": "../alleyinteractive/wordpress-autoloader" + }, + { + "name": "campaignmonitor/createsend-php", + "version": "v7.1.0", + "version_normalized": "7.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/campaignmonitor/createsend-php.git", + "reference": "00376143d8c56d78644c7ac451784ed74ccedea9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/campaignmonitor/createsend-php/zipball/00376143d8c56d78644c7ac451784ed74ccedea9", + "reference": "00376143d8c56d78644c7ac451784ed74ccedea9", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "simpletest/simpletest": "1.2.0" + }, + "time": "2024-05-28T08:51:27+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "csrest_administrators.php", + "csrest_campaigns.php", + "csrest_clients.php", + "csrest_general.php", + "csrest_events.php", + "csrest_lists.php", + "csrest_people.php", + "csrest_segments.php", + "csrest_subscribers.php", + "csrest_templates.php", + "csrest_transactional_classicemail.php", + "csrest_transactional_smartemail.php", + "csrest_transactional_timeline.php", + "csrest_journeys.php", + "csrest_journey_emails.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Toby Brain", + "email": "tobio85@gmail.com", + "role": "Developer" + } + ], + "description": "A php library which implements the complete functionality of the Campaign Monitor API.", + "homepage": "http://campaignmonitor.github.io/createsend-php/", + "keywords": [ + "api", + "campaign", + "monitor" + ], + "support": { + "issues": "https://github.com/campaignmonitor/createsend-php/issues", + "source": "https://github.com/campaignmonitor/createsend-php/tree/v7.1.0" + }, + "install-path": "../campaignmonitor/createsend-php" + }, + { + "name": "sendgrid/php-http-client", + "version": "4.1.1", + "version_normalized": "4.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/sendgrid/php-http-client.git", + "reference": "ec09bcfccabeb21d69e245a1e1c0e51f2813fc35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sendgrid/php-http-client/zipball/ec09bcfccabeb21d69e245a1e1c0e51f2813fc35", + "reference": "ec09bcfccabeb21d69e245a1e1c0e51f2813fc35", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=7.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "composer/ca-bundle": "Including this library will ensure that a valid CA bundle is available for secure connections" + }, + "time": "2023-12-14T08:50:59+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SendGrid\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Bernier", + "email": "mbernier@twilio.com" + }, + { + "name": "Elmer Thomas", + "email": "ethomas@twilio.com" + } + ], + "description": "HTTP REST client, simplified for PHP", + "homepage": "http://github.com/sendgrid/php-http-client", + "keywords": [ + "api", + "fluent", + "http", + "rest", + "sendgrid" + ], + "support": { + "source": "https://github.com/sendgrid/php-http-client/tree/4.1.1" + }, + "install-path": "../sendgrid/php-http-client" + }, + { + "name": "sendgrid/sendgrid", + "version": "8.1.2", + "version_normalized": "8.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sendgrid/sendgrid-php.git", + "reference": "6700d2cf50df38915fa2d9a03affbca58c48599f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sendgrid/sendgrid-php/zipball/6700d2cf50df38915fa2d9a03affbca58c48599f", + "reference": "6700d2cf50df38915fa2d9a03affbca58c48599f", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "php": ">=7.3", + "sendgrid/php-http-client": "~4.1", + "starkbank/ecdsa": "0.*" + }, + "replace": { + "sendgrid/sendgrid-php": "*" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "3.*", + "swaggest/json-diff": "^3.4" + }, + "time": "2024-04-18T11:09:09+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "SendGrid\\Mail\\": "lib/mail/", + "SendGrid\\Stats\\": "lib/stats/", + "SendGrid\\Helper\\": "lib/helper/", + "SendGrid\\Contacts\\": "lib/contacts/", + "SendGrid\\EventWebhook\\": "lib/eventwebhook/" + }, + "classmap": [ + "lib/BaseSendGridClientInterface.php", + "lib/SendGrid.php", + "lib/TwilioEmail.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "This library allows you to quickly and easily send emails through Twilio SendGrid using PHP.", + "homepage": "http://github.com/sendgrid/sendgrid-php", + "keywords": [ + "email", + "grid", + "send", + "sendgrid", + "twilio sendgrid" + ], + "support": { + "source": "https://github.com/sendgrid/sendgrid-php/tree/8.1.2" + }, + "install-path": "../sendgrid/sendgrid" + }, + { + "name": "starkbank/ecdsa", + "version": "0.0.5", + "version_normalized": "0.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/starkbank/ecdsa-php.git", + "reference": "484bedac47bac4012dc73df91da221f0a66845cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/starkbank/ecdsa-php/zipball/484bedac47bac4012dc73df91da221f0a66845cb", + "reference": "484bedac47bac4012dc73df91da221f0a66845cb", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "time": "2021-06-06T22:24:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/ellipticcurve.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "StarkBank", + "email": "developers@starkbank.com", + "homepage": "https://starkbank.com", + "role": "Developer" + } + ], + "description": "fast openSSL-compatible implementation of the Elliptic Curve Digital Signature Algorithm (ECDSA)", + "homepage": "https://github.com/starkbank/ecdsa-php", + "support": { + "issues": "https://github.com/starkbank/ecdsa-php/issues", + "source": "https://github.com/starkbank/ecdsa-php/tree/v0.0.5" + }, + "install-path": "../starkbank/ecdsa" + }, + { + "name": "symfony/css-selector", + "version": "v6.4.8", + "version_normalized": "6.4.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "time": "2024-05-31T14:49:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/css-selector" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "version_normalized": "2.2.7.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "time": "2023-12-08T13:03:43+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "install-path": "../tijsverkoyen/css-to-inline-styles" + } + ], + "dev": false, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 00000000..94a96e63 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,101 @@ + array( + 'name' => 'alleyinteractive/wp-newsletter-builder', + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'reference' => null, + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => false, + ), + 'versions' => array( + 'alleyinteractive/composer-wordpress-autoloader' => array( + 'pretty_version' => 'v1.1.0', + 'version' => '1.1.0.0', + 'reference' => '30acf9e3498a84af478e316ae3869fa362835695', + 'type' => 'composer-plugin', + 'install_path' => __DIR__ . '/../alleyinteractive/composer-wordpress-autoloader', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'alleyinteractive/wordpress-autoloader' => array( + 'pretty_version' => 'v1.1.1', + 'version' => '1.1.1.0', + 'reference' => 'c7599d95f49f1cdc38fad19944a50b19ec0dd6ca', + 'type' => 'library', + 'install_path' => __DIR__ . '/../alleyinteractive/wordpress-autoloader', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'alleyinteractive/wp-newsletter-builder' => array( + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'reference' => null, + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'campaignmonitor/createsend-php' => array( + 'pretty_version' => 'v7.1.0', + 'version' => '7.1.0.0', + 'reference' => '00376143d8c56d78644c7ac451784ed74ccedea9', + 'type' => 'library', + 'install_path' => __DIR__ . '/../campaignmonitor/createsend-php', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'sendgrid/php-http-client' => array( + 'pretty_version' => '4.1.1', + 'version' => '4.1.1.0', + 'reference' => 'ec09bcfccabeb21d69e245a1e1c0e51f2813fc35', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sendgrid/php-http-client', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'sendgrid/sendgrid' => array( + 'pretty_version' => '8.1.2', + 'version' => '8.1.2.0', + 'reference' => '6700d2cf50df38915fa2d9a03affbca58c48599f', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sendgrid/sendgrid', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'sendgrid/sendgrid-php' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => '*', + ), + ), + 'starkbank/ecdsa' => array( + 'pretty_version' => '0.0.5', + 'version' => '0.0.5.0', + 'reference' => '484bedac47bac4012dc73df91da221f0a66845cb', + 'type' => 'library', + 'install_path' => __DIR__ . '/../starkbank/ecdsa', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/css-selector' => array( + 'pretty_version' => 'v6.4.8', + 'version' => '6.4.8.0', + 'reference' => '4b61b02fe15db48e3687ce1c45ea385d1780fe08', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/css-selector', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'tijsverkoyen/css-to-inline-styles' => array( + 'pretty_version' => 'v2.2.7', + 'version' => '2.2.7.0', + 'reference' => '83ee6f38df0a63106a9e4536e3060458b74ccedb', + 'type' => 'library', + 'install_path' => __DIR__ . '/../tijsverkoyen/css-to-inline-styles', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/vendor/sendgrid/php-http-client/.gitignore b/vendor/sendgrid/php-http-client/.gitignore new file mode 100644 index 00000000..9815053b --- /dev/null +++ b/vendor/sendgrid/php-http-client/.gitignore @@ -0,0 +1,19 @@ +# Composer +vendor/ +*.phar +*.lock + +# Jetbrains Idea +*.old +.idea/ + +# Environment files +.env/*.* + +# Local configs +.php_cs +.php_cs.cache +phpunit.xml + +# Build artifacts +php-http-client.zip diff --git a/vendor/sendgrid/php-http-client/.php_cs.dist b/vendor/sendgrid/php-http-client/.php_cs.dist new file mode 100644 index 00000000..c906f2ec --- /dev/null +++ b/vendor/sendgrid/php-http-client/.php_cs.dist @@ -0,0 +1,20 @@ +in(__DIR__ . '/lib'); + +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules([ + '@PSR2' => true, + '@Symfony' => true, + 'array_syntax' => ['syntax' => 'short'], + 'cast_spaces' => ['space' => 'single'], + 'yoda_style' => false, + 'concat_space' => ['spacing' => 'one'], + 'phpdoc_summary' => false, + 'combine_consecutive_unsets' => true, + 'final_internal_class' => true, + 'global_namespace_import' => ['import_classes' => false], + ]) + ->setFinder($finder); diff --git a/vendor/sendgrid/php-http-client/CHANGELOG.md b/vendor/sendgrid/php-http-client/CHANGELOG.md new file mode 100644 index 00000000..000471d6 --- /dev/null +++ b/vendor/sendgrid/php-http-client/CHANGELOG.md @@ -0,0 +1,279 @@ +# Change Log +All notable changes to this project will be documented in this file. + +This project adheres to [Semantic Versioning](http://semver.org/). + +[2023-12-14] Version 4.1.1 +-------------------------- +**Library - Chore** +- [PR #162](https://github.com/sendgrid/php-http-client/pull/162): added test for setHost. Thanks to [@tiwarishubham635](https://github.com/tiwarishubham635)! + + +[2023-12-01] Version 4.1.0 +-------------------------- +**Library - Feature** +- [PR #161](https://github.com/sendgrid/php-http-client/pull/161): added setHost for client. Thanks to [@tiwarishubham635](https://github.com/tiwarishubham635)! + +**Library - Test** +- [PR #155](https://github.com/sendgrid/php-http-client/pull/155): Adding misc as PR type. Thanks to [@rakatyal](https://github.com/rakatyal)! + +**Library - Docs** +- [PR #154](https://github.com/sendgrid/php-http-client/pull/154): Update docs to align with SendGrid Support. Thanks to [@garethpaul](https://github.com/garethpaul)! + + +[2022-05-04] Version 4.0.0 +-------------------------- +**Note:** This release contains breaking changes, check our [upgrade guide](./UPGRADE.md#2022-05-04-3xx-to-4xx) for detailed migration notes. + +**Library - Chore** +- [PR #153](https://github.com/sendgrid/php-http-client/pull/153): drop support for EOL PHP versions and add support for PHP 8. Thanks to [@childish-sambino](https://github.com/childish-sambino)! **(breaking change)** + + +[2022-03-09] Version 3.14.4 +--------------------------- +**Library - Chore** +- [PR #152](https://github.com/sendgrid/php-http-client/pull/152): push Datadog Release Metric upon deploy success. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + +[2022-02-09] Version 3.14.3 +--------------------------- +**Library - Chore** +- [PR #151](https://github.com/sendgrid/php-http-client/pull/151): add deploy steps to build library release artifacts. Thanks to [@Hunga1](https://github.com/Hunga1)! +- [PR #150](https://github.com/sendgrid/php-http-client/pull/150): add gh release to workflow. Thanks to [@shwetha-manvinkurke](https://github.com/shwetha-manvinkurke)! + + +[2022-01-26] Version 3.14.2 +--------------------------- +**Library - Chore** +- [PR #149](https://github.com/sendgrid/php-http-client/pull/149): migrate to Github actions. Thanks to [@JenniferMah](https://github.com/JenniferMah)! + + +[2022-01-12] Version 3.14.1 +--------------------------- +**Library - Chore** +- [PR #148](https://github.com/sendgrid/php-http-client/pull/148): update license year. Thanks to [@JenniferMah](https://github.com/JenniferMah)! + + +[2021-03-24] Version 3.14.0 +--------------------------- +**Library - Feature** +- [PR #136](https://github.com/sendgrid/php-http-client/pull/136): Build URL with multiple instances of the same param. Thanks to [@agh1](https://github.com/agh1)! + + +[2020-11-05] Version 3.13.0 +--------------------------- +**Library - Feature** +- [PR #101](https://github.com/sendgrid/php-http-client/pull/101): Allows for a user to utilize self-signed certificates. Thanks to [@davcpas1234](https://github.com/davcpas1234)! + + +[2020-10-14] Version 3.12.0 +--------------------------- +**Library - Feature** +- [PR #103](https://github.com/sendgrid/php-http-client/pull/103): Throw an InvalidRequest whenever a curl request fails. Thanks to [@colinodell](https://github.com/colinodell)! + + +[2020-08-19] Version 3.11.1 +--------------------------- +**Library - Docs** +- [PR #116](https://github.com/sendgrid/php-http-client/pull/116): Add first-timers.md for newcomers. Thanks to [@daniloff200](https://github.com/daniloff200)! + +**Library - Chore** +- [PR #145](https://github.com/sendgrid/php-http-client/pull/145): update GitHub branch references to use HEAD. Thanks to [@thinkingserious](https://github.com/thinkingserious)! + + +[2020-07-22] Version 3.11.0 +--------------------------- +**Library - Test** +- [PR #120](https://github.com/sendgrid/php-http-client/pull/120): test enhancements. Thanks to [@peter279k](https://github.com/peter279k)! + +**Library - Feature** +- [PR #109](https://github.com/sendgrid/php-http-client/pull/109): automatic code style checking. Thanks to [@misantron](https://github.com/misantron)! + + +[2020-06-24] Version 3.10.8 +--------------------------- +**Library - Fix** +- [PR #143](https://github.com/sendgrid/php-http-client/pull/143): Composer configuration, typos and type hints. Thanks to [@kampalex](https://github.com/kampalex)! + + +[2020-06-10] Version 3.10.7 +--------------------------- +**Library - Fix** +- [PR #144](https://github.com/sendgrid/php-http-client/pull/144): replace Throwable with Exception. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + +[2020-04-29] Version 3.10.6 +--------------------------- +**Library - Fix** +- [PR #141](https://github.com/sendgrid/php-http-client/pull/141): add the singular 'suppression' method. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + +[2020-03-18] Version 3.10.5 +--------------------------- +**Library - Docs** +- [PR #111](https://github.com/sendgrid/php-http-client/pull/111): run .md files through grammarly. Thanks to [@redbrickone](https://github.com/redbrickone)! + + +[2020-03-04] Version 3.10.4 +--------------------------- +**Library - Chore** +- [PR #140](https://github.com/sendgrid/php-http-client/pull/140): add PHP 7.4 to Travis and test with lowest dependencies. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + +[2020-02-19] Version 3.10.3 +--------------------------- +**Library - Fix** +- [PR #134](https://github.com/sendgrid/php-http-client/pull/134): Change contactsdb to marketing api #133. Thanks to [@murich](https://github.com/murich)! + + +[2020-01-22] Version 3.10.2 +--------------------------- +**Library - Docs** +- [PR #139](https://github.com/sendgrid/php-http-client/pull/139): baseline all the templated markdown docs. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + +[2020-01-09] Version 3.10.1 +--------------------------- +**Library - Chore** +- [PR #138](https://github.com/sendgrid/php-http-client/pull/138): prep the repo for automated releasing. Thanks to [@childish-sambino](https://github.com/childish-sambino)! +- [PR #135](https://github.com/sendgrid/php-http-client/pull/135): add more PHP versions to .travis.yml. Thanks to [@PaiizZ](https://github.com/PaiizZ)! + +**Library - Docs** +- [PR #122](https://github.com/sendgrid/php-http-client/pull/122): fix grammar in Readme. Thanks to [@jmauerhan](https://github.com/jmauerhan)! + + +[2019-12-11] Version 3.10.0 +--------------------------- + +**Library - Fix** +- [PR #99](https://github.com/sendgrid/php-http-client/pull/99): Throw InvalidRequest exception on invalid CURL request. Thanks to [@alextech](https://github.com/alextech)! + +**Library - Docs** +- [PR #102](https://github.com/sendgrid/php-http-client/pull/102): Create a Use Cases Directory. Thanks to [@ProZsolt](https://github.com/ProZsolt)! +- [PR #106](https://github.com/sendgrid/php-http-client/pull/106): Only mention the lowest required PHP version in README. Thanks to [@svenluijten](https://github.com/svenluijten)! + +## [3.9.6] - 2018-04-10 +### Added +- PR [#98](https://github.com/sendgrid/php-http-client/pull/98). Updated documention of `Client.php` using PHPDoc. +- Thanks to [Martijn Melchers](https://github.com/martijnmelchers) for the pull request! + +## [3.9.5] - 2018-03-26 +### Added +- Fixes [#94](https://github.com/sendgrid/php-http-client/issues/94), PR [#95](https://github.com/sendgrid/php-http-client/pull/95): CreateCurlOptions method regression tests +- Thanks to [Alexandr Ivanov](https://github.com/misantron) for the pull request! + +## [3.9.4] - 2018-03-22 +### Fixed +- Fixes [#586](https://github.com/sendgrid/sendgrid-php/issues/586), PR [#96](https://github.com/sendgrid/php-http-client/pull/96): Fix constructor function signature regression. + +## [3.9.3] - 2018-03-11 +### Fixed +- Fixes [#584](https://github.com/sendgrid/sendgrid-php/issues/584), PR [#93](https://github.com/sendgrid/php-http-client/pull/93): Don't overwrite headers set from upstream dependencies. + +## [3.9.2] - 2018-03-10 +### Fixed +- Fixes [#12](https://github.com/sendgrid/php-http-client/issues/12), PR [#91](https://github.com/sendgrid/php-http-client/pull/91): Curl Options broken as array merge does not preserve keys. + +## [3.9.1] - 2018-03-09 +### Fixed +- Fixes [#88](https://github.com/sendgrid/php-http-client/issues/88), PR [#89](https://github.com/sendgrid/php-http-client/pull/89): Restore missing function 'prepareResponse' due to bad previous merge. + +## [3.9.0] - 2018-03-08 +### Added +- PR [#24](https://github.com/sendgrid/php-http-client/pull/24): implements sending concurrent requests with curl multi, thanks to [Tuan Nguyen](https://github.com/lightbringer1991) for the PR! +- PR [#25](https://github.com/sendgrid/php-http-client/pull/25): Add description how install php-http-client manually, thanks to [Ivan](https://github.com/janczer) for the PR! +- PR [#28](https://github.com/sendgrid/php-http-client/pull/28): Create code of conduct, thanks to [Alexander Androsyuk](https://github.com/alex2sat) for the PR! +- Closes [#32](https://github.com/sendgrid/php-http-client/issues/32), PR [#33](https://github.com/sendgrid/php-http-client/pull/33): Added TROUBLESHOOTING + Debug Info, thanks to [Braunson Yager](https://github.com/Braunson) for the PR! +- Closes [#35](https://github.com/sendgrid/php-http-client/issues/35), PR [#37](https://github.com/sendgrid/php-http-client/pull/37): Update README badges, thanks to [Tim Harshman](https://github.com/goteamtim) for the PR! +- Closes [#34](https://github.com/sendgrid/php-http-client/issues/34), PR [#38](https://github.com/sendgrid/php-http-client/pull/38): Update .md files with hyphen vs underscore for page links to enhance SEO, thanks to [Eric Kates](https://github.com/positronek) for the PR! +- Closes [#39](https://github.com/sendgrid/php-http-client/issues/39), PR [#40](https://github.com/sendgrid/php-http-client/pull/40): Added Packagist badge to README, thanks to [Rakshan Shetty](https://github.com/rakshans1) for the PR! +- PR [#41](https://github.com/sendgrid/php-http-client/pull/41): Add table of contents in README.md, thanks to [thepriefy](https://github.com/thepriefy) for the PR! +- PR [#42](https://github.com/sendgrid/php-http-client/pull/42): Add SendGrid logo at the top of README.md, thanks to [thepriefy](https://github.com/thepriefy) for the PR! +- PR [#43](https://github.com/sendgrid/php-http-client/pull/43): Add License section to the README.md, thanks to [thepriefy](https://github.com/thepriefy) for the PR! +- Closes [#46](https://github.com/sendgrid/php-http-client/issues/46), PR [#47](https://github.com/sendgrid/php-http-client/pull/47): Create Pull Request Template, thanks to [Paweł Lewtak](https://github.com/pawel-lewtak) for the PR! +- Closes [#48](https://github.com/sendgrid/php-http-client/issues/48), PR [#51](https://github.com/sendgrid/php-http-client/pull/51): Added example file, updated .gitignore and README, thanks to [Diego Rocha](https://github.com/dhsrocha) for the PR! +- PR [#53](https://github.com/sendgrid/php-http-client/pull/53): README and usage example update, thanks to [Alexandr Ivanov](https://github.com/misantron) for the PR! +- PR [#55](https://github.com/sendgrid/php-http-client/pull/55): Code climate config, thanks to [Alexandr Ivanov](https://github.com/misantron) for the PR! +- Closes [#58](https://github.com/sendgrid/php-http-client/pull/58), PR [#60](https://github.com/sendgrid/php-http-client/pull/60): Adds unit test for checking file existence in repo, thanks to [Michele Orselli](https://github.com/micheleorselli) for the PR! +- Closes [#57](https://github.com/sendgrid/php-http-client/pull/57), PR [#61](https://github.com/sendgrid/php-http-client/pull/61): Adds unit test for checking year on licence, thanks to [Michele Orselli](https://github.com/micheleorselli) for the PR! +- Closes [#50](https://github.com/sendgrid/php-http-client/issues/50), PR [#62](https://github.com/sendgrid/php-http-client/pull/62): Create USAGE.md, thanks to [Nitanshu](https://github.com/nvzard) for the PR! +- Closes [#57](https://github.com/sendgrid/php-http-client/issues/57), PR [#66](https://github.com/sendgrid/php-http-client/pull/66): Add unit test for license year, thanks to [Alex](https://github.com/pushkyn) for the PR! +- Closes [#67](https://github.com/sendgrid/php-http-client/issues/67), PR [#68](https://github.com/sendgrid/php-http-client/pull/68): Add CodeCov support to .travis.yml, thanks to [Manjiri Tapaswi](https://github.com/mptap) for the PR! +- Closes [#49](https://github.com/sendgrid/php-http-client/issues/49), PR [#73](https://github.com/sendgrid/php-http-client/pull/73): Create Dockerfile, thanks to [Jessica Mauerhan](https://github.com/jmauerhan) for the PR! +- Closes [#76](https://github.com/sendgrid/php-http-client/issues/76), PR [#78](https://github.com/sendgrid/php-http-client/pull/78): Added Pull Requests Review section to CONTRIBUTE.md Closes, thanks to [Povilas Balzaravičius](https://github.com/Pawka) for the PR! +- Closes [#63](https://github.com/sendgrid/php-http-client/issues/63), PR [#79](https://github.com/sendgrid/php-http-client/pull/79): Refactor makeRequest method, thanks to [Michael Dennis](https://github.com/michaeljdennis) for the PR! +- PR [#82](https://github.com/sendgrid/php-http-client/pull/82): Add JsonSerializable type to phpDoc of $body parameter in makeRequest method, thanks to [Jan Konáš](https://github.com/jankonas) for the PR! +- PR [#85](https://github.com/sendgrid/php-http-client/pull/85): Updated the PHP Version details, thanks to [Siddhant Sharma](https://github.com/ssiddhantsharma) for the PR! +- PR [#86](https://github.com/sendgrid/php-http-client/pull/86): Add phpdoc for send method, thanks to [Vitaliy Ryaboy](https://github.com/rvitaliy) for the PR! +- PR [#84](https://github.com/sendgrid/php-http-client/pull/84): Update Docker instructions + + +### Fixed +- PR [#26](https://github.com/sendgrid/php-http-client/pull/26): README typo, thanks to [Cícero Pablo](https://github.com/ciceropablo) for the PR! +- PR [#30](https://github.com/sendgrid/php-http-client/pull/30), Fixes [#18](https://github.com/sendgrid/php-http-client/issues/18): Disable CURLOPT_FAILONERROR, thanks to [Zsolt Prontvai](https://github.com/ProZsolt) for the PR! +- PR [#44](https://github.com/sendgrid/php-http-client/pull/44): Fix Typo and add missing links to README, thanks to [Alex](https://github.com/pushkyn) for the PR! +- PR [#52](https://github.com/sendgrid/php-http-client/pull/52): Fix syntax errors in README examples, thanks to [Michael Spiss](https://github.com/michaelspiss) for the PR! +- Fixes [#56](https://github.com/sendgrid/php-http-client/pull/56), PR [#59](https://github.com/sendgrid/php-http-client/pull/59): Update LICENSE - fix year, thanks to [Alex](https://github.com/pushkyn) for the PR! +- PR [#69](https://github.com/sendgrid/php-http-client/pull/69): Remove extra parenthesis from README, thanks to [Jessica Mauerhan](https://github.com/jmauerhan) for the PR! +- PR [#71](https://github.com/sendgrid/php-http-client/pull/71): Fix typo in CONTRIBUTING.md, thanks to [thepriefy](https://github.com/thepriefy) for the PR! +- Fixes [#81](https://github.com/sendgrid/php-http-client/issues/81), PR [#87](https://github.com/sendgrid/php-http-client/pull/87): Stop using insecure option by default + +## [3.8.0] - 2017-09-13 +### Added +- Pull request #23: [Automatically retry when rate limit is reached](https://github.com/sendgrid/php-http-client/pull/23) +- Thanks to [Budi Chandra](https://github.com/budirec) for the pull request! + +## [3.7.0] - 2017-05-04 +### Added +- Pull request #19: [Added ability to get headers as associative array](https://github.com/sendgrid/php-http-client/pull/19) +- Solves issue #361: [https://github.com/sendgrid/sendgrid-php/issues/361](https://github.com/sendgrid/sendgrid-php/issues/361) +- Thanks to [Alexander](https://github.com/mazanax) for the pull request! + +## [3.6.0] - 2017-03-01 +### Added +- Pull request #16: [Pass the curlOptions to the client in buildClient](https://github.com/sendgrid/php-http-client/pull/16) +- Thanks to [Baptiste Clavié](https://github.com/Taluu) for the pull request! + +## [3.5.1] - 2016-11-17 +### Fixed +- Pull request #13, fixed issue #12: [Change from to php union operator to combine curl options](https://github.com/sendgrid/php-http-client/pull/13) +- Thanks to [emil](https://github.com/emilva) for the pull request! + +## [3.5.0] - 2016-10-18 +### Added +- Pull request #11: [Added curlOptions property to customize curl instance](https://github.com/sendgrid/php-http-client/pull/11) +- Thanks to [Alain Tiemblo](https://github.com/ninsuo) for the pull request! + +## [3.4.0] - 2016-09-27 +### Added +- Pull request #9: [Add getters for certain properties](https://github.com/sendgrid/php-http-client/pull/9) +- Thanks to [Arjan Keeman](https://github.com/akeeman) for the pull request! + +## [3.3.0] - 2016-09-13 +### Added +- Pull request #6: [Library refactoring around PSR-2 / PSR-4 code standards](https://github.com/sendgrid/php-http-client/pull/6) +- Thanks to [Alexandr Ivanov](https://github.com/misantron) for the pull request! + +## [3.1.0] - 2016-06-10 +### Added +- Automatically add Content-Type: application/json when there is a request body + +## [3.0.0] - 2016-06-06 +### Changed +- Made the Request and Response variables non-redundant. e.g. request.requestBody becomes request.body + +## [2.0.2] - 2016-02-29 +### Fixed +- Renaming files to conform to PSR-0, git ignored the case in 2.0.1 + +## [2.0.1] - 2016-02-29 +### Fixed +- Renaming files to conform to PSR-0 + +## [1.0.1] - 2016-02-29 +### Fixed +- Composer/Packagist install issues resolved + +## [1.0.0] - 2016-02-29 +### Added +- We are live! diff --git a/vendor/sendgrid/php-http-client/CODE_OF_CONDUCT.md b/vendor/sendgrid/php-http-client/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..2f0727ed --- /dev/null +++ b/vendor/sendgrid/php-http-client/CODE_OF_CONDUCT.md @@ -0,0 +1,73 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at open-source@twilio.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/vendor/sendgrid/php-http-client/CONTRIBUTING.md b/vendor/sendgrid/php-http-client/CONTRIBUTING.md new file mode 100644 index 00000000..b183415e --- /dev/null +++ b/vendor/sendgrid/php-http-client/CONTRIBUTING.md @@ -0,0 +1,152 @@ +Hello! Thank you for choosing to help contribute to one of the SendGrid open source projects. There are many ways you can contribute and help is always welcome. We merely ask that you follow the following contribution policies. + +- [Improvements to the Codebase](#improvements-to-the-codebase) +- [Understanding the Code Base](#understanding-the-codebase) +- [Testing](#testing) +- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Creating a Pull Request](#creating-a-pull-request) +- [Code Reviews](#code-reviews) + + +## Improvements to the Codebase + +We welcome direct contributions to the php-http-client code base. Thank you! + +### Development Environment ### + +#### Install and Run Locally #### + +##### Prerequisites ##### + +- PHP version 7.3, 7.4, 8.0, or 8.1 +- [Composer](https://getcomposer.org/) + +##### Initial setup: ##### + +```bash +git clone https://github.com/sendgrid/php-http-client.git +cd php-http-client +``` + +### Environment Variables + +First, get your free SendGrid account [here](https://sendgrid.com/free?source=php-http-client). + +Next, update your environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys). + +```bash +echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env +echo "sendgrid.env" >> .gitignore +source ./sendgrid.env +``` + +##### Execute: ##### + +See the [examples folder](examples). + + +## Understanding the Code Base + +**/examples** + +Working examples that demonstrate usage. + +**/test/unit** + +Unit tests. + +**/lib/SendGrid/Client.php** + +An HTTP client with a fluent interface using method chaining and reflection. By returning `$this` on [__call](lib/Client.php#L576), we can dynamically build the URL using method chaining and [__call](lib/Client.php#L576) allows us to dynamically receive the method calls to achieve reflection. + +This allows for the following mapping from a URL to a method chain: + +`/api_client/{api_key_id}/version` maps to `client->api_client().->_($api_key_id)->version->()` where is a [HTTP verb](lib/Client.php#L210). + +**/lib/SendGrid/Config.php** + +Loads the environment variables. + + +## Testing + +All PRs require passing tests before the PR will be reviewed. + +All test files are in the [`/test/unit`](test/unit) directory. + +For the purposes of contributing to this repo, please update the [`ClientTest.php`](test/unit/ClientTest.php) file with unit tests as you modify the code. + +```bash +composer install +cd test/unit +../../vendor/bin/phpunit . --bootstrap bootstrap.php --filter test* +``` + + +## Style Guidelines & Naming Conventions + +Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. + +- [pear coding standards](https://pear.php.net/manual/en/standards.php) + +Please run your code through: + +- [PHP Code Sniffer](https://github.com/squizlabs/PHP_CodeSniffer) + + +## Creating a Pull Request + +1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, + and configure the remotes: + + ```bash + # Clone your fork of the repo into the current directory + git clone https://github.com/sendgrid/php-http-client + # Navigate to the newly cloned directory + cd php-http-client + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/sendgrid/php-http-client + ``` + +2. If you cloned a while ago, get the latest changes from upstream: + + ```bash + git checkout + git pull upstream + ``` + +3. Create a new topic branch (off the main project development branch) to + contain your feature, change, or fix: + + ```bash + git checkout -b + ``` + +4. Commit your changes in logical chunks. Please adhere to these [git commit + message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + or your code is unlikely be merged into the main project. Use Git's + [interactive rebase](https://help.github.com/articles/interactive-rebase) + feature to tidy up your commits before making them public. + +4a. Create tests. + +4b. Create or update the example code that demonstrates the functionality of this change to the code. + +5. Locally merge (or rebase) the upstream development branch into your topic branch: + + ```bash + git pull [--rebase] upstream main + ``` + +6. Push your topic branch up to your fork: + + ```bash + git push origin + ``` + +7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) + with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. + + +## Code Reviews +If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, Github has some great [information on how to review a Pull Request](https://help.github.com/articles/about-pull-request-reviews/). diff --git a/vendor/sendgrid/php-http-client/FIRST_TIMERS.md b/vendor/sendgrid/php-http-client/FIRST_TIMERS.md new file mode 100644 index 00000000..28e914d1 --- /dev/null +++ b/vendor/sendgrid/php-http-client/FIRST_TIMERS.md @@ -0,0 +1,53 @@ +# How To Contribute to Twilio SendGrid Repositories via GitHub +Contributing to the Twilio SendGrid repositories is easy! Once you have submitted your pull request, the team can easily review it before it is merged into the repository. + +To make a pull request, follow these steps: + +1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of Twilio SendGrid, please use your full name with your GitHub account and enter Twilio SendGrid as your company so we can easily identify you. + + + +2. __[Fork](https://help.github.com/fork-a-repo/)__ the [php-http-client](https://github.com/sendgrid/php-http-client) repository: + + + +3. __Clone__ your fork via the following commands: + +```bash +# Clone your fork of the repo into the current directory +git clone https://github.com/your_username/php-http-client +# Navigate to the newly cloned directory +cd php-http-client +# Assign the original repo to a remote called "upstream" +git remote add upstream https://github.com/sendgrid/php-http-client +``` + +> Don't forget to replace *your_username* in the URL by your real GitHub username. + +4. __Create a new topic branch__ (off the main project development branch) to contain your feature, change, or fix: + +```bash +git checkout -b +``` + +5. __Commit your changes__ in logical chunks. + +Please adhere to these [git commit message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) or your code is unlikely be merged into the main project. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. + +6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: + +```bash +git pull [--rebase] upstream main +``` + +7. __Push__ your topic branch up to your fork: + +```bash +git push origin +``` + +8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. + +## Important notice + +Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](CONTRIBUTING.md) file. diff --git a/vendor/sendgrid/php-http-client/LICENSE b/vendor/sendgrid/php-http-client/LICENSE new file mode 100644 index 00000000..3154774a --- /dev/null +++ b/vendor/sendgrid/php-http-client/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2023, Twilio SendGrid, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/sendgrid/php-http-client/PULL_REQUEST_TEMPLATE.md b/vendor/sendgrid/php-http-client/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..0ebe9b72 --- /dev/null +++ b/vendor/sendgrid/php-http-client/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,31 @@ + + +# Fixes # + +A short description of what this PR does. + +### Checklist +- [x] I acknowledge that all my contributions will be made under the project's license +- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) +- [ ] I have read the [Contribution Guidelines](https://github.com/sendgrid/php-http-client/blob/main/CONTRIBUTING.md) and my PR follows them +- [ ] I have titled the PR appropriately +- [ ] I have updated my branch with the main branch +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have added the necessary documentation about the functionality in the appropriate .md file +- [ ] I have added inline documentation to the code I modified + +If you have questions, please file a [support ticket](https://support.sendgrid.com). diff --git a/vendor/sendgrid/php-http-client/README.md b/vendor/sendgrid/php-http-client/README.md new file mode 100644 index 00000000..7aea5d1b --- /dev/null +++ b/vendor/sendgrid/php-http-client/README.md @@ -0,0 +1,193 @@ +![SendGrid Logo](twilio_sendgrid_logo.png) + +[![Tests](https://github.com/sendgrid/php-http-client/actions/workflows/test-and-deploy.yml/badge.svg)](https://github.com/sendgrid/php-http-client/actions/workflows/test-and-deploy.yml) +[![Latest Version on Packagist](https://img.shields.io/packagist/v/sendgrid/php-http-client.svg?style=flat-square)](https://packagist.org/packages/sendgrid/php-http-client) +[![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) +[![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/php-http-client.svg)](https://github.com/sendgrid/php-http-client/graphs/contributors) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) + +**Quickly and easily access any RESTful or RESTful-like API.** + +If you are looking for the SendGrid API client library, please see [this repo](https://github.com/sendgrid/sendgrid-php). + +# Announcements +All updates to this library are documented in our [CHANGELOG](CHANGELOG.md). + +# Table of Contents +- [Installation](#installation) +- [Quick Start](#quick-start) +- [Usage](#usage) +- [How to Contribute](#contribute) +- [Thanks](#thanks) +- [About](#about) +- [Support](#support) +- [License](#license) + + +# Installation + +## Prerequisites + +- PHP version 7.3, 7.4, 8.0, or 8.1 + +## Install with Composer + +Add php-http-client to your `composer.json` file. If you are not using [Composer](http://getcomposer.org), you should be. It's an excellent way to manage dependencies in your PHP application. + +```json +{ + "require": { + "sendgrid/php-http-client": "^4.1.1" + } +} +``` + +Then at the top of your PHP script require the autoloader: + +```php +require __DIR__ . '/vendor/autoload.php'; +``` + +Then from the command line: + +```bash +composer install +``` + +## Install without Composer + +You should create a `lib` directory in the directory of your application and clone to `lib` repositories [php-http-client](https://github.com/sendgrid/php-http-client.git) and [sendgrid-php](https://github.com/sendgrid/sendgrid-php.git): + +``` +$ cd /path/to/your/app +$ mkdir lib +$ cd lib +$ git clone https://github.com/sendgrid/php-http-client.git +``` + +In the next step you should create `loader.php`: + +``` +$ cd /path/to/your/app +$ touch loader.php +``` + +And add the code below to the `loader.php`: + +```php + +# Quick Start + +Here is a quick example: + +`GET /your/api/{param}/call` + +```php +// include __DIR__ . '/loader.php'; +require 'vendor/autoload.php'; +$apiKey = YOUR_SENDGRID_API_KEY; +$authHeaders = [ + 'Authorization: Bearer ' . $apiKey +]; +$client = new SendGrid\Client('https://api.sendgrid.com', $authHeaders); +$param = 'foo'; +$response = $client->your()->api()->_($param)->call()->get(); + +var_dump( + $response->statusCode(), + $response->headers(), + $response->body() +); +``` + +`POST /your/api/{param}/call` with headers, query parameters and a request body with versioning. + +```php +// include __DIR__ . '/loader.php'; +require 'vendor/autoload.php'; +$apiKey = YOUR_SENDGRID_API_KEY; +$authHeaders = [ + 'Authorization: Bearer ' . $apiKey +]; +$client = new SendGrid\Client('https://api.sendgrid.com', $authHeaders); +$queryParams = [ + 'hello' => 0, 'world' => 1 +]; +$requestHeaders = [ + 'X-Test' => 'test' +]; +$data = [ + 'some' => 1, 'awesome' => 2, 'data' => 3 +]; +$param = 'bar'; +$response = $client->your()->api()->_($param)->call()->post($data, $queryParams, $requestHeaders); + +var_dump( + $response->statusCode(), + $response->headers(), + $response->body() +); +``` + +If there is an issues with the request, such as misconfigured CURL SSL options, an `InvalidRequest` will be thrown +with message from CURL on why the request failed. Use the message as a hit to troubleshooting steps of your environment. + + +# Usage + +- [Usage Examples](USAGE.md) + +## Environment Variables + +You can do the following to create a .env file: + +```cp .env_example .env``` + +Then, just add your API Key into your .env file. + + +# How to Contribute + +We encourage contribution to our libraries, please see our [CONTRIBUTING](CONTRIBUTING.md) guide for details. + +Quick links: + +- [Feature Request](CONTRIBUTING.md#feature-request) +- [Bug Reports](CONTRIBUTING.md#submit-a-bug-report) +- [Improvements to the Codebase](CONTRIBUTING.md#improvements-to-the-codebase) +- [Review Pull Requests](CONTRIBUTING.md#code-reviews) + + +# Thanks + +We were inspired by the work done on [birdy](https://github.com/inueni/birdy) and [universalclient](https://github.com/dgreisen/universalclient). + + +# About + +php-http-client is maintained and funded by Twilio SendGrid, Inc. The names and logos for php-http-client are trademarks of Twilio SendGrid, Inc. + + +# Support + +If you need help using SendGrid, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). + + +# License +[The MIT License (MIT)](LICENSE) diff --git a/vendor/sendgrid/php-http-client/TROUBLESHOOTING.md b/vendor/sendgrid/php-http-client/TROUBLESHOOTING.md new file mode 100644 index 00000000..52d26b33 --- /dev/null +++ b/vendor/sendgrid/php-http-client/TROUBLESHOOTING.md @@ -0,0 +1,22 @@ +## Table of Contents + +* [Viewing the Request Body](#request-body) +* [Handling SSL Errors](#ssl-errors) + + +## Viewing the Request Body + +When debugging or testing, it may be useful to examine the raw request body. In the `examples/example.php` file, after your API call, use this code to echo out the status code, body, and headers: + +```php +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` + + +## Handling SSL Errors + +If any SSL errors occur during API calls, an `InvalidRequest` will be thrown. This will provide information to help debug the issue further. + +If the issue is caused by an unrecognized certificate, it may be possible that PHP is unable to locate your system's CA bundle. An easy fix would be requiring the `composer/ca-bundle` package - this library will automatically detect and use that to locate the CA bundle, or use Mozilla's as a fallback. diff --git a/vendor/sendgrid/php-http-client/UPGRADE.md b/vendor/sendgrid/php-http-client/UPGRADE.md new file mode 100644 index 00000000..eb3b9445 --- /dev/null +++ b/vendor/sendgrid/php-http-client/UPGRADE.md @@ -0,0 +1,8 @@ +# Upgrade Guide + +_MAJOR version bumps will have upgrade notes posted here._ + +[2022-05-04] 3.x.x to 4.x.x +--------------------------- + +### CHANGED - Drop support for PHP versions 5.6, 7.0, 7.1, and 7.2 which are EOL. diff --git a/vendor/sendgrid/php-http-client/USAGE.md b/vendor/sendgrid/php-http-client/USAGE.md new file mode 100644 index 00000000..d979639d --- /dev/null +++ b/vendor/sendgrid/php-http-client/USAGE.md @@ -0,0 +1,126 @@ +# Usage + +Usage examples for SendGrid php-http-client + +## Initialization + +``` +// If running this outside of this context, use the following include and +// comment out the two includes below +// require __DIR__ . '/vendor/autoload.php'; +include(dirname(__DIR__) . '/lib/Client.php'); +// This gets the parent directory, for your current directory use getcwd() +$path_to_config = dirname(__DIR__); +$apiKey = getenv('SENDGRID_API_KEY'); +$headers = ['Authorization: Bearer ' . $apiKey]; +$client = new SendGrid\Client('https://api.sendgrid.com', $headers, '/v3'); +``` + +## Table of Contents + +- [GET](#get) +- [DELETE](#delete) +- [POST](#post) +- [PUT](#put) +- [PATCH](#patch) + + +## GET + +#### GET Collection + +``` +$query_params = ['limit' => 100, 'offset' => 0]; +$request_headers = ['X-Mock: 200']; +$response = $client->api_keys()->get(null, $query_params, $request_headers); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` + +#### GET with auto retry on rate limit + +``` +$query_params = ['limit' => 100, 'offset' => 0]; +$request_headers = ['X-Mock: 200']; +$retryOnLimit = true; +$response = $client->api_keys()->get(null, $query_params, $request_headers, $retryOnLimit); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` + +#### GET with array of values + +``` +$query_params = [ + 'aggregated_by' => 'month', + 'subusers' => ['one', 'two', 'three'], + 'start_date' => '2019-01-01', + 'end_date' => '2019-01-31', +]; +$request_headers = ['X-Mock: 200']; +$retryOnLimit = true; +$response = $client->subusers()->stats()->get(null, $query_params, $request_headers, $retryOnLimit); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` + + +## DELETE + +``` +$response = $client->api_keys()->_($api_key_id)->delete(); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` + + +## POST + +``` +$request_body = [ + 'name' => 'My PHP API Key', + 'scopes' => [ + 'mail.send', + 'alerts.create', + 'alerts.read' + ] +]; +$response = $client->api_keys()->post($request_body); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +$response_body = json_decode($response->body()); +$api_key_id = $response_body->api_key_id; +``` + +## PUT + +``` +$request_body = [ + 'name' => 'A New Hope', + 'scopes' => [ + 'user.profile.read', + 'user.profile.update' + ] +]; +$response = $client->api_keys()->_($api_key_id)->put($request_body); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` + +## PATCH + +``` +$request_body = [ + 'name' => 'A New Hope' +]; +$response = $client->api_keys()->_($api_key_id)->patch($request_body); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); +``` diff --git a/vendor/sendgrid/php-http-client/composer.json b/vendor/sendgrid/php-http-client/composer.json new file mode 100644 index 00000000..2d0ead01 --- /dev/null +++ b/vendor/sendgrid/php-http-client/composer.json @@ -0,0 +1,42 @@ +{ + "name": "sendgrid/php-http-client", + "description": "HTTP REST client, simplified for PHP", + "type": "library", + "homepage": "http://github.com/sendgrid/php-http-client", + "keywords": ["SendGrid", "HTTP", "REST", "API", "Fluent"], + "license": "MIT", + "authors": [ + { + "name": "Matt Bernier", + "email": "mbernier@twilio.com" + }, + { + "name": "Elmer Thomas", + "email": "ethomas@twilio.com" + } + ], + "require": { + "php": ">=7.3", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "~2.0", + "friendsofphp/php-cs-fixer": "^2.16" + }, + "suggest": { + "composer/ca-bundle": "Including this library will ensure that a valid CA bundle is available for secure connections" + }, + "autoload": { + "psr-4": { + "SendGrid\\": "lib/" + } + }, + "autoload-dev": { + "psr-4": { + "SendGrid\\Test\\": "test/unit/" + } + } +} diff --git a/vendor/sendgrid/php-http-client/examples/.env_sample b/vendor/sendgrid/php-http-client/examples/.env_sample new file mode 100644 index 00000000..30857f42 --- /dev/null +++ b/vendor/sendgrid/php-http-client/examples/.env_sample @@ -0,0 +1 @@ +export SENDGRID_API_KEY='' \ No newline at end of file diff --git a/vendor/sendgrid/php-http-client/examples/example.php b/vendor/sendgrid/php-http-client/examples/example.php new file mode 100644 index 00000000..107d95a0 --- /dev/null +++ b/vendor/sendgrid/php-http-client/examples/example.php @@ -0,0 +1,61 @@ + 100, 'offset' => 0]; +$requestHeaders = ['X-Mock: 200']; +$response = $client->api_keys()->get(null, $queryParams, $requestHeaders); +echo $response->statusCode(); +echo $response->body(); +echo $response->headers(); + +// GET /v3/api_keys - retrieve all API Keys that belong to the user +$queryParams = ['limit' => 100, 'offset' => 0]; +$requestHeaders = ['X-Mock: 200']; +$retryOnLimit = true; // with auto retry on rate limit +$response = $client->api_keys()->get(null, $queryParams, $requestHeaders, $retryOnLimit); + +// POST /v3/api_keys - create a new user API Key +$requestBody = [ + 'name' => 'My PHP API Key', + 'scopes' => [ + 'mail.send', + 'alerts.create', + 'alerts.read' + ] +]; +$response = $client->api_keys()->post($requestBody); +$responseBody = json_decode($response->body(), true); +$apiKeyId = $responseBody['api_key_id']; + +// GET /v3/api_keys/{api_key_id} - retrieve a single API Key +$response = $client->api_keys()->_($apiKeyId)->get(); + +// PATCH /v3/api_keys/{api_key_id} - update the name of an existing API Key +$requestBody = [ + 'name' => 'A New Hope' +]; +$response = $client->api_keys()->_($apiKeyId)->patch($requestBody); + +// PUT /v3/api_keys/{api_key_id} - update the name and scopes of a given API Key +$requestBody = [ + 'name' => 'A New Hope', + 'scopes' => [ + 'user.profile.read', + 'user.profile.update' + ] +]; +$response = $client->api_keys()->_($apiKeyId)->put($requestBody); + +// DELETE /v3/api_keys/{api_key_id} - revoke an existing API Key +$response = $client->api_keys()->_($apiKeyId)->delete(); diff --git a/vendor/sendgrid/php-http-client/lib/Client.php b/vendor/sendgrid/php-http-client/lib/Client.php new file mode 100644 index 00000000..b6bcd4a7 --- /dev/null +++ b/vendor/sendgrid/php-http-client/lib/Client.php @@ -0,0 +1,667 @@ +host = $host; + $this->headers = $headers ?: []; + $this->version = $version; + $this->path = $path ?: []; + $this->curlOptions = $curlOptions ?: []; + $this->retryOnLimit = $retryOnLimit; + $this->verifySSLCerts = $verifySSLCerts; + $this->isConcurrentRequest = false; + $this->savedRequests = []; + } + + /** + * @return string + */ + public function getHost() + { + return $this->host; + } + + /** + * Set host + * + * @param string $host + * + * @return Client + */ + public function setHost(string $host) + { + $this->host = $host; + + return $this; + } + + /** + * @return array + */ + public function getHeaders() + { + return $this->headers; + } + + /** + * @return string|null + */ + public function getVersion() + { + return $this->version; + } + + /** + * @return array + */ + public function getPath() + { + return $this->path; + } + + /** + * @return array + */ + public function getCurlOptions() + { + return $this->curlOptions; + } + + /** + * Set extra options to set during curl initialization. + * + * @param array $options + * + * @return Client + */ + public function setCurlOptions(array $options) + { + $this->curlOptions = $options; + + return $this; + } + + /** + * Set default retry on limit flag. + * + * @param bool $retry + * + * @return Client + */ + public function setRetryOnLimit($retry) + { + $this->retryOnLimit = $retry; + + return $this; + } + + /** + * Set default verify certificates flag + * + * @param bool $verifySSLCerts + * + * @return Client + */ + public function setVerifySSLCerts($verifySSLCerts) + { + $this->verifySSLCerts = $verifySSLCerts; + + return $this; + } + + /** + * Set concurrent request flag + * + * @param bool $isConcurrent + * + * @return Client + */ + public function setIsConcurrentRequest($isConcurrent) + { + $this->isConcurrentRequest = $isConcurrent; + + return $this; + } + + /** + * Build the final URL to be passed. + * + * @param array $queryParams an array of all the query parameters + * + * Nested arrays will resolve to multiple instances of the same parameter + * + * @return string + */ + private function buildUrl($queryParams = null) + { + $path = '/' . implode('/', $this->path); + if (isset($queryParams)) { + // Regex replaces `[0]=`, `[1]=`, etc. with `=`. + $path .= '?' . preg_replace('/%5B(?:\d|[1-9]\d+)%5D=/', '=', http_build_query($queryParams)); + } + + return sprintf('%s%s%s', $this->host, $this->version ?: '', $path); + } + + /** + * Creates curl options for a request + * this function does not mutate any private variables. + * + * @param string $method + * @param array $body + * @param array $headers + * + * @return array + */ + private function createCurlOptions($method, $body = null, $headers = null) + { + $options = [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HEADER => true, + CURLOPT_CUSTOMREQUEST => strtoupper($method), + CURLOPT_SSL_VERIFYPEER => $this->verifySSLCerts, + CURLOPT_FAILONERROR => false, + ] + $this->curlOptions; + + if (isset($headers)) { + $headers = array_merge($this->headers, $headers); + } else { + $headers = $this->headers; + } + + if (isset($body)) { + $encodedBody = json_encode($body); + $options[CURLOPT_POSTFIELDS] = $encodedBody; + $headers = array_merge($headers, ['Content-Type: application/json']); + } + $options[CURLOPT_HTTPHEADER] = $headers; + + if (class_exists('\\Composer\\CaBundle\\CaBundle') && method_exists('\\Composer\\CaBundle\\CaBundle', 'getSystemCaRootBundlePath')) { + $caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath(); + if (is_dir($caPathOrFile) || (is_link($caPathOrFile) && is_dir(readlink($caPathOrFile)))) { + $options[CURLOPT_CAPATH] = $caPathOrFile; + } else { + $options[CURLOPT_CAINFO] = $caPathOrFile; + } + } + + return $options; + } + + /** + * @param array $requestData (method, url, body and headers) + * @param bool $retryOnLimit + * + * @return array + */ + private function createSavedRequest(array $requestData, $retryOnLimit = false) + { + return array_merge($requestData, ['retryOnLimit' => $retryOnLimit]); + } + + /** + * @param array $requests + * + * @return array + */ + private function createCurlMultiHandle(array $requests) + { + $channels = []; + $multiHandle = curl_multi_init(); + + foreach ($requests as $id => $data) { + $channels[$id] = curl_init($data['url']); + $curlOpts = $this->createCurlOptions($data['method'], $data['body'], $data['headers']); + curl_setopt_array($channels[$id], $curlOpts); + curl_multi_add_handle($multiHandle, $channels[$id]); + } + + return [$channels, $multiHandle]; + } + + /** + * Prepare response object. + * + * @param resource $channel the curl resource + * @param string $content + * + * @return Response object + */ + private function parseResponse($channel, $content) + { + $headerSize = curl_getinfo($channel, CURLINFO_HEADER_SIZE); + $statusCode = curl_getinfo($channel, CURLINFO_HTTP_CODE); + + $responseBody = mb_substr($content, $headerSize); + + $responseHeaders = mb_substr($content, 0, $headerSize); + $responseHeaders = explode("\n", $responseHeaders); + $responseHeaders = array_map('trim', $responseHeaders); + + return new Response($statusCode, $responseBody, $responseHeaders); + } + + /** + * Retry request. + * + * @param array $responseHeaders headers from rate limited response + * @param string $method the HTTP verb + * @param string $url the final url to call + * @param array $body request body + * @param array $headers original headers + * + * @return Response response object + * + * @throws InvalidRequest + */ + private function retryRequest(array $responseHeaders, $method, $url, $body, $headers) + { + $sleepDurations = $responseHeaders['X-Ratelimit-Reset'] - time(); + sleep($sleepDurations > 0 ? $sleepDurations : 0); + + return $this->makeRequest($method, $url, $body, $headers, false); + } + + /** + * Make the API call and return the response. + * This is separated into it's own function, so we can mock it easily for testing. + * + * @param string $method the HTTP verb + * @param string $url the final url to call + * @param array $body request body + * @param array $headers any additional request headers + * @param bool $retryOnLimit should retry if rate limit is reach? + * + * @return Response object + * + * @throws InvalidRequest + */ + public function makeRequest($method, $url, $body = null, $headers = null, $retryOnLimit = false) + { + $channel = curl_init($url); + + $options = $this->createCurlOptions($method, $body, $headers); + + curl_setopt_array($channel, $options); + $content = curl_exec($channel); + + if ($content === false) { + throw new InvalidRequest(curl_error($channel), curl_errno($channel)); + } + + $response = $this->parseResponse($channel, $content); + + if ($retryOnLimit && $response->statusCode() === self::TOO_MANY_REQUESTS_HTTP_CODE) { + $responseHeaders = $response->headers(true); + + return $this->retryRequest($responseHeaders, $method, $url, $body, $headers); + } + + curl_close($channel); + + return $response; + } + + /** + * Send all saved requests at once. + * + * @param array $requests + * + * @return Response[] + * + * @throws InvalidRequest + */ + public function makeAllRequests(array $requests = []) + { + if (empty($requests)) { + $requests = $this->savedRequests; + } + list($channels, $multiHandle) = $this->createCurlMultiHandle($requests); + + // running all requests + $isRunning = null; + do { + curl_multi_exec($multiHandle, $isRunning); + } while ($isRunning); + + // get response and close all handles + $retryRequests = []; + $responses = []; + $sleepDurations = 0; + foreach ($channels as $id => $channel) { + $content = curl_multi_getcontent($channel); + + if ($content === false) { + throw new InvalidRequest(curl_error($channel), curl_errno($channel)); + } + + $response = $this->parseResponse($channel, $content); + + if ($requests[$id]['retryOnLimit'] && $response->statusCode() === self::TOO_MANY_REQUESTS_HTTP_CODE) { + $headers = $response->headers(true); + $sleepDurations = max($sleepDurations, $headers['X-Ratelimit-Reset'] - time()); + $requestData = [ + 'method' => $requests[$id]['method'], + 'url' => $requests[$id]['url'], + 'body' => $requests[$id]['body'], + 'headers' => $headers, + ]; + $retryRequests[] = $this->createSavedRequest($requestData, false); + } else { + $responses[] = $response; + } + + curl_multi_remove_handle($multiHandle, $channel); + } + curl_multi_close($multiHandle); + + // retry requests + if (!empty($retryRequests)) { + sleep($sleepDurations > 0 ? $sleepDurations : 0); + $responses = array_merge($responses, $this->makeAllRequests($retryRequests)); + } + + return $responses; + } + + /** + * Add variable values to the url. (e.g. /your/api/{variable_value}/call) + * Another example: if you have a PHP reserved word, such as and, in your url, you must use this method. + * + * @param string $name name of the url segment + * + * @return Client object + */ + public function _($name = null) + { + if (isset($name)) { + $this->path[] = $name; + } + $client = new static($this->host, $this->headers, $this->version, $this->path); + $client->setCurlOptions($this->curlOptions); + $client->setVerifySSLCerts($this->verifySSLCerts); + $client->setRetryOnLimit($this->retryOnLimit); + $this->path = []; + + return $client; + } + + /** + * Dynamically add method calls to the url, then call a method. + * (e.g. client.name.name.method()). + * + * @param string $name name of the dynamic method call or HTTP verb + * @param array $args parameters passed with the method call + * + * @return Client|Response|Response[]|null object + * + * @throws InvalidRequest + */ + public function __call($name, $args) + { + $name = mb_strtolower($name); + + if ($name === 'version') { + $this->version = $args[0]; + + return $this->_(); + } + + // send all saved requests + if (($name === 'send') && $this->isConcurrentRequest) { + return $this->makeAllRequests(); + } + + if (\in_array($name, $this->methods, true)) { + $body = isset($args[0]) ? $args[0] : null; + $queryParams = isset($args[1]) ? $args[1] : null; + $url = $this->buildUrl($queryParams); + $headers = isset($args[2]) ? $args[2] : null; + $retryOnLimit = isset($args[3]) ? $args[3] : $this->retryOnLimit; + + if ($this->isConcurrentRequest) { + // save request to be sent later + $requestData = ['method' => $name, 'url' => $url, 'body' => $body, 'headers' => $headers]; + $this->savedRequests[] = $this->createSavedRequest($requestData, $retryOnLimit); + + return null; + } + + return $this->makeRequest($name, $url, $body, $headers, $retryOnLimit); + } + + return $this->_($name); + } +} diff --git a/vendor/sendgrid/php-http-client/lib/Exception/InvalidRequest.php b/vendor/sendgrid/php-http-client/lib/Exception/InvalidRequest.php new file mode 100644 index 00000000..21ae2acc --- /dev/null +++ b/vendor/sendgrid/php-http-client/lib/Exception/InvalidRequest.php @@ -0,0 +1,21 @@ +statusCode = $statusCode; + $this->body = $body; + $this->headers = $headers; + } + + /** + * The status code. + * + * @return int + */ + public function statusCode() + { + return $this->statusCode; + } + + /** + * The response body. + * + * @return string + */ + public function body() + { + return $this->body; + } + + /** + * The response headers. + * + * @param bool $assoc + * + * @return array + */ + public function headers($assoc = false) + { + if (!$assoc) { + return $this->headers; + } + + return $this->prettifyHeaders($this->headers); + } + + /** + * Returns response headers as associative array. + * + * @param array $headers + * + * @return array + */ + private function prettifyHeaders(array $headers) + { + return array_reduce( + array_filter($headers), + static function ($result, $header) { + if (mb_strpos($header, ':') === false) { + $result['Status'] = trim($header); + + return $result; + } + + list($key, $value) = explode(':', $header, 2); + $result[trim($key)] = trim($value); + + return $result; + }, + [] + ); + } +} diff --git a/vendor/sendgrid/php-http-client/static/img/github-fork.png b/vendor/sendgrid/php-http-client/static/img/github-fork.png new file mode 100644 index 00000000..c84dc16a Binary files /dev/null and b/vendor/sendgrid/php-http-client/static/img/github-fork.png differ diff --git a/vendor/sendgrid/php-http-client/static/img/github-sign-up.png b/vendor/sendgrid/php-http-client/static/img/github-sign-up.png new file mode 100644 index 00000000..829f6d1e Binary files /dev/null and b/vendor/sendgrid/php-http-client/static/img/github-sign-up.png differ diff --git a/vendor/sendgrid/php-http-client/test/phpunit.xml.dist b/vendor/sendgrid/php-http-client/test/phpunit.xml.dist new file mode 100644 index 00000000..a3c0314f --- /dev/null +++ b/vendor/sendgrid/php-http-client/test/phpunit.xml.dist @@ -0,0 +1,13 @@ + + + + + . + + + + + ../lib + + + diff --git a/vendor/sendgrid/php-http-client/test/unit/ClientTest.php b/vendor/sendgrid/php-http-client/test/unit/ClientTest.php new file mode 100644 index 00000000..55f6c105 --- /dev/null +++ b/vendor/sendgrid/php-http-client/test/unit/ClientTest.php @@ -0,0 +1,259 @@ +host = 'https://localhost:4010'; + $this->headers = [ + 'Content-Type: application/json', + 'Authorization: Bearer SG.XXXX' + ]; + $this->client = new MockClient($this->host, $this->headers, '/v3'); + } + + public function testConstructor() + { + $this->assertEquals($this->host, $this->client->getHost()); + $this->assertEquals($this->headers, $this->client->getHeaders()); + $this->assertEquals('/v3', $this->client->getVersion()); + $this->assertEquals([], $this->client->getPath()); + $this->assertEquals([], $this->client->getCurlOptions()); + } + + public function test_() + { + $client = new MockClient($this->host, $this->headers, '/v3'); + $client->setCurlOptions(['foo' => 'bar']); + $client = $client->_('test'); + + $this->assertEquals(['test'], $client->getPath()); + $this->assertEquals(['foo' => 'bar'], $client->getCurlOptions()); + } + + public function test__call() + { + $client = $this->client->get(); + $this->assertEquals('https://localhost:4010/v3/', $client->url); + + $queryParams = ['limit' => 100, 'offset' => 0]; + $client = $this->client->get(null, $queryParams); + $this->assertEquals('https://localhost:4010/v3/?limit=100&offset=0', $client->url); + + $requestBody = ['name' => 'A New Hope']; + $client = $this->client->get($requestBody); + $this->assertEquals($requestBody, $client->requestBody); + + $requestHeaders = ['X-Mock: 200']; + $client = $this->client->get(null, null, $requestHeaders); + $this->assertEquals($requestHeaders, $client->requestHeaders); + + $client = $this->client->version('/v4'); + $this->assertEquals('/v4', $client->getVersion()); + + $client = $this->client->path_to_endpoint(); + $this->assertEquals(['path_to_endpoint'], $client->getPath()); + $client = $client->one_more_segment(); + $this->assertEquals(['path_to_endpoint', 'one_more_segment'], $client->getPath()); + } + + public function testGetHost() + { + $client = new Client('https://localhost:4010'); + $this->assertSame('https://localhost:4010', $client->getHost()); + } + + public function testSetHost() + { + $client = new Client('https://localhost:4010'); + $client->setHost("https://api.test.com"); + $this->assertSame('https://api.test.com', $client->getHost()); + } + + public function testGetHeaders() + { + $client = new Client( + 'https://localhost:4010', + ['Content-Type: application/json', 'Authorization: Bearer SG.XXXX'] + ); + $this->assertSame(['Content-Type: application/json', 'Authorization: Bearer SG.XXXX'], $client->getHeaders()); + + $client2 = new Client('https://localhost:4010'); + $this->assertSame([], $client2->getHeaders()); + } + + public function testGetVersion() + { + $client = new Client('https://localhost:4010', [], '/v3'); + $this->assertSame('/v3', $client->getVersion()); + + $client = new Client('https://localhost:4010'); + $this->assertNull($client->getVersion()); + } + + public function testGetPath() + { + $client = new Client('https://localhost:4010', [], null, ['/foo/bar']); + $this->assertSame(['/foo/bar'], $client->getPath()); + + $client = new Client('https://localhost:4010'); + $this->assertSame([], $client->getPath()); + } + + public function testGetCurlOptions() + { + $client = new Client('https://localhost:4010'); + $client->setCurlOptions([CURLOPT_PROXY => '127.0.0.1:8080']); + $this->assertSame([CURLOPT_PROXY => '127.0.0.1:8080'], $client->getCurlOptions()); + + $client = new Client('https://localhost:4010'); + $this->assertSame([], $client->getCurlOptions()); + } + + public function testCurlMulti() + { + $client = new Client('https://localhost:4010'); + $client->setIsConcurrentRequest(true); + $client->get(['name' => 'A New Hope']); + $client->get(null, null, ['X-Mock: 200']); + $client->get(null, ['limit' => 100, 'offset' => 0]); + + // returns 3 response object + $this->assertCount(3, $client->send()); + } + + public function testCreateCurlOptionsWithMethodOnly() + { + $client = new Client('https://localhost:4010'); + + $result = $this->callMethod($client, 'createCurlOptions', ['get']); + + $this->assertEquals([ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HEADER => true, + CURLOPT_CUSTOMREQUEST => 'GET', + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_FAILONERROR => false, + CURLOPT_HTTPHEADER => [] + ], $result); + } + + public function testCreateCurlOptionsWithBody() + { + $client = new Client('https://localhost:4010', ['User-Agent: Custom-Client 1.0']); + $client->setCurlOptions([ + CURLOPT_ENCODING => 'utf-8' + ]); + + $body = ['foo' => 'bar']; + + $result = $this->callMethod($client, 'createCurlOptions', ['post', $body]); + + $this->assertEquals([ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HEADER => true, + CURLOPT_CUSTOMREQUEST => 'POST', + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_FAILONERROR => false, + CURLOPT_ENCODING => 'utf-8', + CURLOPT_POSTFIELDS => json_encode($body), + CURLOPT_HTTPHEADER => [ + 'User-Agent: Custom-Client 1.0', + 'Content-Type: application/json' + ] + ], $result); + } + + public function testCreateCurlOptionsWithBodyAndHeaders() + { + $client = new Client('https://localhost:4010', ['User-Agent: Custom-Client 1.0']); + $client->setCurlOptions([ + CURLOPT_ENCODING => 'utf-8' + ]); + + $body = ['foo' => 'bar']; + $headers = ['Accept-Encoding: gzip']; + + $result = $this->callMethod($client, 'createCurlOptions', ['post', $body, $headers]); + + $this->assertEquals([ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HEADER => true, + CURLOPT_CUSTOMREQUEST => 'POST', + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_FAILONERROR => false, + CURLOPT_ENCODING => 'utf-8', + CURLOPT_POSTFIELDS => json_encode($body), + CURLOPT_HTTPHEADER => [ + 'User-Agent: Custom-Client 1.0', + 'Accept-Encoding: gzip', + 'Content-Type: application/json' + ] + ], $result); + } + + + public function testThrowExceptionOnInvalidCall() + { + $this->expectException(InvalidRequest::class); + + $client = new Client('invalid://url', ['User-Agent: Custom-Client 1.0']); + $client->get(); + } + + public function testMakeRequestWithUntrustedRootCert() + { + $this->expectException(InvalidRequest::class); + $this->expectExceptionMessageMatches('/certificate/i'); + + $client = new Client('https://untrusted-root.badssl.com/'); + $client->makeRequest('GET', 'https://untrusted-root.badssl.com/'); + } + + public function testFormRepeatUrlArgs() + { + $client = new Client('https://localhost:4010'); + + $testParams = [ + 'thing' => 'stuff', + 'foo' => [ + 'bar', + 'bat', + 'baz', + ], + ]; + $result = $this->callMethod($client, 'buildUrl', [$testParams]); + $this->assertEquals('https://localhost:4010/?thing=stuff&foo=bar&foo=bat&foo=baz', $result); + } + + /** + * @param object $obj + * @param string $name + * @param array $args + * @return mixed + */ + private function callMethod($obj, $name, $args = []) + { + try { + $class = new \ReflectionClass($obj); + } catch (\ReflectionException $e) { + return null; + } + $method = $class->getMethod($name); + $method->setAccessible(true); + return $method->invokeArgs($obj, $args); + } +} diff --git a/vendor/sendgrid/php-http-client/test/unit/FilesExistTest.php b/vendor/sendgrid/php-http-client/test/unit/FilesExistTest.php new file mode 100644 index 00000000..f285454d --- /dev/null +++ b/vendor/sendgrid/php-http-client/test/unit/FilesExistTest.php @@ -0,0 +1,25 @@ +assertFileExists("$rootDir/.gitignore"); + $this->assertFileExists("$rootDir/.github/workflows/test-and-deploy.yml"); + $this->assertFileExists("$rootDir/CHANGELOG.md"); + $this->assertFileExists("$rootDir/CODE_OF_CONDUCT.md"); + $this->assertFileExists("$rootDir/CONTRIBUTING.md"); + $this->assertFileExists("$rootDir/Dockerfile"); + $this->assertFileExists("$rootDir/LICENSE"); + $this->assertFileExists("$rootDir/PULL_REQUEST_TEMPLATE.md"); + $this->assertFileExists("$rootDir/README.md"); + $this->assertFileExists("$rootDir/TROUBLESHOOTING.md"); + $this->assertFileExists("$rootDir/USAGE.md"); + } +} diff --git a/vendor/sendgrid/php-http-client/test/unit/LicenceYearTest.php b/vendor/sendgrid/php-http-client/test/unit/LicenceYearTest.php new file mode 100644 index 00000000..2af1a006 --- /dev/null +++ b/vendor/sendgrid/php-http-client/test/unit/LicenceYearTest.php @@ -0,0 +1,22 @@ +"; + + $this->assertEquals($expected, $copyright); + } +} diff --git a/vendor/sendgrid/php-http-client/test/unit/MockClient.php b/vendor/sendgrid/php-http-client/test/unit/MockClient.php new file mode 100644 index 00000000..b1c897ab --- /dev/null +++ b/vendor/sendgrid/php-http-client/test/unit/MockClient.php @@ -0,0 +1,20 @@ +requestBody = $requestBody; + $this->requestHeaders = $requestHeaders; + $this->url = $url; + return $this; + } +} diff --git a/vendor/sendgrid/php-http-client/test/unit/ResponseTest.php b/vendor/sendgrid/php-http-client/test/unit/ResponseTest.php new file mode 100644 index 00000000..9f83b89a --- /dev/null +++ b/vendor/sendgrid/php-http-client/test/unit/ResponseTest.php @@ -0,0 +1,52 @@ +assertEquals(200, $response->statusCode()); + $this->assertEquals('', $response->body()); + $this->assertEquals([], $response->headers()); + + $response = new Response(201, 'test', ['Content-Encoding: gzip']); + + $this->assertEquals(201, $response->statusCode()); + $this->assertEquals('test', $response->body()); + $this->assertEquals(['Content-Encoding: gzip'], $response->headers()); + } + + public function testStatusCode() + { + $response = new Response(404); + + $this->assertEquals(404, $response->statusCode()); + } + + public function testBody() + { + $response = new Response(null, 'foo'); + + $this->assertEquals('foo', $response->body()); + } + + public function testHeaders() + { + $response = new Response(null, null, ['Content-Type: text/html']); + + $this->assertEquals(['Content-Type: text/html'], $response->headers()); + } + + public function testAssociativeHeaders() + { + $response = new Response(null, null, ['Content-Type: text/html', 'HTTP/1.1 200 OK']); + + $this->assertEquals(['Content-Type' => 'text/html', 'Status' => 'HTTP/1.1 200 OK'], $response->headers(true)); + } +} diff --git a/vendor/sendgrid/php-http-client/twilio_sendgrid_logo.png b/vendor/sendgrid/php-http-client/twilio_sendgrid_logo.png new file mode 100644 index 00000000..a4c22239 Binary files /dev/null and b/vendor/sendgrid/php-http-client/twilio_sendgrid_logo.png differ diff --git a/vendor/sendgrid/php-http-client/use_cases/README.md b/vendor/sendgrid/php-http-client/use_cases/README.md new file mode 100644 index 00000000..84e4c2f8 --- /dev/null +++ b/vendor/sendgrid/php-http-client/use_cases/README.md @@ -0,0 +1,4 @@ +This directory provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/php-http-client/issues) or make a pull request for any use cases you would like us to document here. Thank you! + +# Table of Contents +* [Docker](docker.md) diff --git a/vendor/sendgrid/php-http-client/use_cases/docker.md b/vendor/sendgrid/php-http-client/use_cases/docker.md new file mode 100644 index 00000000..7051ec05 --- /dev/null +++ b/vendor/sendgrid/php-http-client/use_cases/docker.md @@ -0,0 +1,21 @@ +# Docker + +You can run the example code at `examples/example.php` in a Docker container. + +From the root directory: + +```bash +cp examples/.env_sample .env +``` + +Update the `.env` file with your SendGrid API Key. If you don't have one, you can get one [here](https://sendgrid.com/free?source=php-http-client). + +Add the `.env` file to your `.gitignore` file if you are publishing your code publically. + +``` +source .env +docker build --build-arg sendgrid_apikey=$SENDGRID_API_KEY -t client . +docker run client php examples/example.php +``` + +You should see a list of your SendGrid API Keys. diff --git a/vendor/sendgrid/sendgrid/.editorconfig b/vendor/sendgrid/sendgrid/.editorconfig new file mode 100644 index 00000000..e18928df --- /dev/null +++ b/vendor/sendgrid/sendgrid/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*.php] +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/vendor/sendgrid/sendgrid/.env.sample b/vendor/sendgrid/sendgrid/.env.sample new file mode 100644 index 00000000..937e999d --- /dev/null +++ b/vendor/sendgrid/sendgrid/.env.sample @@ -0,0 +1 @@ +export SENDGRID_API_KEY='' diff --git a/vendor/sendgrid/sendgrid/FIRST_TIMERS.md b/vendor/sendgrid/sendgrid/FIRST_TIMERS.md new file mode 100644 index 00000000..2b86e33a --- /dev/null +++ b/vendor/sendgrid/sendgrid/FIRST_TIMERS.md @@ -0,0 +1,53 @@ +# How To Contribute to Twilio SendGrid Repositories via GitHub +Contributing to the Twilio SendGrid repositories is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. + +To make a pull request, follow these steps: + +1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of Twilio SendGrid, please use your full name with your GitHub account and enter Twilio SendGrid as your company so we can easily identify you. + + + +2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-php](https://github.com/sendgrid/sendgrid-php) repository: + + + +3. __Clone__ your fork via the following commands: + +```bash +# Clone your fork of the repo into the current directory +git clone https://github.com/your_username/sendgrid-php +# Navigate to the newly cloned directory +cd sendgrid-php +# Assign the original repo to a remote called "upstream" +git remote add upstream https://github.com/sendgrid/sendgrid-php +``` + +> Don't forget to replace *your_username* in the URL by your real GitHub username. + +4. __Create a new topic branch__ (off the main project development branch) to contain your feature, change, or fix: + +```bash +git checkout -b +``` + +5. __Commit your changes__ in logical chunks. + +Please adhere to these [git commit message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) or your code is unlikely be merged into the main project. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. + +6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: + +```bash +git pull [--rebase] upstream main +``` + +7. __Push__ your topic branch up to your fork: + +```bash +git push origin +``` + +8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. + +## Important notice + +Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](CONTRIBUTING.md) file. diff --git a/vendor/sendgrid/sendgrid/ISSUE_TEMPLATE.md b/vendor/sendgrid/sendgrid/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..49967612 --- /dev/null +++ b/vendor/sendgrid/sendgrid/ISSUE_TEMPLATE.md @@ -0,0 +1,30 @@ + + +### Issue Summary +A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, or code examples. + +### Steps to Reproduce +1. This is the first step +2. This is the second step +3. Further steps, etc. + +### Code Snippet +```php +# paste code here +``` + +### Exception/Log +``` +# paste exception/log here +``` + +### Technical details: +* sendgrid-php version: +* php version: + diff --git a/vendor/sendgrid/sendgrid/LICENSE b/vendor/sendgrid/sendgrid/LICENSE new file mode 100644 index 00000000..3154774a --- /dev/null +++ b/vendor/sendgrid/sendgrid/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2023, Twilio SendGrid, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/sendgrid/sendgrid/UPGRADE.md b/vendor/sendgrid/sendgrid/UPGRADE.md new file mode 100644 index 00000000..6de142ce --- /dev/null +++ b/vendor/sendgrid/sendgrid/UPGRADE.md @@ -0,0 +1,8 @@ +# Upgrade Guide + +_MAJOR version bumps will have upgrade notes posted here._ + +[2022-05-04] 7.x.x to 8.x.x +--------------------------- + +### CHANGED - Drop support for PHP versions 5.6, 7.0, 7.1, and 7.2 which are EOL. diff --git a/vendor/sendgrid/sendgrid/composer.json b/vendor/sendgrid/sendgrid/composer.json new file mode 100644 index 00000000..c9f9f29a --- /dev/null +++ b/vendor/sendgrid/sendgrid/composer.json @@ -0,0 +1,57 @@ +{ + "name": "sendgrid/sendgrid", + "description": "This library allows you to quickly and easily send emails through Twilio SendGrid using PHP.", + "homepage": "http://github.com/sendgrid/sendgrid-php", + "license": "MIT", + "keywords": [ + "SendGrid", + "sendgrid", + "Twilio SendGrid", + "twilio sendgrid", + "email", + "send", + "grid" + ], + "require": { + "php": ">=7.3", + "sendgrid/php-http-client": "~4.1", + "starkbank/ecdsa": "0.*", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "3.*", + "swaggest/json-diff": "^3.4", + "phpstan/phpstan": "^1.5" + }, + "replace": { + "sendgrid/sendgrid-php": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "SendGrid\\Contacts\\": "lib/contacts/", + "SendGrid\\EventWebhook\\": "lib/eventwebhook/", + "SendGrid\\Helper\\": "lib/helper/", + "SendGrid\\Mail\\": "lib/mail/", + "SendGrid\\Stats\\": "lib/stats/" + }, + "classmap": [ + "lib/BaseSendGridClientInterface.php", + "lib/SendGrid.php", + "lib/TwilioEmail.php" + ] + }, + "autoload-dev": { + "psr-4": { + "SendGrid\\Tests\\Integration\\": "test/integration", + "SendGrid\\Tests\\Unit\\": "test/unit" + }, + "classmap": [ + "test/BaseTestClass.php" + ] + } +} diff --git a/vendor/sendgrid/sendgrid/examples/accesssettings/accesssettings.php b/vendor/sendgrid/sendgrid/examples/accesssettings/accesssettings.php new file mode 100644 index 00000000..a409fe33 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/accesssettings/accesssettings.php @@ -0,0 +1,114 @@ +client->access_settings()->activity()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add one or more IPs to the whitelist # +// POST /access_settings/whitelist # + +$request_body = json_decode('{ + "ips": [ + { + "ip": "192.168.1.1" + }, + { + "ip": "192.*.*.*" + }, + { + "ip": "192.168.1.3/32" + } + ] +}'); + +try { + $response = $sg->client->access_settings()->whitelist()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a list of currently whitelisted IPs # +// GET /access_settings/whitelist # + +try { + $response = $sg->client->access_settings()->whitelist()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Remove one or more IPs from the whitelist # +// DELETE /access_settings/whitelist # + +$request_body = json_decode('{ + "ids": [ + 1, + 2, + 3 + ] +}'); + +try { + $response = $sg->client->access_settings()->whitelist()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific whitelisted IP # +// GET /access_settings/whitelist/{rule_id} # + +$rule_id = "test_url_param"; + +try { + $response = $sg->client->access_settings()->whitelist()->_($rule_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Remove a specific IP from the whitelist # +// DELETE /access_settings/whitelist/{rule_id} # + +$rule_id = "test_url_param"; + +try { + $response = $sg->client->access_settings()->whitelist()->_($rule_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/alerts/alerts.php b/vendor/sendgrid/sendgrid/examples/alerts/alerts.php new file mode 100644 index 00000000..b9a3a195 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/alerts/alerts.php @@ -0,0 +1,88 @@ +client->alerts()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all alerts # +// GET /alerts # + +try { + $response = $sg->client->alerts()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update an alert # +// PATCH /alerts/{alert_id} # + +$request_body = json_decode('{ + "email_to": "example@example.com" +}'); +$alert_id = "test_url_param"; + +try { + $response = $sg->client->alerts()->_($alert_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific alert # +// GET /alerts/{alert_id} # + +$alert_id = "test_url_param"; + +try { + $response = $sg->client->alerts()->_($alert_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete an alert # +// DELETE /alerts/{alert_id} # + +$alert_id = "test_url_param"; + +try { + $response = $sg->client->alerts()->_($alert_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/apikeys/apikeys.php b/vendor/sendgrid/sendgrid/examples/apikeys/apikeys.php new file mode 100644 index 00000000..2f33d0fb --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/apikeys/apikeys.php @@ -0,0 +1,116 @@ +client->api_keys()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all API Keys belonging to the authenticated user # +// GET /api_keys # + +$query_params = json_decode('{"limit": 1}'); + +try { + $response = $sg->client->api_keys()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update the name & scopes of an API Key # +// PUT /api_keys/{api_key_id} # + +$request_body = json_decode('{ + "name": "A New Hope", + "scopes": [ + "user.profile.read", + "user.profile.update" + ] +}'); +$api_key_id = "test_url_param"; + +try { + $response = $sg->client->api_keys()->_($api_key_id)->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update API keys # +// PATCH /api_keys/{api_key_id} # + +$request_body = json_decode('{ + "name": "A New Hope" +}'); +$api_key_id = "test_url_param"; + +try { + $response = $sg->client->api_keys()->_($api_key_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve an existing API Key # +// GET /api_keys/{api_key_id} # + +$api_key_id = "test_url_param"; + +try { + $response = $sg->client->api_keys()->_($api_key_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete API keys # +// DELETE /api_keys/{api_key_id} # + +$api_key_id = "test_url_param"; + +try { + $response = $sg->client->api_keys()->_($api_key_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/asm/asm.php b/vendor/sendgrid/sendgrid/examples/asm/asm.php new file mode 100644 index 00000000..273dafd8 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/asm/asm.php @@ -0,0 +1,245 @@ +client->asm()->groups()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve information about multiple suppression groups # +// GET /asm/groups # + +$query_params = json_decode('{"id": 1}'); + +try { + $response = $sg->client->asm()->groups()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a suppression group. # +// PATCH /asm/groups/{group_id} # + +$request_body = json_decode('{ + "description": "Suggestions for items our users might like.", + "id": 103, + "name": "Item Suggestions" +}'); +$group_id = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Get information on a single suppression group. # +// GET /asm/groups/{group_id} # + +$group_id = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a suppression group. # +// DELETE /asm/groups/{group_id} # + +$group_id = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add suppressions to a suppression group # +// POST /asm/groups/{group_id}/suppressions # + +$request_body = json_decode('{ + "recipient_emails": [ + "test1@example.com", + "test2@example.com" + ] +}'); +$group_id = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->suppressions()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all suppressions for a suppression group # +// GET /asm/groups/{group_id}/suppressions # + +$group_id = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->suppressions()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Search for suppressions within a group # +// POST /asm/groups/{group_id}/suppressions/search # + +$request_body = json_decode('{ + "recipient_emails": [ + "exists1@example.com", + "exists2@example.com", + "doesnotexists@example.com" + ] +}'); +$group_id = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->suppressions()->search()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a suppression from a suppression group # +// DELETE /asm/groups/{group_id}/suppressions/{email} # + +$group_id = "test_url_param"; +$email = "test_url_param"; + +try { + $response = $sg->client->asm()->groups()->_($group_id)->suppressions()->_($email)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all suppressions # +// GET /asm/suppressions # + + +try { + $response = $sg->client->asm()->suppressions()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add recipient addresses to the global suppression group. # +// POST /asm/suppressions/global # + +$request_body = json_decode('{ + "recipient_emails": [ + "test1@example.com", + "test2@example.com" + ] +}'); + +try { + $response = $sg->client->asm()->suppressions()->global()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a Global Suppression # +// GET /asm/suppressions/global/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->asm()->suppressions()->global()->_($email)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Global Suppression # +// DELETE /asm/suppressions/global/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->asm()->suppressions()->global()->_($email)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all suppression groups for an email address # +// GET /asm/suppressions/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->asm()->suppressions()->_($email)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/browsers/browsers.php b/vendor/sendgrid/sendgrid/examples/browsers/browsers.php new file mode 100644 index 00000000..9e50a994 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/browsers/browsers.php @@ -0,0 +1,23 @@ +client->browsers()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/campaigns/campaigns.php b/vendor/sendgrid/sendgrid/examples/campaigns/campaigns.php new file mode 100644 index 00000000..f6768b13 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/campaigns/campaigns.php @@ -0,0 +1,210 @@ +

Check out our spring line!

", + "ip_pool": "marketing", + "list_ids": [ + 110, + 124 + ], + "plain_content": "Check out our spring line!", + "segment_ids": [ + 110 + ], + "sender_id": 124451, + "subject": "New Products for Spring!", + "suppression_group_id": 42, + "title": "March Newsletter" +}'); + +try { + $response = $sg->client->campaigns()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all Campaigns # +// GET /campaigns # + +$query_params = json_decode('{"limit": 1, "offset": 1}'); + +try { + $response = $sg->client->campaigns()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a Campaign # +// PATCH /campaigns/{campaign_id} # + +$request_body = json_decode('{ + "categories": [ + "summer line" + ], + "html_content": "

Check out our summer line!

", + "plain_content": "Check out our summer line!", + "subject": "New Products for Summer!", + "title": "May Newsletter" +}'); +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a single campaign # +// GET /campaigns/{campaign_id} # + +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Campaign # +// DELETE /campaigns/{campaign_id} # + +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a Scheduled Campaign # +// PATCH /campaigns/{campaign_id}/schedules # + +$request_body = json_decode('{ + "send_at": 1489451436 +}'); +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->schedules()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Schedule a Campaign # +// POST /campaigns/{campaign_id}/schedules # + +$request_body = json_decode('{ + "send_at": 1489771528 +}'); +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->schedules()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// View Scheduled Time of a Campaign # +// GET /campaigns/{campaign_id}/schedules # + +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->schedules()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Unschedule a Scheduled Campaign # +// DELETE /campaigns/{campaign_id}/schedules # + +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->schedules()->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Send a Campaign # +// POST /campaigns/{campaign_id}/schedules/now # + +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->schedules()->now()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Send a Test Campaign # +// POST /campaigns/{campaign_id}/schedules/test # + +$request_body = json_decode('{ + "to": "your.email@example.com" +}'); +$campaign_id = "test_url_param"; + +try { + $response = $sg->client->campaigns()->_($campaign_id)->schedules()->test()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/categories/categories.php b/vendor/sendgrid/sendgrid/examples/categories/categories.php new file mode 100644 index 00000000..7510026a --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/categories/categories.php @@ -0,0 +1,53 @@ +client->categories()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Email Statistics for Categories # +// GET /categories/stats # + +$query_params = json_decode('{"end_date": "2016-04-01", "aggregated_by": "day", "limit": 1, "offset": 1, "start_date": "2016-01-01", "categories": "test_string"}'); + +try { + $response = $sg->client->categories()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] # +// GET /categories/stats/sums # + +$query_params = json_decode('{"end_date": "2016-04-01", "aggregated_by": "day", "limit": 1, "sort_by_metric": "test_string", "offset": 1, "start_date": "2016-01-01", "sort_by_direction": "asc"}'); + +try { + $response = $sg->client->categories()->stats()->sums()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/clients/clients.php b/vendor/sendgrid/sendgrid/examples/clients/clients.php new file mode 100644 index 00000000..a4d85c9a --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/clients/clients.php @@ -0,0 +1,39 @@ +client->clients()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve stats by a specific client type. # +// GET /clients/{client_type}/stats # + +$query_params = json_decode('{"aggregated_by": "day", "start_date": "2016-01-01", "end_date": "2016-04-01"}'); +$client_type = "test_url_param"; + +try { + $response = $sg->client->clients()->_($client_type)->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/contactdb/contactdb.php b/vendor/sendgrid/sendgrid/examples/contactdb/contactdb.php new file mode 100644 index 00000000..9d0387da --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/contactdb/contactdb.php @@ -0,0 +1,546 @@ +client->contactdb()->custom_fields()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all custom fields # +// GET /contactdb/custom_fields # + +try { + $response = $sg->client->contactdb()->custom_fields()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a Custom Field # +// GET /contactdb/custom_fields/{custom_field_id} # + +$custom_field_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->custom_fields()->_($custom_field_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Custom Field # +// DELETE /contactdb/custom_fields/{custom_field_id} # + +$custom_field_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->custom_fields()->_($custom_field_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create a List # +// POST /contactdb/lists # + +$request_body = json_decode('{ + "name": "your list name" +}'); + +try { + $response = $sg->client->contactdb()->lists()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all lists # +// GET /contactdb/lists # + +try { + $response = $sg->client->contactdb()->lists()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete Multiple lists # +// DELETE /contactdb/lists # + +$request_body = json_decode('[ + 1, + 2, + 3, + 4 +]'); + +try { + $response = $sg->client->contactdb()->lists()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a List # +// PATCH /contactdb/lists/{list_id} # + +$request_body = json_decode('{ + "name": "newlistname" +}'); +$query_params = json_decode('{"list_id": 1}'); +$list_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->patch($request_body, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a single list # +// GET /contactdb/lists/{list_id} # + +$query_params = json_decode('{"list_id": 1}'); +$list_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a List # +// DELETE /contactdb/lists/{list_id} # + +$query_params = json_decode('{"delete_contacts": "true"}'); +$list_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->delete(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add Multiple Recipients to a List # +// POST /contactdb/lists/{list_id}/recipients # + +$request_body = json_decode('[ + "recipient_id1", + "recipient_id2" +]'); +$list_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->recipients()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all recipients on a List # +// GET /contactdb/lists/{list_id}/recipients # + +$query_params = json_decode('{"page": 1, "page_size": 1, "list_id": 1}'); +$list_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->recipients()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add a Single Recipient to a List # +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} # + +$list_id = "test_url_param"; +$recipient_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->recipients()->_($recipient_id)->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List # +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} # + +$query_params = json_decode('{"recipient_id": 1, "list_id": 1}'); +$list_id = "test_url_param"; +$recipient_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->lists()->_($list_id)->recipients()->_($recipient_id)->delete(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Recipient # +// PATCH /contactdb/recipients # + +$request_body = json_decode('[ + { + "email": "jones@example.com", + "first_name": "Guy", + "last_name": "Jones" + } +]'); + +try { + $response = $sg->client->contactdb()->recipients()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add recipients # +// POST /contactdb/recipients # + +$request_body = json_decode('[ + { + "age": 25, + "email": "example@example.com", + "first_name": "", + "last_name": "User" + }, + { + "age": 25, + "email": "example2@example.com", + "first_name": "Example", + "last_name": "User" + } +]'); + +try { + $response = $sg->client->contactdb()->recipients()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve recipients # +// GET /contactdb/recipients # + +$query_params = json_decode('{"page": 1, "page_size": 1}'); + +try { + $response = $sg->client->contactdb()->recipients()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete Recipient # +// DELETE /contactdb/recipients # + +$request_body = json_decode('[ + "recipient_id1", + "recipient_id2" +]'); + +try { + $response = $sg->client->contactdb()->recipients()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve the count of billable recipients # +// GET /contactdb/recipients/billable_count # + +try { + $response = $sg->client->contactdb()->recipients()->billable_count()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a Count of Recipients # +// GET /contactdb/recipients/count # + +try { + $response = $sg->client->contactdb()->recipients()->count()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve recipients matching search criteria # +// GET /contactdb/recipients/search # + +$query_params = json_decode('{"{field_name}": "test_string"}'); + +try { + $response = $sg->client->contactdb()->recipients()->search()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a single recipient # +// GET /contactdb/recipients/{recipient_id} # + +$recipient_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->recipients()->_($recipient_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Recipient # +// DELETE /contactdb/recipients/{recipient_id} # + +$recipient_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->recipients()->_($recipient_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve the lists that a recipient is on # +// GET /contactdb/recipients/{recipient_id}/lists # + +$recipient_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->recipients()->_($recipient_id)->lists()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve reserved fields # +// GET /contactdb/reserved_fields # + +try { + $response = $sg->client->contactdb()->reserved_fields()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create a Segment # +// POST /contactdb/segments # + +$request_body = json_decode('{ + "conditions": [ + { + "and_or": "", + "field": "last_name", + "operator": "eq", + "value": "Miller" + }, + { + "and_or": "and", + "field": "last_clicked", + "operator": "gt", + "value": "01/02/2015" + }, + { + "and_or": "or", + "field": "clicks.campaign_identifier", + "operator": "eq", + "value": "513" + } + ], + "list_id": 4, + "name": "Last Name Miller" +}'); + +try { + $response = $sg->client->contactdb()->segments()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all segments # +// GET /contactdb/segments # + +try { + $response = $sg->client->contactdb()->segments()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a segment # +// PATCH /contactdb/segments/{segment_id} # + +$request_body = json_decode('{ + "conditions": [ + { + "and_or": "", + "field": "last_name", + "operator": "eq", + "value": "Miller" + } + ], + "list_id": 5, + "name": "The Millers" +}'); +$query_params = json_decode('{"segment_id": "test_string"}'); +$segment_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->segments()->_($segment_id)->patch($request_body, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a segment # +// GET /contactdb/segments/{segment_id} # + +$query_params = json_decode('{"segment_id": 1}'); +$segment_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->segments()->_($segment_id)->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a segment # +// DELETE /contactdb/segments/{segment_id} # + +$query_params = json_decode('{"delete_contacts": "true"}'); +$segment_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->segments()->_($segment_id)->delete(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve recipients on a segment # +// GET /contactdb/segments/{segment_id}/recipients # + +$query_params = json_decode('{"page": 1, "page_size": 1}'); +$segment_id = "test_url_param"; + +try { + $response = $sg->client->contactdb()->segments()->_($segment_id)->recipients()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/dataresidency/setregion.php b/vendor/sendgrid/sendgrid/examples/dataresidency/setregion.php new file mode 100644 index 00000000..b51f17e7 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/dataresidency/setregion.php @@ -0,0 +1,75 @@ +client->mail()->send()->post($email); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo $exceptionMessage, $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// sending to EU data residency + +$sendgrid_eu = buildSendgridObject("eu"); + +try { + $response = $sendgrid_eu->client->mail()->send()->post($email); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo $exceptionMessage, $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// not configuring any region defaults to global +$sendgrid_default = new \SendGrid(getenv('SENDGRID_API_KEY')); +try { + $response = $sendgrid_default->client->mail()->send()->post($email); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo $exceptionMessage, $e->getMessage(), "\n"; +} + +function buildHelloEmail(): Mail +{ + $email = new Mail(); + $email->setFrom("test@example.com", "test"); + $email->setSubject("Sending with Twilio SendGrid is Fun"); + $email->addTo("test@example.co", "test"); + $email->addContent("text/plain", "and easy to do anywhere, even with PHP"); + $email->addContent( + "text/html", "and easy to do anywhere, even with PHP" + ); + $objPersonalization = new Personalization(); + + $objTo = new To('foo@bar.com', 'foo bar'); + $objPersonalization->addTo($objTo); + $email->addPersonalization($objPersonalization); + return $email; +} + +function buildSendgridObject($region): SendGrid +{ + $sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY')); + $sendgrid->setDataResidency($region); + return $sendgrid; +} diff --git a/vendor/sendgrid/sendgrid/examples/devices/devices.php b/vendor/sendgrid/sendgrid/examples/devices/devices.php new file mode 100644 index 00000000..ffe0878f --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/devices/devices.php @@ -0,0 +1,23 @@ +client->devices()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/geo/geo.php b/vendor/sendgrid/sendgrid/examples/geo/geo.php new file mode 100644 index 00000000..a97146ab --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/geo/geo.php @@ -0,0 +1,23 @@ +client->geo()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/helpers/contacts/recipients.php b/vendor/sendgrid/sendgrid/examples/helpers/contacts/recipients.php new file mode 100644 index 00000000..dd5f8daf --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/helpers/contacts/recipients.php @@ -0,0 +1,55 @@ + 'Test', + 'last-name' => 'Tester', + 'email' => 'test@test.com' + ); + + $firstName = $post_body['first-name']; + $lastName = $post_body['last-name']; + $email = $post_body['email']; + $recipient = new \SendGrid\Contacts\Recipient($firstName, $lastName, $email); + // $request_body = json_encode(array($recipient)); + $request_body = json_decode( + '[ + { + "email": "' . $recipient->getEmail() . '", + "first_name": "' . $recipient->getFirstName() . '", + "last_name": "' . $recipient->getLastName() . '" + } + ]' + ); + + try { + $response = $sg->client->contactdb()->recipients()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } +} + +buildRecipientForm(); // This will build and output an HTML form +recipientFormSubmit(); // This will simulate a form submission and will output the response. diff --git a/vendor/sendgrid/sendgrid/examples/helpers/eventwebhook/example.php b/vendor/sendgrid/sendgrid/examples/helpers/eventwebhook/example.php new file mode 100644 index 00000000..62e674ff --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/helpers/eventwebhook/example.php @@ -0,0 +1,20 @@ +convertPublicKeyToECDSA($publicKey); + + return $eventWebhook->verifySignature( + $ecPublicKey, + $request->getContent(), + $request->header(EventWebhookHeader::SIGNATURE), + $request->header(EventWebhookHeader::TIMESTAMP) + ); +} diff --git a/vendor/sendgrid/sendgrid/examples/helpers/mail/example.php b/vendor/sendgrid/sendgrid/examples/helpers/mail/example.php new file mode 100644 index 00000000..be3ead25 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/helpers/mail/example.php @@ -0,0 +1,272 @@ +addTo(new To("test2@example.com")); + $personalization->addFrom(new From("test3@example.com", "Twilio Sendgrid")); + $mail->addPersonalization($personalization); + + //echo json_encode($mail, JSON_PRETTY_PRINT), "\n"; + return $mail; + } catch (\Exception $e) { + echo $e->getMessage(); + } + + return null; +} + +function kitchenSink() +{ + try { + $from = new From("test@example.com", "Twilio SendGrid"); + $subject = "Hello World from the Twilio SendGrid PHP Library"; + $to = new To("test1@example.com", "Example User"); + $content = new Content("text/plain", "some text here"); + + $mail = new Mail($from, $to, $subject, $content); + + $personalization0 = new Personalization(); + $personalization0->addTo(new To("test2@example.com", "Example User")); + $personalization0->addFrom(new From("test3@example.com", "Twilio SendGrid")); + $personalization0->addCc(new Cc("test4@example.com", "Example User")); + $personalization0->addCc(new Cc("test5@example.com", "Example User")); + $personalization0->addBcc(new Bcc("test6@example.com", "Example User")); + $personalization0->addBcc(new Bcc("test7@example.com", "Example User")); + $personalization0->setSubject(new Subject("Hello World from the Twilio SendGrid PHP Library")); + $personalization0->addHeader(new Header("X-Test", "test")); + $personalization0->addHeader(new Header("X-Mock", "true")); + $personalization0->addSubstitution("%name%", "Example User"); + $personalization0->addSubstitution("%city%", "Denver"); + $personalization0->addSubstitution("%sec1%", "%section1%"); + $personalization0->addCustomArg(new CustomArg("user_id", "343")); + $personalization0->addCustomArg(new CustomArg("type", "marketing")); + $personalization0->setSendAt(new SendAt(1443636843)); + $mail->addPersonalization($personalization0); + + $personalization1 = new Personalization(); + $personalization1->addTo(new To("test8@example.com", "Example User")); + $personalization1->addTo(new To("test9@example.com", "Example User")); + $personalization1->addFrom(new From("test10@example.com", "Twilio SendGrid")); + $personalization1->addCc(new Cc("test11@example.com", "Example User")); + $personalization1->addCc(new Cc("test12@example.com", "Example User")); + $personalization1->addBcc(new Bcc("test13@example.com", "Example User")); + $personalization1->addBcc(new Bcc("test14@example.com", "Example User")); + $personalization1->setSubject(new Subject("Hello World from the Twilio SendGrid PHP Library")); + $personalization1->addHeader(new Header("X-Test", "test")); + $personalization1->addHeader(new Header("X-Mock", "true")); + $personalization1->addSubstitution("%name%", "Example User"); + $personalization1->addSubstitution("%city%", "Denver"); + $personalization1->addSubstitution("%sec2%", "%section2%"); + $personalization1->addCustomArg(new CustomArg("user_id", "343")); + $personalization1->addCustomArg(new CustomArg("type", "marketing")); + $personalization1->setSendAt(new SendAt(1443636843)); + $mail->addPersonalization($personalization1); + + // Examples of adding personalization by specifying personalization indexes + $mail->addCc("test15@example.com", "Example User", null, 0); + $mail->addBcc("test16@example.com", "Example User", null, 1); + + $content = new Content("text/html", "some text here"); + $mail->addContent($content); + + $attachment = new Attachment(); + $attachment->setContent("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12"); + $attachment->setType("application/pdf"); + $attachment->setFilename("balance_001.pdf"); + $attachment->setDisposition("attachment"); + $attachment->setContentId("Balance Sheet"); + $mail->addAttachment($attachment); + + $attachment2 = new Attachment(); + $attachment2->setContent("BwdW"); + $attachment2->setType("image/png"); + $attachment2->setFilename("banner.png"); + $attachment2->setDisposition("inline"); + $attachment2->setContentId("Banner"); + $mail->addAttachment($attachment2); + + $mail->setTemplateId("439b6d66-4408-4ead-83de-5c83c2ee313a"); + + # This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work + # $mail->setBatchID("sendgrid_batch_id"); + + $mail->addSection("%section1%", "Substitution Text for Section 1"); + $mail->addSection("%section2%", "Substitution Text for Section 2"); + + $mail->addHeader("X-Test1", "1"); + $mail->addHeader("X-Test2", "2"); + + $mail->addCategory("May"); + $mail->addCategory("2016"); + + $mail->addCustomArg("campaign", "welcome"); + $mail->addCustomArg("weekday", "morning"); + + $mail->setSendAt(1443636842); + + $asm = new ASM(); + $asm->setGroupId(99); + $asm->setGroupsToDisplay([4,5,6,7,8]); + $mail->setASM($asm); + + $mail->setIpPoolName("23"); + + $mail_settings = new MailSettings(); + $bcc_settings = new BccSettings(); + $bcc_settings->setEnable(true); + $bcc_settings->setEmail("test@example.com"); + $mail_settings->setBccSettings($bcc_settings); + $sandbox_mode = new SandBoxMode(); + $sandbox_mode->setEnable(true); + $mail_settings->setSandboxMode($sandbox_mode); + // Note: Bypass Spam, Bounce, and Unsubscribe management cannot + // be combined with Bypass List Management + $bypass_bounce_management = new BypassBounceManagement(); + $bypass_bounce_management->setEnable(true); + $mail_settings->setBypassBounceManagement($bypass_bounce_management); + $bypass_list_management = new BypassListManagement(); + $bypass_list_management->setEnable(true); + $mail_settings->setBypassListManagement($bypass_list_management); + $bypass_spam_management = new BypassSpamManagement(); + $bypass_spam_management->setEnable(true); + $mail_settings->setBypassSpamManagement($bypass_spam_management); + $bypass_unsubscribe_management = new BypassUnsubscribeManagement(); + $bypass_unsubscribe_management->setEnable(true); + $mail_settings->setBypassUnsubscribeManagement($bypass_unsubscribe_management); + $footer = new Footer(); + $footer->setEnable(true); + $footer->setText("Footer Text"); + $footer->setHtml("Footer Text"); + $mail_settings->setFooter($footer); + $spam_check = new SpamCheck(); + $spam_check->setEnable(true); + $spam_check->setThreshold(1); + $spam_check->setPostToUrl("https://spamcatcher.sendgrid.com"); + $mail_settings->setSpamCheck($spam_check); + $mail->setMailSettings($mail_settings); + + $tracking_settings = new TrackingSettings(); + $click_tracking = new ClickTracking(); + $click_tracking->setEnable(true); + $click_tracking->setEnableText(true); + $tracking_settings->setClickTracking($click_tracking); + $open_tracking = new OpenTracking(); + $open_tracking->setEnable(true); + $open_tracking->setSubstitutionTag("Optional tag to replace with the open image in the body of the message"); + $tracking_settings->setOpenTracking($open_tracking); + $subscription_tracking = new SubscriptionTracking(); + $subscription_tracking->setEnable(true); + $subscription_tracking->setText("text to insert into the text/plain portion of the message"); + $subscription_tracking->setHtml("html to insert into the text/html portion of the message"); + $subscription_tracking->setSubstitutionTag("Optional tag to replace with the open image in the body of the message"); + $tracking_settings->setSubscriptionTracking($subscription_tracking); + $ganalytics = new Ganalytics(); + $ganalytics->setEnable(true); + $ganalytics->setCampaignSource("some source"); + $ganalytics->setCampaignTerm("some term"); + $ganalytics->setCampaignContent("some content"); + $ganalytics->setCampaignName("some name"); + $ganalytics->setCampaignMedium("some medium"); + $tracking_settings->setGanalytics($ganalytics); + $mail->setTrackingSettings($tracking_settings); + + $reply_to = new ReplyTo("test@example.com", "Optional Name"); + $mail->setReplyTo($reply_to); + + //echo json_encode($mail, JSON_PRETTY_PRINT), "\n"; + return $mail; + } catch (\Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + + return null; +} + +function sendHelloEmail() +{ + $apiKey = getenv('SENDGRID_API_KEY'); + $sg = new \SendGrid($apiKey); + + $request_body = helloEmail(); + + if (!($request_body instanceof Mail)) { + echo 'Invalid request_body to send HelloEmail', "\n"; + return; + } + + try { + $response = $sg->client->mail()->send()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; + } catch (\Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } +} + +function sendKitchenSink() +{ + $apiKey = getenv('SENDGRID_API_KEY'); + $sg = new \SendGrid($apiKey); + + $request_body = kitchenSink(); + + if (!($request_body instanceof Mail)) { + echo 'Invalid request_body to send KitchenSink', "\n"; + return; + } + + try { + $response = $sg->client->mail()->send()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; + } catch (\Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } +} + +sendHelloEmail(); // this will actually send an email +sendKitchenSink(); // this will only send an email if you set SandBox Mode to false diff --git a/vendor/sendgrid/sendgrid/examples/helpers/stats/example.php b/vendor/sendgrid/sendgrid/examples/helpers/stats/example.php new file mode 100644 index 00000000..b56228ff --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/helpers/stats/example.php @@ -0,0 +1,29 @@ +client->categories()->post(['category' => 'cat2']); +//$response = $sg->client->categories()->get(null, $query_params); +$globalResponse = $sg->client->stats()->get(null, $stats->getGlobal()); + +$categoryResponse = $sg->client->categories()->stats()->get(null, $stats->getCategory(['category1', 'category2'])); +$categorySumResponse = $sg->client->categories()->stats()->sums()->get(null, $stats->getSum()); + +$subuserResponse = $sg->client->subusers()->stats()->get(null, $stats->getSubuser(['user1', 'user2'])); +$subuserSumResponse = $sg->client->subusers()->stats()->sums()->get(null, $stats->getSum()); +$subuserMonthlyResponse = $sg->client->subusers()->stats()->monthly()->get(null, $stats->getSubuserMonthly()); + +var_dump($globalResponse); +var_dump($categoryResponse); +var_dump($categoryResponse); +var_dump($subuserResponse); +var_dump($subuserSumResponse); +var_dump($subuserMonthlyResponse); diff --git a/vendor/sendgrid/sendgrid/examples/ips/ips.php b/vendor/sendgrid/sendgrid/examples/ips/ips.php new file mode 100644 index 00000000..33973e02 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/ips/ips.php @@ -0,0 +1,223 @@ +client->ips()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all assigned IPs # +// GET /ips/assigned # + +try { + $response = $sg->client->ips()->assigned()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create an IP pool. # +// POST /ips/pools # + +$request_body = json_decode('{ + "name": "marketing" +}'); + +try { + $response = $sg->client->ips()->pools()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all IP pools. # +// GET /ips/pools # + +try { + $response = $sg->client->ips()->pools()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update an IP pools name. # +// PUT /ips/pools/{pool_name} # + +$request_body = json_decode('{ + "name": "new_pool_name" +}'); +$pool_name = "test_url_param"; + +try { + $response = $sg->client->ips()->pools()->_($pool_name)->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all IPs in a specified pool. # +// GET /ips/pools/{pool_name} # + +$pool_name = "test_url_param"; + +try { + $response = $sg->client->ips()->pools()->_($pool_name)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete an IP pool. # +// DELETE /ips/pools/{pool_name} # + +$pool_name = "test_url_param"; + +try { + $response = $sg->client->ips()->pools()->_($pool_name)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add an IP address to a pool # +// POST /ips/pools/{pool_name}/ips # + +$request_body = json_decode('{ + "ip": "0.0.0.0" +}'); +$pool_name = "test_url_param"; + +try { + $response = $sg->client->ips()->pools()->_($pool_name)->ips()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Remove an IP address from a pool. # +// DELETE /ips/pools/{pool_name}/ips/{ip} # + +$pool_name = "test_url_param"; +$ip = "test_url_param"; + +try { + $response = $sg->client->ips()->pools()->_($pool_name)->ips()->_($ip)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add an IP to warmup # +// POST /ips/warmup # + +$request_body = json_decode('{ + "ip": "0.0.0.0" +}'); + +try { + $response = $sg->client->ips()->warmup()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all IPs currently in warmup # +// GET /ips/warmup # + +try { + $response = $sg->client->ips()->warmup()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve warmup status for a specific IP address # +// GET /ips/warmup/{ip_address} # + +$ip_address = "test_url_param"; + +try { + $response = $sg->client->ips()->warmup()->_($ip_address)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Remove an IP from warmup # +// DELETE /ips/warmup/{ip_address} # + +$ip_address = "test_url_param"; + +try { + $response = $sg->client->ips()->warmup()->_($ip_address)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all IP pools an IP address belongs to # +// GET /ips/{ip_address} # + +$ip_address = "test_url_param"; + +try { + $response = $sg->client->ips()->_($ip_address)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/mail/mail.php b/vendor/sendgrid/sendgrid/examples/mail/mail.php new file mode 100644 index 00000000..84463f40 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/mail/mail.php @@ -0,0 +1,198 @@ +client->mail()->batch()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Validate batch ID # +// GET /mail/batch/{batch_id} # + +$batch_id = "test_url_param"; + +try { + $response = $sg->client->mail()->batch()->_($batch_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// v3 Mail Send # +// POST /mail/send # +// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-php/blob/HEAD/lib/mail/README.md). + +$request_body = json_decode('{ + "asm": { + "group_id": 1, + "groups_to_display": [ + 1, + 2, + 3 + ] + }, + "attachments": [ + { + "content": "[BASE64 encoded content block here]", + "content_id": "ii_139db99fdb5c3704", + "disposition": "inline", + "filename": "file1.jpg", + "name": "file1", + "type": "image/jpeg" + } + ], + "batch_id": "[YOUR BATCH ID GOES HERE]", + "categories": [ + "category1", + "category2" + ], + "content": [ + { + "type": "text/html", + "value": "

Hello, world!

" + } + ], + "custom_args": { + "New Argument 1": "New Value 1", + "activationAttempt": "1", + "customerAccountNumber": "[CUSTOMER ACCOUNT NUMBER GOES HERE]" + }, + "from": { + "email": "sam.smith@example.com", + "name": "Sam Smith" + }, + "headers": {}, + "ip_pool_name": "[YOUR POOL NAME GOES HERE]", + "mail_settings": { + "bcc": { + "email": "ben.doe@example.com", + "enable": true + }, + "bypass_bounce_management": { + "enable": true + }, + "bypass_list_management": { + "enable": true + }, + "bypass_spam_management": { + "enable": true + }, + "bypass_unsubscribe_management": { + "enable": true + }, + "footer": { + "enable": true, + "html": "

Thanks
The Twilio SendGrid Team

", + "text": "Thanks,/n The Twilio SendGrid Team" + }, + "sandbox_mode": { + "enable": false + }, + "spam_check": { + "enable": true, + "post_to_url": "http://example.com/compliance", + "threshold": 3 + } + }, + "personalizations": [ + { + "bcc": [ + { + "email": "sam.doe@example.com", + "name": "Sam Doe" + } + ], + "cc": [ + { + "email": "jane.doe@example.com", + "name": "Jane Doe" + } + ], + "custom_args": { + "New Argument 1": "New Value 1", + "activationAttempt": "1", + "customerAccountNumber": "[CUSTOMER ACCOUNT NUMBER GOES HERE]" + }, + "headers": { + "X-Accept-Language": "en", + "X-Mailer": "MyApp" + }, + "send_at": 1409348513, + "subject": "Hello, World!", + "substitutions": { + "id": "substitutions", + "type": "object" + }, + "to": [ + { + "email": "john.doe@example.com", + "name": "John Doe" + } + ] + } + ], + "reply_to": { + "email": "sam.smith@example.com", + "name": "Sam Smith" + }, + "sections": { + "section": { + ":sectionName1": "section 1 text", + ":sectionName2": "section 2 text" + } + }, + "send_at": 1409348513, + "subject": "Hello, World!", + "template_id": "[YOUR TEMPLATE ID GOES HERE]", + "tracking_settings": { + "click_tracking": { + "enable": true, + "enable_text": true + }, + "ganalytics": { + "enable": true, + "utm_campaign": "[NAME OF YOUR REFERRER SOURCE]", + "utm_content": "[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]", + "utm_medium": "[NAME OF YOUR MARKETING MEDIUM e.g. email]", + "utm_name": "[NAME OF YOUR CAMPAIGN]", + "utm_term": "[IDENTIFY PAID KEYWORDS HERE]" + }, + "open_tracking": { + "enable": true, + "substitution_tag": "%opentrack" + }, + "subscription_tracking": { + "enable": true, + "html": "If you would like to unsubscribe and stop receiving these emails <% clickhere %>.", + "substitution_tag": "<%click here%>", + "text": "If you would like to unsubscribe and stop receiving these emails <% click here %>." + } + } +}'); + +try { + $response = $sg->client->mail()->send()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/mailboxproviders/mailboxproviders.php b/vendor/sendgrid/sendgrid/examples/mailboxproviders/mailboxproviders.php new file mode 100644 index 00000000..d0fd5671 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/mailboxproviders/mailboxproviders.php @@ -0,0 +1,23 @@ +client->mailbox_providers()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/mailsettings/mailsettings.php b/vendor/sendgrid/sendgrid/examples/mailsettings/mailsettings.php new file mode 100644 index 00000000..62dca377 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/mailsettings/mailsettings.php @@ -0,0 +1,307 @@ +client->mail_settings()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update address whitelist mail settings # +// PATCH /mail_settings/address_whitelist # + +$request_body = json_decode('{ + "enabled": true, + "list": [ + "email1@example.com", + "example.com" + ] +}'); + +try { + $response = $sg->client->mail_settings()->address_whitelist()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve address whitelist mail settings # +// GET /mail_settings/address_whitelist # + +try { + $response = $sg->client->mail_settings()->address_whitelist()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update BCC mail settings # +// PATCH /mail_settings/bcc # + +$request_body = json_decode('{ + "email": "email@example.com", + "enabled": false +}'); + +try { + $response = $sg->client->mail_settings()->bcc()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all BCC mail settings # +// GET /mail_settings/bcc # + +try { + $response = $sg->client->mail_settings()->bcc()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update bounce purge mail settings # +// PATCH /mail_settings/bounce_purge # + +$request_body = json_decode('{ + "enabled": true, + "hard_bounces": 5, + "soft_bounces": 5 +}'); + +try { + $response = $sg->client->mail_settings()->bounce_purge()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve bounce purge mail settings # +// GET /mail_settings/bounce_purge # + +try { + $response = $sg->client->mail_settings()->bounce_purge()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update footer mail settings # +// PATCH /mail_settings/footer # + +$request_body = json_decode('{ + "enabled": true, + "html_content": "...", + "plain_content": "..." +}'); + +try { + $response = $sg->client->mail_settings()->footer()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve footer mail settings # +// GET /mail_settings/footer # + +try { + $response = $sg->client->mail_settings()->footer()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update forward bounce mail settings # +// PATCH /mail_settings/forward_bounce # + +$request_body = json_decode('{ + "email": "example@example.com", + "enabled": true +}'); + +try { + $response = $sg->client->mail_settings()->forward_bounce()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve forward bounce mail settings # +// GET /mail_settings/forward_bounce # + +try { + $response = $sg->client->mail_settings()->forward_bounce()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update forward spam mail settings # +// PATCH /mail_settings/forward_spam # + +$request_body = json_decode('{ + "email": "", + "enabled": false +}'); + +try { + $response = $sg->client->mail_settings()->forward_spam()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve forward spam mail settings # +// GET /mail_settings/forward_spam # + +try { + $response = $sg->client->mail_settings()->forward_spam()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update plain content mail settings # +// PATCH /mail_settings/plain_content # + +$request_body = json_decode('{ + "enabled": false +}'); + +try { + $response = $sg->client->mail_settings()->plain_content()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve plain content mail settings # +// GET /mail_settings/plain_content # + +try { + $response = $sg->client->mail_settings()->plain_content()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update spam check mail settings # +// PATCH /mail_settings/spam_check # + +$request_body = json_decode('{ + "enabled": true, + "max_score": 5, + "url": "url" +}'); + +try { + $response = $sg->client->mail_settings()->spam_check()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve spam check mail settings # +// GET /mail_settings/spam_check # + +try { + $response = $sg->client->mail_settings()->spam_check()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update template mail settings # +// PATCH /mail_settings/template # + +$request_body = json_decode('{ + "enabled": true, + "html_content": "<% body %>" +}'); + +try { + $response = $sg->client->mail_settings()->template()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve legacy template mail settings # +// GET /mail_settings/template # + +try { + $response = $sg->client->mail_settings()->template()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/partnersettings/partnersettings.php b/vendor/sendgrid/sendgrid/examples/partnersettings/partnersettings.php new file mode 100644 index 00000000..fde977df --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/partnersettings/partnersettings.php @@ -0,0 +1,56 @@ +client->partner_settings()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Updates New Relic partner settings. # +// PATCH /partner_settings/new_relic # + +$request_body = json_decode('{ + "enable_subuser_statistics": true, + "enabled": true, + "license_key": "" +}'); + +try { + $response = $sg->client->partner_settings()->new_relic()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Returns all New Relic partner settings. # +// GET /partner_settings/new_relic # + + +try { + $response = $sg->client->partner_settings()->new_relic()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/scopes/scopes.php b/vendor/sendgrid/sendgrid/examples/scopes/scopes.php new file mode 100644 index 00000000..43814ed8 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/scopes/scopes.php @@ -0,0 +1,21 @@ +client->scopes()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/senderauthentication/senderauthentication.php b/vendor/sendgrid/sendgrid/examples/senderauthentication/senderauthentication.php new file mode 100644 index 00000000..333074c4 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/senderauthentication/senderauthentication.php @@ -0,0 +1,444 @@ +client->whitelabel()->domains()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// List all domain authentications. # +// GET /whitelabel/domains # + +$query_params = json_decode('{"username": "test_string", "domain": "test_string", "exclude_subusers": "true", "limit": 1, "offset": 1}'); + +try { + $response = $sg->client->whitelabel()->domains()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Get the default domain authentication. # +// GET /whitelabel/domains/default # + +try { + $response = $sg->client->whitelabel()->domains()->default()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// List the domain authentication associated with the given user. # +// GET /whitelabel/domains/subuser # + +try { + $response = $sg->client->whitelabel()->domains()->subuser()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Disassociate a domain authentication from a given user. # +// DELETE /whitelabel/domains/subuser # + +try { + $response = $sg->client->whitelabel()->domains()->subuser()->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a domain authentication. # +// PATCH /whitelabel/domains/{domain_id} # + +$request_body = json_decode('{ + "custom_spf": true, + "default": false +}'); +$domain_id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($domain_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a domain authentication. # +// GET /whitelabel/domains/{domain_id} # + +$domain_id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($domain_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a domain authentication. # +// DELETE /whitelabel/domains/{domain_id} # + +$domain_id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($domain_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Associate a domain authentication with a given user. # +// POST /whitelabel/domains/{domain_id}/subuser # + +$request_body = json_decode('{ + "username": "jane@example.com" +}'); +$domain_id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($domain_id)->subuser()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Add an IP to a domain authentication. # +// POST /whitelabel/domains/{id}/ips # + +$request_body = json_decode('{ + "ip": "192.168.0.1" +}'); +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($id)->ips()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Remove an IP from a domain authentication. # +// DELETE /whitelabel/domains/{id}/ips/{ip} # + +$id = "test_url_param"; +$ip = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($id)->ips()->_($ip)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Validate a domain authentication. # +// POST /whitelabel/domains/{id}/validate # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->domains()->_($id)->validate()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create a reverse DNS record # +// POST /whitelabel/ips # + +$request_body = json_decode('{ + "domain": "example.com", + "ip": "192.168.1.1", + "subdomain": "email" +}'); + +try { + $response = $sg->client->whitelabel()->ips()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all reverse DNS records # +// GET /whitelabel/ips # + +$query_params = json_decode('{"ip": "test_string", "limit": 1, "offset": 1}'); + +try { + $response = $sg->client->whitelabel()->ips()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a reverse DNS record # +// GET /whitelabel/ips/{id} # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->ips()->_($id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a reverse DNS record # +// DELETE /whitelabel/ips/{id} # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->ips()->_($id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Validate a reverse DNS record # +// POST /whitelabel/ips/{id}/validate # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->ips()->_($id)->validate()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create a Branded Link # +// POST /whitelabel/links # + +$request_body = json_decode('{ + "default": true, + "domain": "example.com", + "subdomain": "mail" +}'); +$query_params = json_decode('{"limit": 1, "offset": 1}'); + +try { + $response = $sg->client->whitelabel()->links()->post($request_body, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all link brandings # +// GET /whitelabel/links # + +$query_params = json_decode('{"limit": 1}'); + +try { + $response = $sg->client->whitelabel()->links()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a Default Link BrandingBranding # +// GET /whitelabel/links/default # + +$query_params = json_decode('{"domain": "test_string"}'); + +try { + $response = $sg->client->whitelabel()->links()->default()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Associated Link Branding # +// GET /whitelabel/links/subuser # + +$query_params = json_decode('{"username": "test_string"}'); + +try { + $response = $sg->client->whitelabel()->links()->subuser()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Disassociate a Link Branding # +// DELETE /whitelabel/links/subuser # + +$query_params = json_decode('{"username": "test_string"}'); + +try { + $response = $sg->client->whitelabel()->links()->subuser()->delete(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a Link Branding # +// PATCH /whitelabel/links/{id} # + +$request_body = json_decode('{ + "default": true +}'); +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->links()->_($id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a Link Branding # +// GET /whitelabel/links/{id} # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->links()->_($id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Link Branding # +// DELETE /whitelabel/links/{id} # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->links()->_($id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Validate a Link Branding # +// POST /whitelabel/links/{id}/validate # + +$id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->links()->_($id)->validate()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Associate a Link Branding # +// POST /whitelabel/links/{link_id}/subuser # + +$request_body = json_decode('{ + "username": "jane@example.com" +}'); +$link_id = "test_url_param"; + +try { + $response = $sg->client->whitelabel()->links()->_($link_id)->subuser()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/senders/senders.php b/vendor/sendgrid/sendgrid/examples/senders/senders.php new file mode 100644 index 00000000..5e8f406c --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/senders/senders.php @@ -0,0 +1,129 @@ +client->senders()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Get all Sender Identities # +// GET /senders # + +try { + $response = $sg->client->senders()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a Sender Identity # +// PATCH /senders/{sender_id} # + +$request_body = json_decode('{ + "address": "123 Elm St.", + "address_2": "Apt. 456", + "city": "Denver", + "country": "United States", + "from": { + "email": "from@example.com", + "name": "Example INC" + }, + "nickname": "My Sender ID", + "reply_to": { + "email": "replyto@example.com", + "name": "Example INC" + }, + "state": "Colorado", + "zip": "80202" +}'); +$sender_id = "test_url_param"; + +try { + $response = $sg->client->senders()->_($sender_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// View a Sender Identity # +// GET /senders/{sender_id} # + +$sender_id = "test_url_param"; + +try { + $response = $sg->client->senders()->_($sender_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a Sender Identity # +// DELETE /senders/{sender_id} # + +$sender_id = "test_url_param"; + +try { + $response = $sg->client->senders()->_($sender_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Resend Sender Identity Verification # +// POST /senders/{sender_id}/resend_verification # + +$sender_id = "test_url_param"; + +try { + $response = $sg->client->senders()->_($sender_id)->resend_verification()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/stats/stats.php b/vendor/sendgrid/sendgrid/examples/stats/stats.php new file mode 100644 index 00000000..458bc480 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/stats/stats.php @@ -0,0 +1,23 @@ +client->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/subusers/subusers.php b/vendor/sendgrid/sendgrid/examples/subusers/subusers.php new file mode 100644 index 00000000..ed669fa9 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/subusers/subusers.php @@ -0,0 +1,241 @@ +client->subusers()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// List all Subusers # +// GET /subusers # + +$query_params = json_decode('{"username": "test_string", "limit": 1, "offset": 1}'); + +try { + $response = $sg->client->subusers()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Subuser Reputations # +// GET /subusers/reputations # + +$query_params = json_decode('{"usernames": "test_string"}'); + +try { + $response = $sg->client->subusers()->reputations()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve email statistics for your subusers. # +// GET /subusers/stats # + +$query_params = json_decode('{"end_date": "2016-04-01", "aggregated_by": "day", "limit": 1, "offset": 1, "start_date": "2016-01-01", "subusers": "test_string"}'); + +try { + $response = $sg->client->subusers()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve monthly stats for all subusers # +// GET /subusers/stats/monthly # + +$query_params = json_decode('{"subuser": "test_string", "limit": 1, "sort_by_metric": "test_string", "offset": 1, "date": "test_string", "sort_by_direction": "asc"}'); + +try { + $response = $sg->client->subusers()->stats()->monthly()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve the totals for each email statistic metric for all subusers. # +// GET /subusers/stats/sums # + +$query_params = json_decode('{"end_date": "2016-04-01", "aggregated_by": "day", "limit": 1, "sort_by_metric": "test_string", "offset": 1, "start_date": "2016-01-01", "sort_by_direction": "asc"}'); + +try { + $response = $sg->client->subusers()->stats()->sums()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Enable/disable a subuser # +// PATCH /subusers/{subuser_name} # + +$request_body = json_decode('{ + "disabled": false +}'); +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a subuser # +// DELETE /subusers/{subuser_name} # + +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update IPs assigned to a subuser # +// PUT /subusers/{subuser_name}/ips # + +$request_body = json_decode('[ + "127.0.0.1" +]'); +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->ips()->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Monitor Settings for a subuser # +// PUT /subusers/{subuser_name}/monitor # + +$request_body = json_decode('{ + "email": "example@example.com", + "frequency": 500 +}'); +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->monitor()->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create monitor settings # +// POST /subusers/{subuser_name}/monitor # + +$request_body = json_decode('{ + "email": "example@example.com", + "frequency": 50000 +}'); +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->monitor()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve monitor settings for a subuser # +// GET /subusers/{subuser_name}/monitor # + +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->monitor()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete monitor settings # +// DELETE /subusers/{subuser_name}/monitor # + +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->monitor()->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve the monthly email statistics for a single subuser # +// GET /subusers/{subuser_name}/stats/monthly # + +$query_params = json_decode('{"date": "test_string", "sort_by_direction": "asc", "limit": 1, "sort_by_metric": "test_string", "offset": 1}'); +$subuser_name = "test_url_param"; + +try { + $response = $sg->client->subusers()->_($subuser_name)->stats()->monthly()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/suppression/suppression.php b/vendor/sendgrid/sendgrid/examples/suppression/suppression.php new file mode 100644 index 00000000..9c0702f7 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/suppression/suppression.php @@ -0,0 +1,288 @@ +client->suppression()->blocks()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete blocks # +// DELETE /suppression/blocks # + +$request_body = json_decode('{ + "delete_all": false, + "emails": [ + "example1@example.com", + "example2@example.com" + ] +}'); + +try { + $response = $sg->client->suppression()->blocks()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific block # +// GET /suppression/blocks/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->blocks()->_($email)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a specific block # +// DELETE /suppression/blocks/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->blocks()->_($email)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all bounces # +// GET /suppression/bounces # + +$query_params = json_decode('{"start_time": 1, "end_time": 1}'); + +try { + $response = $sg->client->suppression()->bounces()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete bounces # +// DELETE /suppression/bounces # + +$request_body = json_decode('{ + "delete_all": true, + "emails": [ + "example@example.com", + "example2@example.com" + ] +}'); + +try { + $response = $sg->client->suppression()->bounces()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a Bounce # +// GET /suppression/bounces/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->bounces()->_($email)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a bounce # +// DELETE /suppression/bounces/{email} # + +$query_params = json_decode('{"email_address": "example@example.com"}'); +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->bounces()->_($email)->delete(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all invalid emails # +// GET /suppression/invalid_emails # + +$query_params = json_decode('{"start_time": 1, "limit": 1, "end_time": 1, "offset": 1}'); + +try { + $response = $sg->client->suppression()->invalid_emails()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete invalid emails # +// DELETE /suppression/invalid_emails # + +$request_body = json_decode('{ + "delete_all": false, + "emails": [ + "example1@example.com", + "example2@example.com" + ] +}'); + +try { + $response = $sg->client->suppression()->invalid_emails()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific invalid email # +// GET /suppression/invalid_emails/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->invalid_emails()->_($email)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a specific invalid email # +// DELETE /suppression/invalid_emails/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->invalid_emails()->_($email)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific spam report # +// GET /suppression/spam_report/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->spam_reports()->_($email)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a specific spam report # +// DELETE /suppression/spam_report/{email} # + +$email = "test_url_param"; + +try { + $response = $sg->client->suppression()->spam_reports()->_($email)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all spam reports # +// GET /suppression/spam_reports # + +$query_params = json_decode('{"start_time": 1, "limit": 1, "end_time": 1, "offset": 1}'); + +try { + $response = $sg->client->suppression()->spam_reports()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete spam reports # +// DELETE /suppression/spam_reports # + +$request_body = json_decode('{ + "delete_all": false, + "emails": [ + "example1@example.com", + "example2@example.com" + ] +}'); + +try { + $response = $sg->client->suppression()->spam_reports()->delete($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all global suppressions # +// GET /suppression/unsubscribes # + +$query_params = json_decode('{"start_time": 1, "limit": 1, "end_time": 1, "offset": 1}'); + +try { + $response = $sg->client->suppression()->unsubscribes()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/templates/templates.php b/vendor/sendgrid/sendgrid/examples/templates/templates.php new file mode 100644 index 00000000..4dce6df9 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/templates/templates.php @@ -0,0 +1,182 @@ +client->templates()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all transactional templates (legacy & dynamic). # +// GET /templates # + +$query_params = ['generations' => 'legacy,dynamic']; + +try { + $response = $sg->client->templates()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Edit a transactional template. # +// PATCH /templates/{template_id} # + +$request_body = json_decode('{ + "name": "new_example_name" +}'); +$template_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a single transactional template. # +// GET /templates/{template_id} # + +$template_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a template. # +// DELETE /templates/{template_id} # + +$template_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create a new transactional template version. # +// POST /templates/{template_id}/versions # + +$request_body = json_decode('{ + "active": 1, + "html_content": "<%body%>", + "name": "example_version_name", + "plain_content": "<%body%>", + "subject": "<%subject%>", + "template_id": "ddb96bbc-9b92-425e-8979-99464621b543" +}'); +$template_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->versions()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Edit a transactional template version. # +// PATCH /templates/{template_id}/versions/{version_id} # + +$request_body = json_decode('{ + "active": 1, + "html_content": "<%body%>", + "name": "updated_example_name", + "plain_content": "<%body%>", + "subject": "<%subject%>" +}'); +$template_id = "test_url_param"; +$version_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->versions()->_($version_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific transactional template version. # +// GET /templates/{template_id}/versions/{version_id} # + +$template_id = "test_url_param"; +$version_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->versions()->_($version_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a transactional template version. # +// DELETE /templates/{template_id}/versions/{version_id} # + +$template_id = "test_url_param"; +$version_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->versions()->_($version_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Activate a transactional template version. # +// POST /templates/{template_id}/versions/{version_id}/activate # + +$template_id = "test_url_param"; +$version_id = "test_url_param"; + +try { + $response = $sg->client->templates()->_($template_id)->versions()->_($version_id)->activate()->post(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/trackingsettings/trackingsettings.php b/vendor/sendgrid/sendgrid/examples/trackingsettings/trackingsettings.php new file mode 100644 index 00000000..98477d78 --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/trackingsettings/trackingsettings.php @@ -0,0 +1,153 @@ +client->tracking_settings()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Click Tracking Settings # +// PATCH /tracking_settings/click # + +$request_body = json_decode('{ + "enabled": true +}'); + +try { + $response = $sg->client->tracking_settings()->click()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Click Track Settings # +// GET /tracking_settings/click # + +try { + $response = $sg->client->tracking_settings()->click()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Google Analytics Settings # +// PATCH /tracking_settings/google_analytics # + +$request_body = json_decode('{ + "enabled": true, + "utm_campaign": "website", + "utm_content": "", + "utm_medium": "email", + "utm_source": "sendgrid.com", + "utm_term": "" +}'); + +try { + $response = $sg->client->tracking_settings()->google_analytics()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Google Analytics Settings # +// GET /tracking_settings/google_analytics # + +try { + $response = $sg->client->tracking_settings()->google_analytics()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Open Tracking Settings # +// PATCH /tracking_settings/open # + +$request_body = json_decode('{ + "enabled": true +}'); + +try { + $response = $sg->client->tracking_settings()->open()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Get Open Tracking Settings # +// GET /tracking_settings/open # + +try { + $response = $sg->client->tracking_settings()->open()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Subscription Tracking Settings # +// PATCH /tracking_settings/subscription # + +$request_body = json_decode('{ + "enabled": true, + "html_content": "html content", + "landing": "landing page html", + "plain_content": "text content", + "replace": "replacement tag", + "url": "url" +}'); + +try { + $response = $sg->client->tracking_settings()->subscription()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Subscription Tracking Settings # +// GET /tracking_settings/subscription # + +try { + $response = $sg->client->tracking_settings()->subscription()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/examples/user/user.php b/vendor/sendgrid/sendgrid/examples/user/user.php new file mode 100644 index 00000000..9754ffba --- /dev/null +++ b/vendor/sendgrid/sendgrid/examples/user/user.php @@ -0,0 +1,412 @@ +client->user()->account()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve your credit balance # +// GET /user/credits # + +try { + $response = $sg->client->user()->credits()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update your account email address # +// PUT /user/email # + +$request_body = json_decode('{ + "email": "example@example.com" +}'); + +try { + $response = $sg->client->user()->email()->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve your account email address # +// GET /user/email # + +try { + $response = $sg->client->user()->email()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update your password # +// PUT /user/password # + +$request_body = json_decode('{ + "new_password": "new_password", + "old_password": "old_password" +}'); + +try { + $response = $sg->client->user()->password()->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a user's profile # +// PATCH /user/profile # + +$request_body = json_decode('{ + "city": "Orange", + "first_name": "Example", + "last_name": "User" +}'); + +try { + $response = $sg->client->user()->profile()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Get a user's profile # +// GET /user/profile # + + +try { + $response = $sg->client->user()->profile()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Cancel or pause a scheduled send # +// POST /user/scheduled_sends # + +$request_body = json_decode('{ + "batch_id": "YOUR_BATCH_ID", + "status": "pause" +}'); + +try { + $response = $sg->client->user()->scheduled_sends()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all scheduled sends # +// GET /user/scheduled_sends # + +try { + $response = $sg->client->user()->scheduled_sends()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update user scheduled send information # +// PATCH /user/scheduled_sends/{batch_id} # + +$request_body = json_decode('{ + "status": "pause" +}'); +$batch_id = "test_url_param"; + +try { + $response = $sg->client->user()->scheduled_sends()->_($batch_id)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve scheduled send # +// GET /user/scheduled_sends/{batch_id} # + +$batch_id = "test_url_param"; + +try { + $response = $sg->client->user()->scheduled_sends()->_($batch_id)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a cancellation or pause of a scheduled send # +// DELETE /user/scheduled_sends/{batch_id} # + +$batch_id = "test_url_param"; + +try { + $response = $sg->client->user()->scheduled_sends()->_($batch_id)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Enforced TLS settings # +// PATCH /user/settings/enforced_tls # + +$request_body = json_decode('{ + "require_tls": true, + "require_valid_cert": false +}'); + +try { + $response = $sg->client->user()->settings()->enforced_tls()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve current Enforced TLS settings. # +// GET /user/settings/enforced_tls # + +try { + $response = $sg->client->user()->settings()->enforced_tls()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update your username # +// PUT /user/username # + +$request_body = json_decode('{ + "username": "test_username" +}'); + +try { + $response = $sg->client->user()->username()->put($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve your username # +// GET /user/username # + +try { + $response = $sg->client->user()->username()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update Event Notification Settings # +// PATCH /user/webhooks/event/settings # + +$request_body = json_decode('{ + "bounce": true, + "click": true, + "deferred": true, + "delivered": true, + "dropped": true, + "enabled": true, + "group_resubscribe": true, + "group_unsubscribe": true, + "open": true, + "processed": true, + "spam_report": true, + "unsubscribe": true, + "url": "url" +}'); + +try { + $response = $sg->client->user()->webhooks()->event()->settings()->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve Event Webhook settings # +// GET /user/webhooks/event/settings # + +try { + $response = $sg->client->user()->webhooks()->event()->settings()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Test Event Notification Settings # +// POST /user/webhooks/event/test # + +$request_body = json_decode('{ + "url": "url" +}'); + +try { + $response = $sg->client->user()->webhooks()->event()->test()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Create a parse setting # +// POST /user/webhooks/parse/settings # + +$request_body = json_decode('{ + "hostname": "myhostname.com", + "send_raw": false, + "spam_check": true, + "url": "http://email.myhosthame.com" +}'); + +try { + $response = $sg->client->user()->webhooks()->parse()->settings()->post($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve all parse settings # +// GET /user/webhooks/parse/settings # + +try { + $response = $sg->client->user()->webhooks()->parse()->settings()->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Update a parse setting # +// PATCH /user/webhooks/parse/settings/{hostname} # + +$request_body = json_decode('{ + "send_raw": true, + "spam_check": false, + "url": "http://newdomain.com/parse" +}'); +$hostname = "test_url_param"; + +try { + $response = $sg->client->user()->webhooks()->parse()->settings()->_($hostname)->patch($request_body); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieve a specific parse setting # +// GET /user/webhooks/parse/settings/{hostname} # + +$hostname = "test_url_param"; + +try { + $response = $sg->client->user()->webhooks()->parse()->settings()->_($hostname)->get(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Delete a parse setting # +// DELETE /user/webhooks/parse/settings/{hostname} # + +$hostname = "test_url_param"; + +try { + $response = $sg->client->user()->webhooks()->parse()->settings()->_($hostname)->delete(); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} + +//////////////////////////////////////////////////// +// Retrieves Inbound Parse Webhook statistics. # +// GET /user/webhooks/parse/stats # + +$query_params = json_decode('{"aggregated_by": "day", "limit": "test_string", "start_date": "2016-01-01", "end_date": "2016-04-01", "offset": "test_string"}'); + +try { + $response = $sg->client->user()->webhooks()->parse()->stats()->get(null, $query_params); + print $response->statusCode() . "\n"; + print_r($response->headers()); + print $response->body() . "\n"; +} catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; +} diff --git a/vendor/sendgrid/sendgrid/lib/BaseSendGridClientInterface.php b/vendor/sendgrid/sendgrid/lib/BaseSendGridClientInterface.php new file mode 100644 index 00000000..e72cbda6 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/BaseSendGridClientInterface.php @@ -0,0 +1,90 @@ + "https://api.eu.sendgrid.com", + "global" => "https://api.sendgrid.com", + ]; + + /** + * Set up the HTTP Client. + * + * @param string $auth Authorization header value. + * @param string $host Default host/base URL for the client. + * @param array $options An array of options, currently only "host", "curl", + * "version", "verify_ssl", and "impersonateSubuser", + * are implemented. + */ + public function __construct($auth, $host, $options = array()) + { + $headers = [ + $auth, + 'User-Agent: sendgrid/' . $this->version . ';php', + 'Accept: application/json', + ]; + + $host = isset($options['host']) ? $options['host'] : $host; + + $version = isset($options['version']) ? $options['version'] : '/v3'; + + if (!empty($options['impersonateSubuser'])) { + $headers[] = 'On-Behalf-Of: ' . $options['impersonateSubuser']; + } + + $this->client = new Client($host, $headers, $version); + + $this->client->setCurlOptions(isset($options['curl']) ? $options['curl'] : []); + $this->client->setVerifySSLCerts(isset($options['verify_ssl']) ? $options['verify_ssl'] : true); + } + + /** + * Make an API request. + * + * @param Mail $email A Mail object, containing the request object + * + * @return Response + */ + public function send(Mail $email) + { + return $this->client->mail()->send()->post($email); + } + + /* + * Client libraries contain setters for specifying region/edge. + * This allows support global and eu regions only. This set will likely expand in the future. + * Global should be the default + * Global region means the message should be sent through: + * HTTP: api.sendgrid.com + * EU region means the message should be sent through: + * HTTP: api.eu.sendgrid.com + */ + public function setDataResidency($region): void + { + if (array_key_exists($region, $this->allowedRegionsHostMap)) { + $this->client->setHost($this->allowedRegionsHostMap[$region]); + } else { + throw new InvalidArgumentException("region can only be \"eu\" or \"global\""); + } + } + +} diff --git a/vendor/sendgrid/sendgrid/lib/SendGrid.php b/vendor/sendgrid/sendgrid/lib/SendGrid.php new file mode 100644 index 00000000..1fdaccc5 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/SendGrid.php @@ -0,0 +1,25 @@ +firstName = $firstName; + $this->lastName = $lastName; + $this->email = $email; + } + + /** + * Retrieve the first name of the recipient + * + * @return string + */ + public function getFirstName() + { + return $this->firstName; + } + + /** + * Retrieve the last name of the recipient + * + * @return string + */ + public function getLastName() + { + return $this->lastName; + } + + /** + * Retrieve the email address of the recipient + * + * @return string + */ + public function getEmail() + { + return $this->email; + } + + /** + * Return an array representing a recipient object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'email' => $this->getEmail(), + 'first_name' => $this->getFirstName(), + 'last_name' => $this->getLastName() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/contacts/RecipientForm.php b/vendor/sendgrid/sendgrid/lib/contacts/RecipientForm.php new file mode 100644 index 00000000..b93e814c --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/contacts/RecipientForm.php @@ -0,0 +1,45 @@ + + First Name:
+ Last Name:
+ E-mail:
+ +'; + $this->html = $html; + } + + /** + * Return the HTML form + * + * @return string + */ + public function __toString() + { + return $this->html; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/eventwebhook/EventWebhook.php b/vendor/sendgrid/sendgrid/lib/eventwebhook/EventWebhook.php new file mode 100644 index 00000000..71e6c30d --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/eventwebhook/EventWebhook.php @@ -0,0 +1,46 @@ + $size) { + $message = sprintf( + $message ?: 'Number of elements in "$%s" can not be more than %d.', + $property, + $size + ); + + throw new TypeException($message); + } + } + + /** + * Assert that number of elements in array is more than a given limit. + * + * @param mixed $value + * @param string $property + * @param int $size + * @param string|null $message + * + * @throws TypeException + */ + public static function minItems($value, $property, $size, $message = null) + { + static::isArray($value, $property, $message); + + if (\count($value) < $size) { + $message = sprintf( + $message ?: 'Number of elements in "$%s" can not be less than %d.', + $property, + $size + ); + + throw new TypeException($message); + } + } + + /** + * Assert that a number is smaller as a given limit. + * + * @param mixed $value + * @param string $property + * @param int $limit + * @param string|null $message + * + * @throws TypeException + */ + public static function maxValue($value, $property, $limit, $message = null) + { + static::integer($value, $property, $message); + + $limit = (int) $limit; + + if ($value > $limit) { + $message = sprintf( + $message ?: '"$%s" expected to be at most %d. Got: %s', + $property, + $limit, + $value + ); + + throw new TypeException($message); + } + } + + /** + * Assert that a number is at least as big as a given limit. + * + * @param mixed $value + * @param string $property + * @param int $limit + * @param string|null $message + * + * @throws TypeException + */ + public static function minValue($value, $property, $limit, $message = null) + { + static::integer($value, $property, $message); + + $limit = (int) $limit; + + if ($value < $limit) { + $message = sprintf( + $message ?: '"$%s" expected to be at least %d. Got: %s', + $property, + $limit, + $value + ); + + throw new TypeException($message); + } + } + + /** + * Assert that string value is not longer than a given limit. + * + * @param mixed $value + * @param string $property + * @param int $limit + * @param string|null $message + * + * @throws TypeException + */ + public static function maxLength($value, $property, $limit, $message = null) + { + static::string($value, $property, $message); + + $length = mb_strlen($value, 'utf8'); + + if ($length > $limit) { + $message = sprintf( + $message ?: '"$%s" must have no more than %d characters. Got: %d', + $property, + $limit, + $length + ); + + throw new TypeException($message); + } + } + + /** + * Assert that string value length is greater than a given limit. + * + * @param mixed $value + * @param string $property + * @param int $limit + * @param string|null $message + * + * @throws TypeException + */ + public static function minLength($value, $property, $limit, $message = null) + { + static::string($value, $property, $message); + + $length = mb_strlen($value, 'utf8'); + + if ($length < $limit) { + $message = sprintf( + $message ?: '"$%s" must have at least %d characters. Got: %d', + $property, + $limit, + $length + ); + + throw new TypeException($message); + } + } + + /** + * Assert that value is in array of choices. + * + * @param mixed $value + * @param string $property + * @param array $choices + * @param string|null $message + * + * @throws TypeException + */ + public static function anyOf($value, $property, array $choices, $message = null) + { + if (!\in_array($value, $choices, true)) { + $message = sprintf( + $message ?: '"$%s" must be any of "%s". Got: %s', + $property, + implode(', ', $choices), + $value + ); + + throw new TypeException($message); + } + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Asm.php b/vendor/sendgrid/sendgrid/lib/mail/Asm.php new file mode 100644 index 00000000..9f3b7199 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Asm.php @@ -0,0 +1,143 @@ +setGroupId($group_id); + } + if (isset($groups_to_display)) { + $this->setGroupsToDisplay($groups_to_display); + } + } + + /** + * Add the group id to a Asm object + * + * @param int|GroupId $group_id The unsubscribe group to associate with this + * email + * + * @throws \SendGrid\Mail\TypeException + */ + public function setGroupId($group_id) + { + if ($group_id instanceof GroupId) { + $this->group_id = $group_id->getGroupId(); + } else { + Assert::integer( + $group_id, 'group_id', 'Value "$group_id" must be an instance of SendGrid\Mail\GroupId or an integer.' + ); + + $this->group_id = new GroupId($group_id); + } + } + + /** + * Retrieve the GroupId object from a Asm object + * + * The unsubscribe group to associate with this email + * + * @return int + */ + public function getGroupId() + { + return $this->group_id; + } + + /** + * Add the groups to display id(s) to a Asm object + * + * @param int[]|GroupsToDisplay $groups_to_display A GroupsToDisplay + * object or an array + * containing the + * unsubscribe groups + * that you would like + * to be displayed + * on the unsubscribe + * preferences page. + * + * @throws \SendGrid\Mail\TypeException + */ + public function setGroupsToDisplay($groups_to_display) + { + if ($groups_to_display instanceof GroupsToDisplay) { + $this->groups_to_display = $groups_to_display->getGroupsToDisplay(); + } else { + Assert::isArray( + $groups_to_display, 'groups_to_display', + 'Value "$groups_to_display" must be an instance of SendGrid\Mail\GroupsToDisplay or an array.' + ); + Assert::maxItems($groups_to_display, 'groups_to_display', 25); + + $this->groups_to_display = new GroupsToDisplay($groups_to_display); + } + } + + /** + * Retrieve the groups to display id(s) from a Asm object + * + * @return int[] + */ + public function getGroupsToDisplay() + { + return $this->groups_to_display; + } + + /** + * Return an array representing a Asm object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'group_id' => $this->getGroupId(), + 'groups_to_display' => $this->getGroupsToDisplay() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Attachment.php b/vendor/sendgrid/sendgrid/lib/mail/Attachment.php new file mode 100644 index 00000000..44e56a73 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Attachment.php @@ -0,0 +1,226 @@ +setContent($content); + } + if (isset($type)) { + $this->setType($type); + } + if (isset($filename)) { + $this->setFilename($filename); + } + if (isset($disposition)) { + $this->setDisposition($disposition); + } + if (isset($content_id)) { + $this->setContentID($content_id); + } + } + + /** + * Add the content to a Attachment object + * + * @param string $content Base64 encoded content + * + * @throws \SendGrid\Mail\TypeException + */ + public function setContent($content) + { + Assert::minLength($content, 'content', 1); + + if (!$this->isBase64($content)) { + $this->content = base64_encode($content); + } else { + $this->content = $content; + } + } + + /** + * Retrieve the content from a Attachment object + * + * @return string + */ + public function getContent() + { + return $this->content; + } + + /** + * Add the mime type to a Attachment object + * + * @param string $type Mime type of the attachment + * + * @throws \SendGrid\Mail\TypeException + */ + public function setType($type) + { + Assert::minLength($type, 'type', 1); + + $this->type = $type; + } + + /** + * Retrieve the mime type from a Attachment object + * + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * Add the file name to a Attachment object + * + * @param string $filename File name of the attachment + * + * @throws \SendGrid\Mail\TypeException + */ + public function setFilename($filename) + { + Assert::string($filename, 'filename'); + + $this->filename = $filename; + } + + /** + * Retrieve the file name from a Attachment object + * + * @return string + */ + public function getFilename() + { + return $this->filename; + } + + /** + * Add the disposition to a Attachment object + * + * @param string $disposition How the attachment should be displayed: + * inline or attachment, default is attachment + * + * @throws \SendGrid\Mail\TypeException + */ + public function setDisposition($disposition) + { + Assert::anyOf($disposition, 'disposition', ['inline', 'attachment']); + + $this->disposition = $disposition; + } + + /** + * Retrieve the disposition from a Attachment object + * + * @return string + */ + public function getDisposition() + { + return $this->disposition; + } + + /** + * Add the content id to a Attachment object + * + * @param string $content_id Used when disposition is inline to display + * the file within the body of the email + * @throws \SendGrid\Mail\TypeException + */ + public function setContentID($content_id) + { + Assert::string($content_id, 'content_id'); + + $this->content_id = $content_id; + } + + /** + * Retrieve the content id from a Attachment object + * + * @return string + */ + public function getContentID() + { + return $this->content_id; + } + + /** + * Verifies whether or not the provided string is a valid base64 string + * + * @param $string string The string that has to be checked + * @return bool + */ + private function isBase64($string) + { + $decoded_data = base64_decode($string, true); + $encoded_data = base64_encode($decoded_data); + if ($encoded_data != $string) { + return false; + } + return true; + } + + /** + * Return an array representing a Attachment object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'content' => $this->getContent(), + 'type' => $this->getType(), + 'filename' => $this->getFilename(), + 'disposition' => $this->getDisposition(), + 'content_id' => $this->getContentID() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/BatchId.php b/vendor/sendgrid/sendgrid/lib/mail/BatchId.php new file mode 100644 index 00000000..9d59c2b6 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/BatchId.php @@ -0,0 +1,69 @@ +setBatchId($batch_id); + } + } + + /** + * Add the batch id to a BatchId object + * + * @param string $batch_id This ID represents a batch of emails to be sent + * at the same time + * + * @throws \SendGrid\Mail\TypeException + */ + public function setBatchId($batch_id) + { + Assert::string($batch_id, 'batch_id'); + + $this->batch_id = $batch_id; + } + + /** + * Return the batch id from a BatchId object + * + * @return string + */ + public function getBatchId() + { + return $this->batch_id; + } + + /** + * Return an array representing a BatchId object for the Twilio SendGrid API + * + * @return null|string + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getBatchId(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Bcc.php b/vendor/sendgrid/sendgrid/lib/mail/Bcc.php new file mode 100644 index 00000000..fa764b10 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Bcc.php @@ -0,0 +1,15 @@ +setEnable($enable); + } + if (isset($email)) { + $this->setEmail($email); + } + } + + /** + * Update the enable setting on a BccSettings object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a BccSettings object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Add the email setting on a BccSettings object + * + * @param string $email The email address that you would like + * to receive the BCC + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEmail($email) + { + Assert::email($email, 'email'); + + $this->email = $email; + } + + /** + * Retrieve the email setting on a BccSettings object + * + * @return string + */ + public function getEmail() + { + return $this->email; + } + + /** + * Return an array representing a BccSettings object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'email' => $this->getEmail() + ], + static function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/BypassBounceManagement.php b/vendor/sendgrid/sendgrid/lib/mail/BypassBounceManagement.php new file mode 100644 index 00000000..dc393d96 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/BypassBounceManagement.php @@ -0,0 +1,82 @@ +setEnable($enable); + } + } + + /** + * Update the enable setting on a BypassBounceManagement object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a BypassBounceManagement object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Return an array representing a BypassBounceManagement object for + * the SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/BypassListManagement.php b/vendor/sendgrid/sendgrid/lib/mail/BypassListManagement.php new file mode 100644 index 00000000..5b88e7a1 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/BypassListManagement.php @@ -0,0 +1,81 @@ +setEnable($enable); + } + } + + /** + * Update the enable setting on a BypassListManagement object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a BypassListManagement object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Return an array representing a BypassListManagement object for + * the SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/BypassSpamManagement.php b/vendor/sendgrid/sendgrid/lib/mail/BypassSpamManagement.php new file mode 100644 index 00000000..d4c74709 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/BypassSpamManagement.php @@ -0,0 +1,82 @@ +setEnable($enable); + } + } + + /** + * Update the enable setting on a BypassSpamManagement object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a BypassSpamManagement object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Return an array representing a BypassSpamManagement object for + * the SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/BypassUnsubscribeManagement.php b/vendor/sendgrid/sendgrid/lib/mail/BypassUnsubscribeManagement.php new file mode 100644 index 00000000..fb03d5f0 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/BypassUnsubscribeManagement.php @@ -0,0 +1,83 @@ +setEnable($enable); + } + } + + /** + * Update the enable setting on a BypassUnsubscribeManagement object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a BypassUnsubscribeManagement object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Return an array representing a BypassUnsubscribeManagement object for + * the SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Category.php b/vendor/sendgrid/sendgrid/lib/mail/Category.php new file mode 100644 index 00000000..d04643f5 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Category.php @@ -0,0 +1,71 @@ +setCategory($category); + } + } + + /** + * Add a category to a Category object + * + * @param string $category A category name for an email message. + * Each category name may not exceed 255 + * characters + * + * @throws \SendGrid\Mail\TypeException + */ + public function setCategory($category) + { + Assert::maxLength($category, 'category', 255); + + $this->category = $category; + } + + /** + * Retrieve a category from a Category object + * + * @return string + */ + public function getCategory() + { + return $this->category; + } + + /** + * Return an array representing a Category object for the Twilio SendGrid API + * + * @return string + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getCategory(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Cc.php b/vendor/sendgrid/sendgrid/lib/mail/Cc.php new file mode 100644 index 00000000..28fcd3e7 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Cc.php @@ -0,0 +1,15 @@ +setEnable($enable); + } + if (isset($enable_text)) { + $this->setEnableText($enable_text); + } + } + + /** + * Update the enable setting on a ClickTracking object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a ClickTracking object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Update the enable text setting on a ClickTracking object + * + * @param bool $enable_text Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnableText($enable_text) + { + Assert::boolean($enable_text, 'enable_text'); + + $this->enable_text = $enable_text; + } + + /** + * Retrieve the enable_text setting on a ClickTracking object + * + * @return bool + */ + public function getEnableText() + { + return $this->enable_text; + } + + /** + * Return an array representing a ClickTracking object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'enable_text' => $this->getEnableText() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Content.php b/vendor/sendgrid/sendgrid/lib/mail/Content.php new file mode 100644 index 00000000..70ca2611 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Content.php @@ -0,0 +1,119 @@ +setType($type); + } + if (isset($value)) { + $this->setValue($value); + } + } + + /** + * Add the mime type on a Content object + * + * @param string $type The mime type of the content you are including + * in your email. For example, “text/plain” or + * “text/html” + * + * @throws TypeException + */ + public function setType($type) + { + Assert::string($type, 'type'); + + $this->type = $type; + } + + /** + * Retrieve the mime type on a Content object + * + * @return string|null + */ + public function getType() + { + return $this->type; + } + + /** + * Add the content value to a Content object + * + * @param string $value The actual content of the specified mime type + * that you are including in your email + * + * @throws TypeException + */ + public function setValue($value) + { + Assert::minLength($value, 'value', 1); + + $this->value = mb_convert_encoding((string)$value, 'UTF-8', 'UTF-8'); + } + + /** + * Retrieve the content value to a Content object + * + * @return string|null + */ + public function getValue() + { + return $this->value; + } + + /** + * Return an array representing a Contact object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'type' => $this->getType(), + 'value' => $this->getValue() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/CustomArg.php b/vendor/sendgrid/sendgrid/lib/mail/CustomArg.php new file mode 100644 index 00000000..28476f86 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/CustomArg.php @@ -0,0 +1,112 @@ +setKey($key); + } + if (isset($value)) { + $this->setValue($value); + } + } + + /** + * Add a custom arg key on a CustomArg object + * + * @param string $key Custom arg key + * + * @throws \SendGrid\Mail\TypeException + */ + public function setKey($key) + { + Assert::string($key, 'key'); + + $this->key = $key; + } + + /** + * Retrieve a custom arg key on a CustomArg object + * + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * Add a custom arg value on a CustomArg object + * + * @param string $value Custom arg value + * + * @throws \SendGrid\Mail\TypeException + */ + public function setValue($value) + { + Assert::string($value, 'value'); + + $this->value = $value; + } + + /** + * Retrieve a custom arg key on a CustomArg object + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Return an array representing a CustomArg object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'key' => $this->getKey(), + 'value' => $this->getValue() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/EmailAddress.php b/vendor/sendgrid/sendgrid/lib/mail/EmailAddress.php new file mode 100644 index 00000000..dc7934e9 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/EmailAddress.php @@ -0,0 +1,196 @@ +setEmailAddress($emailAddress); + } + if (isset($name) && $name !== null) { + $this->setName($name); + } + if (isset($substitutions)) { + $this->setSubstitutions($substitutions); + } + if (isset($subject)) { + $this->setSubject($subject); + } + } + + /** + * Add the email address to a EmailAddress object + * + * @param string $emailAddress The email address + * + * @throws TypeException + */ + public function setEmailAddress($emailAddress) + { + Assert::email($emailAddress, 'emailAddress'); + + $this->email = $emailAddress; + } + + /** + * Retrieve the email address from a EmailAddress object + * + * @return string + */ + public function getEmailAddress() + { + return $this->email; + } + + /** + * Retrieve the email address from a EmailAddress object + * + * @return string + */ + public function getEmail() + { + return $this->getEmailAddress(); + } + + /** + * Add a name to a EmailAddress object + * + * @param string $name The name of the person associated with the email + * + * @throws TypeException + */ + public function setName($name) + { + Assert::string($name, 'name'); + + $this->name = (!empty($name)) ? $name : null; + } + + /** + * Retrieve the name from a EmailAddress object + * + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Add substitutions to a EmailAddress object + * + * @param array $substitutions An array of key/value substitutions to + * be be applied to the text and html content + * of the email body + * + * @throws TypeException + */ + public function setSubstitutions($substitutions) + { + Assert::maxItems($substitutions, 'substitutions', 10000); + + $this->substitutions = $substitutions; + } + + /** + * Retrieve substitutions from a EmailAddress object + */ + public function getSubstitutions() + { + return $this->substitutions; + } + + /** + * Add a subject to a EmailAddress object + * + * @param string $subject The personalized subject of the email + * + * @throws TypeException + */ + public function setSubject($subject) + { + Assert::string($subject, 'subject'); + + // Now that we know it is a string, we can safely create a new subject + $this->subject = new Subject($subject); + } + + /** + * Retrieve a subject from an EmailAddress object + * + * @return Subject + */ + public function getSubject() + { + return $this->subject; + } + + /** + * Determine if this EmailAddress object is personalized by either + * containing substitutions or a specific subject. + * + * @return bool + */ + public function isPersonalized() + { + return $this->getSubstitutions() || $this->getSubject(); + } + + /** + * Return an array representing an EmailAddress object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'name' => $this->getName(), + 'email' => $this->getEmail() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Footer.php b/vendor/sendgrid/sendgrid/lib/mail/Footer.php new file mode 100644 index 00000000..77f025cc --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Footer.php @@ -0,0 +1,136 @@ +setEnable($enable); + } + if (isset($text)) { + $this->setText($text); + } + if (isset($html)) { + $this->setHtml($html); + } + } + + /** + * Update the enable setting on a Footer object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a Footer object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Add text to a Footer object + * + * @param string $text The plain text content of your footer + * + * @throws \SendGrid\Mail\TypeException + */ + public function setText($text) + { + Assert::string($text, 'text'); + + $this->text = $text; + } + + /** + * Retrieve text to a Footer object + * + * @return string + */ + public function getText() + { + return $this->text; + } + + /** + * Add html to a Footer object + * + * @param string $html The HTML content of your footer + * + * @throws \SendGrid\Mail\TypeException + */ + public function setHtml($html) + { + Assert::string($html, 'html'); + + $this->html = $html; + } + + /** + * Retrieve html from a Footer object + * + * @return string + */ + public function getHtml() + { + return $this->html; + } + + /** + * Return an array representing a Footer object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'text' => $this->getText(), + 'html' => $this->getHtml() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/From.php b/vendor/sendgrid/sendgrid/lib/mail/From.php new file mode 100644 index 00000000..00d67b62 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/From.php @@ -0,0 +1,15 @@ +setEnable($enable); + } + if (isset($utm_source)) { + $this->setCampaignSource($utm_source); + } + if (isset($utm_medium)) { + $this->setCampaignMedium($utm_medium); + } + if (isset($utm_term)) { + $this->setCampaignTerm($utm_term); + } + if (isset($utm_content)) { + $this->setCampaignContent($utm_content); + } + if (isset($utm_campaign)) { + $this->setCampaignName($utm_campaign); + } + } + + /** + * Update the enable setting on a Ganalytics object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a Ganalytics object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Add the campaign source to a Ganalytics object + * + * @param string $utm_source Name of the referrer source. (e.g. + * Google, SomeDomain.com, or Marketing Email) + * + * @throws \SendGrid\Mail\TypeException + */ + public function setCampaignSource($utm_source) + { + Assert::string($utm_source, 'utm_source'); + + $this->utm_source = $utm_source; + } + + /** + * Return the campaign source from a Ganalytics object + * + * @return string + */ + public function getCampaignSource() + { + return $this->utm_source; + } + + /** + * Add the campaign medium to a Ganalytics object + * + * @param string $utm_medium Name of the marketing medium. (e.g. Email) + * + * @throws \SendGrid\Mail\TypeException + */ + public function setCampaignMedium($utm_medium) + { + Assert::string($utm_medium, 'utm_medium'); + + $this->utm_medium = $utm_medium; + } + + /** + * Return the campaign medium from a Ganalytics object + * + * @return string + */ + public function getCampaignMedium() + { + return $this->utm_medium; + } + + /** + * Add the campaign term to a Ganalytics object + * + * @param string $utm_term Used to identify any paid keywords + * + * @throws \SendGrid\Mail\TypeException + */ + public function setCampaignTerm($utm_term) + { + Assert::string($utm_term, 'utm_term'); + + $this->utm_term = $utm_term; + } + + /** + * Return the campaign term from a Ganalytics object + * + * @return string + */ + public function getCampaignTerm() + { + return $this->utm_term; + } + + /** + * Add the campaign content to a Ganalytics object + * + * @param string $utm_content Used to differentiate your campaign from + * advertisements + * + * @throws \SendGrid\Mail\TypeException + */ + public function setCampaignContent($utm_content) + { + Assert::string($utm_content, 'utm_content'); + + $this->utm_content = $utm_content; + } + + /** + * Return the campaign content from a Ganalytics object + * + * @return string + */ + public function getCampaignContent() + { + return $this->utm_content; + } + + /** + * Add the campaign name to a Ganalytics object + * + * @param string $utm_campaign The name of the campaign + * + * @throws \SendGrid\Mail\TypeException + */ + public function setCampaignName($utm_campaign) + { + Assert::string($utm_campaign, 'utm_campaign'); + + $this->utm_campaign = $utm_campaign; + } + + /** + * Return the campaign name from a Ganalytics object + * + * @return string + */ + public function getCampaignName() + { + return $this->utm_campaign; + } + + /** + * Return an array representing a Ganalytics object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'utm_source' => $this->getCampaignSource(), + 'utm_medium' => $this->getCampaignMedium(), + 'utm_term' => $this->getCampaignTerm(), + 'utm_content' => $this->getCampaignContent(), + 'utm_campaign' => $this->getCampaignName() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/GroupId.php b/vendor/sendgrid/sendgrid/lib/mail/GroupId.php new file mode 100644 index 00000000..9c173a5b --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/GroupId.php @@ -0,0 +1,67 @@ +setGroupId($group_id); + } + } + + /** + * Add the group id to a GroupId object + * + * @param int $group_id The unsubscribe group to associate with this email + * + * @throws \SendGrid\Mail\TypeException + */ + public function setGroupId($group_id) + { + Assert::integer($group_id, 'group_id'); + + $this->group_id = $group_id; + } + + /** + * Retrieve the group id from a GroupId object + * + * @return int + */ + public function getGroupId() + { + return $this->group_id; + } + + /** + * Return an array representing a GroupId object for the Twilio SendGrid API + * + * @return int + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getGroupId(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/GroupsToDisplay.php b/vendor/sendgrid/sendgrid/lib/mail/GroupsToDisplay.php new file mode 100644 index 00000000..c3768839 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/GroupsToDisplay.php @@ -0,0 +1,103 @@ +setGroupsToDisplay($groups_to_display); + } + } + + /** + * Set groups list to display on a GroupsToDisplay object + * + * @param int[] $groups_to_display The unsubscribe group(s) + * that you would like to be + * displayed on the unsubscribe + * preferences page + * + * @throws \SendGrid\Mail\TypeException + */ + public function setGroupsToDisplay($groups_to_display) + { + Assert::maxItems($groups_to_display, 'groups_to_display', 25); + + $this->groups_to_display = $groups_to_display; + } + + /** + * Add group to display on a GroupsToDisplay object + * + * @param int $group_to_display The unsubscribe group + * that you would like to be + * displayed on the unsubscribe + * preferences page + * + * @throws TypeException + */ + public function addGroupToDisplay($group_to_display) + { + Assert::integer($group_to_display, 'group_to_display'); + Assert::accept($group_to_display, 'group_to_display', function () { + $groups = $this->groups_to_display; + if (!\is_array($groups)) { + $groups = []; + } + return \count($groups) < 25; + }, 'Number of elements in "$groups_to_display" can not be more than 25.'); + + $this->groups_to_display[] = $group_to_display; + } + + /** + * Return the group(s) to display on a GroupsToDisplay object + * + * @return int[] + */ + public function getGroupsToDisplay() + { + return $this->groups_to_display; + } + + /** + * Return an array representing a GroupsToDisplay object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getGroupsToDisplay(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Header.php b/vendor/sendgrid/sendgrid/lib/mail/Header.php new file mode 100644 index 00000000..3f63abaa --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Header.php @@ -0,0 +1,109 @@ +setKey($key); + } + if (isset($value)) { + $this->setValue($value); + } + } + + /** + * Add the key on a Header object + * + * @param string $key Header key + * + * @throws \SendGrid\Mail\TypeException + */ + public function setKey($key) + { + Assert::string($key, 'key'); + + $this->key = $key; + } + + /** + * Retrieve the key from a Header object + * + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * Add the value on a Header object + * + * @param string $value Header value + * + * @throws \SendGrid\Mail\TypeException + */ + public function setValue($value) + { + Assert::string($value, 'value'); + + $this->value = $value; + } + + /** + * Retrieve the value from a Header object + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Return an array representing a Header object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'key' => $this->getKey(), + 'value' => $this->getValue() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/HtmlContent.php b/vendor/sendgrid/sendgrid/lib/mail/HtmlContent.php new file mode 100644 index 00000000..1aff8aea --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/HtmlContent.php @@ -0,0 +1,26 @@ +setIpPoolName($ip_pool_name); + } + } + + /** + * Set the ip pool name on a IpPoolName object + * + * @param string $ip_pool_name The IP Pool that you would like to + * send this email from. Minimum length: + * 2, Maximum Length: 64 + * + * @throws \SendGrid\Mail\TypeException + */ + public function setIpPoolName($ip_pool_name) + { + Assert::minLength($ip_pool_name, 'ip_pool_name', 2); + Assert::maxLength($ip_pool_name, 'ip_pool_name', 64); + + $this->ip_pool_name = $ip_pool_name; + } + + /** + * Retrieve the ip pool name from a IpPoolName object + * + * @return string + */ + public function getIpPoolName() + { + return $this->ip_pool_name; + } + + /** + * Return an array representing a IpPoolName object for the Twilio SendGrid API + * + * @return string + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getIpPoolName(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Mail.php b/vendor/sendgrid/sendgrid/lib/mail/Mail.php new file mode 100644 index 00000000..c8511852 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Mail.php @@ -0,0 +1,1994 @@ +personalization[] = new Personalization(); + return; + } + if (isset($from)) { + $this->setFrom($from); + } + if (isset($to)) { + if (!\is_array($to)) { + $to = [$to]; + } + $subjectCount = 0; + foreach ($to as $email) { + if (\is_array($subject) || $email->isPersonalized()) { + $personalization = new Personalization(); + $this->addTo($email, null, null, null, $personalization); + } else { + $this->addTo($email); + $personalization = \end($this->personalization); + } + + if (\is_array($subject) && $subjectCount < \count($subject)) { + $personalization->setSubject($subject[$subjectCount]); + $subjectCount++; + } + + if (\is_array($globalSubstitutions)) { + foreach ($globalSubstitutions as $key => $value) { + if ($value instanceof Substitution) { + $personalization->addSubstitution($value); + } else { + $personalization->addSubstitution($key, $value); + } + } + } + } + } + if (isset($subject) && !\is_array($subject)) { + $this->setSubject($subject); + } + if (isset($plainTextContent)) { + Assert::isInstanceOf($plainTextContent, 'plainTextContent', Content::class); + + $this->addContent($plainTextContent); + } + if (isset($htmlContent)) { + Assert::isInstanceOf($htmlContent, 'htmlContent', Content::class); + + $this->addContent($htmlContent); + } + } + + /** + * Adds a To, Cc or Bcc object to a Personalization object + * + * @param string $emailType Object type name: To, Cc or Bcc + * @param string $email Recipient email address + * @param string|null $name Recipient name + * @param Substitution[]|array|null $substitutions Personalized + * substitutions + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + private function addRecipientEmail( + $emailType, + $email, + $name = null, + $substitutions = null, + $personalizationIndex = null, + $personalization = null + ) { + $personalizationFunctionCall = 'add' . $emailType; + $emailTypeClass = '\SendGrid\Mail\\' . $emailType; + if (!($email instanceof $emailTypeClass)) { + $email = new $emailTypeClass( + $email, + $name, + $substitutions + ); + } + + if ($personalizationIndex === null && $personalization === null + && $emailType === 'To' && $email->isPersonalized()) { + $personalization = new Personalization(); + } + + $personalization = $this->getPersonalization($personalizationIndex, $personalization); + $personalization->$personalizationFunctionCall($email); + + if ($subs = $email->getSubstitutions()) { + foreach ($subs as $key => $value) { + $personalization->addSubstitution($key, $value); + } + } + + if ($email->getSubject()) { + $personalization->setSubject($email->getSubject()); + } + } + + /** + * Adds an array of To, Cc or Bcc objects to a Personalization object + * + * @param string $emailType Object type name: To, Cc or Bcc + * @param To[]|Cc[]|Bcc[] $emails Array of email recipients + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + private function addRecipientEmails( + $emailType, + $emails, + $personalizationIndex = null, + $personalization = null + ) { + $emailFunctionCall = 'add' . $emailType; + + if (\current($emails) instanceof EmailAddress) { + foreach ($emails as $email) { + $this->$emailFunctionCall( + $email, + $name = null, + $substitutions = null, + $personalizationIndex, + $personalization + ); + } + } else { + foreach ($emails as $email => $name) { + $this->$emailFunctionCall( + $email, + $name, + $substitutions = null, + $personalizationIndex, + $personalization + ); + } + } + } + + /** + * Add a Personalization object to the Mail object + * + * @param Personalization $personalization A Personalization object + * + * @throws TypeException + */ + public function addPersonalization($personalization) + { + Assert::isInstanceOf($personalization, 'personalization', Personalization::class); + + $this->personalization[] = $personalization; + } + + /** + * Retrieves a Personalization object, adds a pre-created Personalization + * object, or creates and adds a Personalization object. + * + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @return Personalization + * + * @throws TypeException + */ + public function getPersonalization($personalizationIndex = null, $personalization = null) + { + /** + * Approach: + * - Append if provided personalization + return + * - Return last added if not provided personalizationIndex (create on empty) + * - Return existing personalizationIndex + * - InvalidArgumentException on unexpected personalizationIndex ( > count) + * - Create + add Personalization and return + */ + + // If given a Personalization instance + if (null !== $personalization) { + // Just append it onto Mail and return it + $this->addPersonalization($personalization); + return $personalization; + } + + // Retrieve count of existing Personalization instances + $personalizationCount = $this->getPersonalizationCount(); + + // Not providing a personalizationIndex? + if (null === $personalizationIndex) { + // Create new Personalization instance depending on current count + if (0 === $personalizationCount) { + $this->addPersonalization(new Personalization()); + } + + // Return last added Personalization instance + return end($this->personalization); + } + + // Existing personalizationIndex in personalization? + if (isset($this->personalization[$personalizationIndex])) { + // Return referred personalization + return $this->personalization[$personalizationIndex]; + } + + // Non-existent personalizationIndex given + // Only allow creation of next Personalization if given + // personalizationIndex equals personalizationCount + if ( + ($personalizationIndex < 0) || + ($personalizationIndex > $personalizationCount) + ) { + throw new InvalidArgumentException( + 'personalizationIndex ' . $personalizationIndex . + ' must be less than ' . $personalizationCount + ); + } + + // Create new Personalization and return it + $personalization = new Personalization(); + $this->addPersonalization($personalization); + return $personalization; + } + + /** + * Retrieves Personalization object collection from the Mail object. + * + * @return Personalization[]|null + */ + public function getPersonalizations() + { + return $this->personalization; + } + + /** + * Retrieve the number of Personalization objects associated with the Mail object + * + * @return int + */ + public function getPersonalizationCount() + { + return isset($this->personalization) ? \count($this->personalization) : 0; + } + + /** + * Adds an email recipient to a Personalization object + * + * @param string|To $to Email address or To object + * @param string $name Recipient name + * @param array|Substitution[] $substitutions Personalized substitutions + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + public function addTo( + $to, + $name = null, + $substitutions = null, + $personalizationIndex = null, + $personalization = null + ) { + $this->addRecipientEmail( + 'To', + $to, + $name, + $substitutions, + $personalizationIndex, + $personalization + ); + } + + /** + * Adds multiple email recipients to a Personalization object + * + * @param To[]|array $toEmails Array of To objects or key/value pairs of + * email address/recipient names + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + public function addTos( + $toEmails, + $personalizationIndex = null, + $personalization = null + ) { + Assert::minItems($toEmails, 'toEmails', 1); + Assert::maxItems($toEmails, 'toEmails', 1000); + + $this->addRecipientEmails( + 'To', + $toEmails, + $personalizationIndex, + $personalization + ); + } + + /** + * Adds an email cc recipient to a Personalization object + * + * @param string|Cc $cc Email address or Cc object + * @param string $name Recipient name + * @param Substitution[]|array|null $substitutions Personalized + * substitutions + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + public function addCc( + $cc, + $name = null, + $substitutions = null, + $personalizationIndex = null, + $personalization = null + ) { + $this->addRecipientEmail( + 'Cc', + $cc, + $name, + $substitutions, + $personalizationIndex, + $personalization + ); + } + + /** + * Adds multiple email cc recipients to a Personalization object + * + * @param Cc[]|array $ccEmails Array of Cc objects or key/value pairs of + * email address/recipient names + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + public function addCcs( + $ccEmails, + $personalizationIndex = null, + $personalization = null + ) { + Assert::minItems($ccEmails, 'ccEmails', 1); + Assert::maxItems($ccEmails, 'ccEmails', 1000); + + $this->addRecipientEmails( + 'Cc', + $ccEmails, + $personalizationIndex, + $personalization + ); + } + + /** + * Adds an email bcc recipient to a Personalization object + * + * @param string|Bcc $bcc Email address or Bcc object + * @param string $name Recipient name + * @param Substitution[]|array|null $substitutions Personalized + * substitutions + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + public function addBcc( + $bcc, + $name = null, + $substitutions = null, + $personalizationIndex = null, + $personalization = null + ) { + $this->addRecipientEmail( + 'Bcc', + $bcc, + $name, + $substitutions, + $personalizationIndex, + $personalization + ); + } + + /** + * Adds multiple email bcc recipients to a Personalization object + * + * @param Bcc[]|array $bccEmails Array of Bcc objects or key/value pairs of + * email address/recipient names + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * + * @throws TypeException + */ + public function addBccs( + $bccEmails, + $personalizationIndex = null, + $personalization = null + ) { + Assert::minItems($bccEmails, 'bccEmails', 1); + Assert::maxItems($bccEmails, 'bccEmails', 1000); + + $this->addRecipientEmails( + 'Bcc', + $bccEmails, + $personalizationIndex, + $personalization + ); + } + + /** + * Add a subject to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * subject will be global to entire message. Note that + * subjects added to Personalization objects override + * global subjects. + * + * @param string|Subject $subject Email subject + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function setSubject( + $subject, + $personalizationIndex = null, + $personalization = null + ) { + if (!($subject instanceof Subject)) { + $subject = new Subject($subject); + } + + if ($personalization !== null) { + $personalization->setSubject($subject); + $this->addPersonalization($personalization); + return; + } + if ($personalizationIndex !== null) { + $this->personalization[$personalizationIndex]->setSubject($subject); + return; + } + $this->setGlobalSubject($subject); + } + + /** + * Retrieve a subject attached to a Personalization object + * + * @param int $personalizationIndex Index into the array of existing + * Personalization objects + * @return Subject + */ + public function getSubject($personalizationIndex = 0) + { + return $this->personalization[$personalizationIndex]->getSubject(); + } + + /** + * Add a header to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * header will be global to entire message. Note that + * headers added to Personalization objects override + * global headers. + * + * @param string|Header $key Key or Header object + * @param string|null $value Value + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addHeader( + $key, + $value = null, + $personalizationIndex = null, + $personalization = null + ) { + $header = null; + if ($key instanceof Header) { + $h = $key; + $header = new Header($h->getKey(), $h->getValue()); + } else { + $header = new Header($key, $value); + } + + $personalization = $this->getPersonalization($personalizationIndex, $personalization); + $personalization->addHeader($header); + } + + /** + * Adds multiple headers to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * header will be global to entire message. Note that + * headers added to Personalization objects override + * global headers. + * + * @param array|Header[] $headers Array of Header objects or key values + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addHeaders( + $headers, + $personalizationIndex = null, + $personalization = null + ) { + if (\current($headers) instanceof Header) { + foreach ($headers as $header) { + $this->addHeader($header); + } + } else { + foreach ($headers as $key => $value) { + $this->addHeader( + $key, + $value, + $personalizationIndex, + $personalization + ); + } + } + } + + /** + * Retrieve the headers attached to a Personalization object + * + * @param int $personalizationIndex Index into the array of existing + * Personalization objects + * @return Header[] + */ + public function getHeaders($personalizationIndex = 0) + { + return $this->personalization[$personalizationIndex]->getHeaders(); + } + + /** + * Add a Substitution object or key/value to a Personalization object + * + * @param Substitution|string $key Substitution object or the key of a + * dynamic data + * @param string|null $value Value + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addDynamicTemplateData( + $key, + $value = null, + $personalizationIndex = null, + $personalization = null + ) { + $this->addSubstitution($key, $value, $personalizationIndex, $personalization); + } + + /** + * Add a Substitution object or key/value to a Personalization object + * + * @param array|Substitution[] $datas Array of Substitution + * objects or key/values + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addDynamicTemplateDatas( + $datas, + $personalizationIndex = null, + $personalization = null + ) { + $this->addSubstitutions($datas, $personalizationIndex, $personalization); + } + + /** + * Retrieve dynamic template data key/value pairs from a Personalization object + * + * @param int|0 $personalizationIndex Index into the array of existing + * Personalization objects + * @return array + */ + public function getDynamicTemplateDatas($personalizationIndex = 0) + { + return $this->getSubstitutions($personalizationIndex); + } + + /** + * Add a substitution to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * substitution will be global to entire message. Note that + * substitutions added to Personalization objects override + * global substitutions. + * + * @param string|Substitution $key Key or Substitution object + * @param string|null $value Value + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addSubstitution( + $key, + $value = null, + $personalizationIndex = null, + $personalization = null + ) { + $substitution = null; + if ($key instanceof Substitution) { + $s = $key; + $substitution = new Substitution($s->getKey(), $s->getValue()); + } else { + $substitution = new Substitution($key, $value); + } + + $personalization = $this->getPersonalization($personalizationIndex, $personalization); + $personalization->addSubstitution($substitution); + } + + /** + * Adds multiple substitutions to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * substitution will be global to entire message. Note that + * substitutions added to Personalization objects override + * global headers. + * + * @param array|Substitution[] $substitutions Array of Substitution + * objects or key/values + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addSubstitutions( + $substitutions, + $personalizationIndex = null, + $personalization = null + ) { + if (\current($substitutions) instanceof Substitution) { + foreach ($substitutions as $substitution) { + $this->addSubstitution($substitution); + } + } else { + foreach ($substitutions as $key => $value) { + $this->addSubstitution( + $key, + $value, + $personalizationIndex, + $personalization + ); + } + } + } + + /** + * Retrieve the substitutions attached to a Personalization object + * + * @param int|0 $personalizationIndex Index into the array of existing + * Personalization objects + * @return Substitution[] + */ + public function getSubstitutions($personalizationIndex = 0) + { + return $this->personalization[$personalizationIndex]->getSubstitutions(); + } + + /** + * Add a custom arg to a Personalization or Mail object + * + * Note that custom args added to Personalization objects + * override global custom args. + * + * @param string|CustomArg $key Key or CustomArg object + * @param string|null $value Value + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addCustomArg( + $key, + $value = null, + $personalizationIndex = null, + $personalization = null + ) { + $custom_arg = null; + if ($key instanceof CustomArg) { + $ca = $key; + $custom_arg = new CustomArg($ca->getKey(), $ca->getValue()); + } else { + $custom_arg = new CustomArg($key, $value); + } + + $personalization = $this->getPersonalization($personalizationIndex, $personalization); + $personalization->addCustomArg($custom_arg); + } + + /** + * Adds multiple custom args to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * custom arg will be global to entire message. Note that + * custom args added to Personalization objects override + * global custom args. + * + * @param array|CustomArg[] $custom_args Array of CustomArg objects or + * key/values + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function addCustomArgs( + $custom_args, + $personalizationIndex = null, + $personalization = null + ) { + if (\current($custom_args) instanceof CustomArg) { + foreach ($custom_args as $custom_arg) { + $this->addCustomArg($custom_arg); + } + } else { + foreach ($custom_args as $key => $value) { + $this->addCustomArg( + $key, + $value, + $personalizationIndex, + $personalization + ); + } + } + } + + /** + * Retrieve the custom args attached to a Personalization object + * + * @param int|0 $personalizationIndex Index into the array of existing + * Personalization objects + * @return CustomArg[] + */ + public function getCustomArgs($personalizationIndex = 0) + { + return $this->personalization[$personalizationIndex]->getCustomArgs(); + } + + /** + * Add a unix timestamp allowing you to specify when you want your + * email to be delivered to a Personalization or Mail object + * + * If you don't provide a Personalization object or index, the + * send at timestamp will be global to entire message. Note that + * timestamps added to Personalization objects override + * global timestamps. + * + * @param int|SendAt $send_at A unix timestamp + * @param int|null $personalizationIndex Index into the array of existing + * Personalization objects + * @param Personalization|null $personalization A pre-created + * Personalization object + * @throws TypeException + */ + public function setSendAt( + $send_at, + $personalizationIndex = null, + $personalization = null + ) { + if (!($send_at instanceof SendAt)) { + $send_at = new SendAt($send_at); + } + + $personalization = $this->getPersonalization($personalizationIndex, $personalization); + $personalization->setSendAt($send_at); + } + + /** + * Retrieve the unix timestamp attached to a Personalization object + * + * @param int|0 $personalizationIndex Index into the array of existing + * Personalization objects + * @return SendAt|null + */ + public function getSendAt($personalizationIndex = 0) + { + return $this->personalization[$personalizationIndex]->getSendAt(); + } + + /** + * Add the sender email address to a Mail object + * + * @param string|From $email Email address or From object + * @param string|null $name Sender name + * + * @throws TypeException + */ + public function setFrom($email, $name = null) + { + if ($email instanceof From) { + $this->from = $email; + } else { + Assert::email( + $email, + 'email', + '"$email" must be an instance of SendGrid\Mail\From or a valid email address' + ); + $this->from = new From($email, $name); + } + } + + /** + * Retrieve the sender attached to a Mail object + * + * @return From + */ + public function getFrom() + { + return $this->from; + } + + /** + * Add the reply to email address to a Mail object + * + * @param string|ReplyTo $email Email address or From object + * @param string|null $name Reply to name + * + * @throws TypeException + */ + public function setReplyTo($email, $name = null) + { + if ($email instanceof ReplyTo) { + $this->reply_to = $email; + } else { + $this->reply_to = new ReplyTo($email, $name); + } + } + + /** + * Retrieve the reply to information attached to a Mail object + * + * @return ReplyTo + */ + public function getReplyTo() + { + return $this->reply_to; + } + + /** + * Add a subject to a Mail object + * + * Note that + * subjects added to Personalization objects override + * global subjects. + * + * @param string|Subject $subject Email subject + * + * @throws TypeException + */ + public function setGlobalSubject($subject) + { + if (!($subject instanceof Subject)) { + $subject = new Subject($subject); + } + $this->subject = $subject; + } + + /** + * Retrieve a subject attached to a Mail object + * + * @return Subject + */ + public function getGlobalSubject() + { + return $this->subject; + } + + /** + * Add content to a Mail object + * + * For a list of pre-configured mime types, please see + * MimeType.php + * + * @param string|Content $type Mime type or Content object + * @param string|null $value Contents (e.g. text or html) + * + * @throws TypeException + */ + public function addContent($type, $value = null) + { + if ($type instanceof Content) { + $content = $type; + } else { + $content = new Content($type, $value); + } + $this->contents[] = $content; + } + + /** + * Adds multiple Content objects to a Mail object + * + * @param array|Content[] $contents Array of Content objects + * or key value pairs + * + * @throws TypeException + */ + public function addContents($contents) + { + if (\current($contents) instanceof Content) { + foreach ($contents as $content) { + $this->addContent($content); + } + } else { + foreach ($contents as $key => $value) { + $this->addContent($key, $value); + } + } + } + + /** + * Retrieve the contents attached to a Mail object + * + * Will return array of Content Objects with text/plain MimeType first + * Array re-ordered before return where this is not already the case + * + * @return Content[] + */ + public function getContents() + { + if ($this->contents) { + if ($this->contents[0]->getType() !== MimeType::TEXT && \count($this->contents) > 1) { + foreach ($this->contents as $key => $value) { + if ($value->getType() === MimeType::TEXT) { + $plain_content = $value; + unset($this->contents[$key]); + break; + } + } + if (isset($plain_content)) { + array_unshift($this->contents, $plain_content); + } + } + } + + return $this->contents; + } + + /** + * Add an attachment to a Mail object + * + * @param string|Attachment $attachment Attachment object or + * Base64 encoded content + * @param string|null $type Mime type of the attachment + * @param string|null $filename File name of the attachment + * @param string|null $disposition How the attachment should be + * displayed: inline or attachment + * default is attachment + * @param string|null $content_id Used when disposition is inline + * to display the file within the + * body of the email + * @throws TypeException + */ + public function addAttachment( + $attachment, + $type = null, + $filename = null, + $disposition = null, + $content_id = null + ) { + if (\is_array($attachment)) { + $attachment = new Attachment( + $attachment[0], + $attachment[1], + $attachment[2], + $attachment[3], + $attachment[4] + ); + } else if (!($attachment instanceof Attachment)) { + $attachment = new Attachment( + $attachment, + $type, + $filename, + $disposition, + $content_id + ); + } + $this->attachments[] = $attachment; + } + + /** + * Adds multiple attachments to a Mail object + * + * @param array|Attachment[] $attachments Array of Attachment objects or + * arrays + * @throws TypeException + */ + public function addAttachments($attachments) + { + foreach ($attachments as $attachment) { + $this->addAttachment($attachment); + } + } + + /** + * Retrieve the attachments attached to a Mail object + * + * @return Attachment[] + */ + public function getAttachments() + { + return $this->attachments; + } + + /** + * Add a template id to a Mail object + * + * @param TemplateId|string $template_id The id of the template to be + * applied to this email + * @throws TypeException + */ + public function setTemplateId($template_id) + { + if (!($template_id instanceof TemplateId)) { + $template_id = new TemplateId($template_id); + } + + $this->template_id = $template_id; + } + + /** + * Retrieve a template id attached to a Mail object + * + * @return TemplateId + */ + public function getTemplateId() + { + return $this->template_id; + } + + /** + * Add a section to a Mail object + * + * @param string|Section $key Key or Section object + * @param string|null $value Value + */ + public function addSection($key, $value = null) + { + if ($key instanceof Section) { + $section = $key; + $this->sections[$section->getKey()] = $section->getValue(); + return; + } + $this->sections[$key] = (string)$value; + } + + /** + * Adds multiple sections to a Mail object + * + * @param array|Section[] $sections Array of CustomArg objects + * or key/values + */ + public function addSections($sections) + { + if (\current($sections) instanceof Section) { + foreach ($sections as $section) { + $this->addSection($section); + } + } else { + foreach ($sections as $key => $value) { + $this->addSection($key, $value); + } + } + } + + /** + * Retrieve the section(s) attached to a Mail object + * + * @return Section[] + */ + public function getSections() + { + return $this->sections; + } + + /** + * Add a header to a Mail object + * + * Note that headers added to Personalization objects override + * global headers. + * + * @param string|Header $key Key or Header object + * @param string|null $value Value + */ + public function addGlobalHeader($key, $value = null) + { + if ($key instanceof Header) { + $header = $key; + $this->headers[$header->getKey()] = $header->getValue(); + return; + } + $this->headers[$key] = (string)$value; + } + + /** + * Adds multiple headers to a Mail object + * + * Note that headers added to Personalization objects override + * global headers. + * + * @param array|Header[] $headers Array of Header objects + * or key values + */ + public function addGlobalHeaders($headers) + { + if (\current($headers) instanceof Header) { + foreach ($headers as $header) { + $this->addGlobalHeader($header); + } + } else { + foreach ($headers as $key => $value) { + $this->addGlobalHeader($key, $value); + } + } + } + + /** + * Retrieve the headers attached to a Mail object + * + * @return Header[] + */ + public function getGlobalHeaders() + { + return $this->headers; + } + + /** + * Add a substitution to a Mail object + * + * Note that substitutions added to Personalization objects override + * global substitutions. + * + * @param string|Substitution $key Key or Substitution object + * @param string|null $value Value + */ + public function addGlobalSubstitution($key, $value = null) + { + if ($key instanceof Substitution) { + $substitution = $key; + $this->substitutions[$substitution->getKey()] = $substitution->getValue(); + return; + } + $this->substitutions[$key] = $value; + } + + /** + * Adds multiple substitutions to a Mail object + * + * Note that substitutions added to Personalization objects override + * global headers. + * + * @param array|Substitution[] $substitutions Array of Substitution + * objects or key/values + */ + public function addGlobalSubstitutions($substitutions) + { + if (\current($substitutions) instanceof Substitution) { + foreach ($substitutions as $substitution) { + $this->addGlobalSubstitution($substitution); + } + } else { + foreach ($substitutions as $key => $value) { + $this->addGlobalSubstitution($key, $value); + } + } + } + + /** + * Retrieve the substitutions attached to a Mail object + * + * @return Substitution[] + */ + public function getGlobalSubstitutions() + { + return $this->substitutions; + } + + /** + * Add a category to a Mail object + * + * @param string|Category $category Category object or category name + * @throws TypeException + */ + public function addCategory($category) + { + if (!($category instanceof Category)) { + $category = new Category($category); + } + + Assert::accept($category, 'category', function () { + $categories = $this->categories; + if (!\is_array($categories)) { + $categories = []; + } + return \count($categories) < 10; + }, 'Number of elements in "$categories" can not exceed 10.'); + + $this->categories[] = $category; + } + + /** + * Adds multiple categories to a Mail object + * + * @param array|Category[] $categories Array of Category objects or arrays + * @throws TypeException + */ + public function addCategories($categories) + { + foreach ($categories as $category) { + $this->addCategory($category); + } + } + + /** + * Retrieve the categories attached to a Mail object + * + * @return Category[] + */ + public function getCategories() + { + return $this->categories; + } + + /** + * Add a custom arg to a Mail object + * + * Note that custom args added to Personalization objects override + * global custom args. + * + * @param string|CustomArg $key Key or CustomArg object + * @param string|null $value Value + */ + public function addGlobalCustomArg($key, $value = null) + { + if ($key instanceof CustomArg) { + $custom_arg = $key; + $this->custom_args[$custom_arg->getKey()] = $custom_arg->getValue(); + return; + } + $this->custom_args[$key] = (string)$value; + } + + /** + * Adds multiple custom args to a Mail object + * + * Note that custom args added to Personalization objects override + * global custom args. + * + * @param array|CustomArg[] $custom_args Array of CustomArg objects + * or key/values + */ + public function addGlobalCustomArgs($custom_args) + { + if (\current($custom_args) instanceof CustomArg) { + foreach ($custom_args as $custom_arg) { + $this->addGlobalCustomArg($custom_arg); + } + } else { + foreach ($custom_args as $key => $value) { + $this->addGlobalCustomArg($key, $value); + } + } + } + + /** + * Retrieve the custom args attached to a Mail object + * + * @return CustomArg[] + */ + public function getGlobalCustomArgs() + { + return $this->custom_args; + } + + /** + * Add a unix timestamp allowing you to specify when you want your + * email to be delivered to a Mail object + * + * Note that timestamps added to Personalization objects override + * global timestamps. + * + * @param int|SendAt $send_at A unix timestamp + * @throws TypeException + */ + public function setGlobalSendAt($send_at) + { + if (!($send_at instanceof SendAt)) { + $send_at = new SendAt($send_at); + } + $this->send_at = $send_at; + } + + /** + * Retrieve the unix timestamp attached to a Mail object + * + * @return SendAt + */ + public function getGlobalSendAt() + { + return $this->send_at; + } + + /** + * Add a batch id to a Mail object + * + * @param string|BatchId $batch_id Id for a batch of emails + * to be sent at the same time + * @throws TypeException + */ + public function setBatchId($batch_id) + { + if (!($batch_id instanceof BatchId)) { + $batch_id = new BatchId($batch_id); + } + $this->batch_id = $batch_id; + } + + /** + * Retrieve the batch id attached to a Mail object + * + * @return BatchId + */ + public function getBatchId() + { + return $this->batch_id; + } + + /** + * Add a Asm describing how to handle unsubscribes to a Mail object + * + * @param int|Asm $group_id Asm object or unsubscribe group id + * to associate this email with + * @param array $groups_to_display Array of integer ids of unsubscribe + * groups to be displayed on the + * unsubscribe preferences page + * @throws TypeException + */ + public function setAsm($group_id, $groups_to_display = null) + { + if ($group_id instanceof Asm) { + $asm = $group_id; + $this->asm = $asm; + } else { + $this->asm = new Asm($group_id, $groups_to_display); + } + } + + /** + * Retrieve the Asm object describing how to handle unsubscribes attached + * to a Mail object + * + * @return Asm + */ + public function getAsm() + { + return $this->asm; + } + + /** + * Add the IP pool name to a Mail object + * + * @param string|IpPoolName $ip_pool_name The IP Pool that you would + * like to send this email from + * @throws TypeException + */ + public function setIpPoolName($ip_pool_name) + { + if ($ip_pool_name instanceof IpPoolName) { + $this->ip_pool_name = $ip_pool_name->getIpPoolName(); + } else { + $this->ip_pool_name = new IpPoolName($ip_pool_name); + } + } + + /** + * Retrieve the IP pool name attached to a Mail object + * + * @return IpPoolName + */ + public function getIpPoolName() + { + return $this->ip_pool_name; + } + + /** + * Add a MailSettings object to a Mail object + * + * @param MailSettings $mail_settings A collection of different + * mail settings that you can + * use to specify how you would + * like this email to be handled + */ + public function setMailSettings($mail_settings) + { + $this->mail_settings = $mail_settings; + } + + /** + * Retrieve the MailSettings object attached to a Mail object + * + * @return MailSettings + */ + public function getMailSettings() + { + return $this->mail_settings; + } + + /** + * Set the Bcc settings on a MailSettings object + * + * @param bool|BccSettings $enable A BccSettings object or a boolean + * to determine if this setting is active + * @param string|null $email The email address to be bcc'ed + * @throws TypeException + */ + public function setBccSettings($enable, $email = null) + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBccSettings($enable, $email); + } + + /** + * Enable bypass bounce management on a MailSettings object + * + * Allows you to bypass the bounce list to ensure that the email is delivered to recipients. + * Spam report and unsubscribe lists will still be checked; addresses on these other lists + * will not receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * + * @throws TypeException + */ + public function enableBypassBounceManagement() + { + if (!$this->mail_settings instanceof MailSettings) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassBounceManagement(true); + } + + /** + * Enable bypass list management on a MailSettings object + * + * Allows you to bypass all unsubscribe groups and suppressions to ensure + * that the email is delivered to every single recipient. This should only + * be used in emergencies when it is absolutely necessary that every + * recipient receives your email. + * + * @throws TypeException + */ + public function enableBypassListManagement() + { + if (!$this->mail_settings instanceof MailSettings) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassListManagement(true); + } + + /** + * Enable bypass spam management on a MailSettings object + * + * Allows you to bypass the spam report list to ensure that the email is delivered to recipients. + * Bounce and unsubscribe lists will still be checked; addresses on these other lists will not + * receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * + * @throws TypeException + */ + public function enableBypassSpamManagement() + { + if (!$this->mail_settings instanceof MailSettings) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassSpamManagement(true); + } + + /** + * Enable bypass unsubscribe management on a MailSettings object + * + * Allows you to bypass the global unsubscribe list to ensure that the email is delivered + * to recipients. Bounce and spam report lists will still be checked; addresses on these + * other lists will not receive the message. This filter applies only to global unsubscribes + * and will not bypass group unsubscribes. + * + * This filter cannot be combined with the bypass_list_management filter. + * + * @throws TypeException + */ + public function enableBypassUnsubscribeManagement() + { + if (!$this->mail_settings instanceof MailSettings) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassUnsubscribeManagement(true); + } + + /** + * Disable bypass bounce management on a MailSettings object + * + * Allows you to bypass the bounce list to ensure that the email is delivered to recipients. + * Spam report and unsubscribe lists will still be checked; addresses on these other lists + * will not receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * + * @throws TypeException + */ + public function disableBypassBounceManagement() + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassBounceManagement(false); + } + + /** + * Disable bypass list management on a MailSettings object + * + * Allows you to bypass all unsubscribe groups and suppressions to ensure + * that the email is delivered to every single recipient. This should only + * be used in emergencies when it is absolutely necessary that every + * recipient receives your email. + * + * @throws TypeException + */ + public function disableBypassListManagement() + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassListManagement(false); + } + + + /** + * Disable bypass spam management on a MailSettings object + * + * Allows you to bypass the spam report list to ensure that the email is delivered to recipients. + * Bounce and unsubscribe lists will still be checked; addresses on these other lists will not + * receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * + * @throws TypeException + */ + public function disableBypassSpamManagement() + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassSpamManagement(false); + } + + /** + * Disable bypass global unsubscribe management on a MailSettings object + * + * Allows you to bypass the global unsubscribe list to ensure that the email is delivered + * to recipients. Bounce and spam report lists will still be checked; addresses on these + * other lists will not receive the message. This filter applies only to global unsubscribes + * and will not bypass group unsubscribes. + * + * This filter cannot be combined with the bypass_list_management filter. + * + * @throws TypeException + */ + public function disableBypassUnsubscribeManagement() + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setBypassUnsubscribeManagement(false); + } + + /** + * Set the Footer settings on a MailSettings object + * + * @param bool|Footer $enable A Footer object or a boolean + * to determine if this setting is active + * @param string|null $text The plain text content of the footer + * @param string|null $html The HTML content of the footer + * + * @throws TypeException + */ + public function setFooter($enable = null, $text = null, $html = null) + { + if (!$this->mail_settings instanceof MailSettings) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setFooter($enable, $text, $html); + } + + /** + * Enable sandbox mode on a MailSettings object + * + * This allows you to send a test email to ensure that your request + * body is valid and formatted correctly. + * + * @throws TypeException + */ + public function enableSandBoxMode() + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setSandBoxMode(true); + } + + /** + * Disable sandbox mode on a MailSettings object + * + * This to ensure that your request is not in sandbox mode. + * + * @throws TypeException + */ + public function disableSandBoxMode() + { + if (!($this->mail_settings instanceof MailSettings)) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setSandBoxMode(false); + } + + /** + * Set the spam check settings on a MailSettings object + * + * @param bool|SpamCheck $enable A SpamCheck object or a boolean + * to determine if this setting is active + * @param int|null $threshold The threshold used to determine if your + * content qualifies as spam on a scale from + * 1 to 10, with 10 being most strict, or + * most likely to be considered as spam + * @param string|null $post_to_url An Inbound Parse URL that you would like + * a copy of your email along with the spam + * report to be sent to + * + * @throws TypeException + */ + public function setSpamCheck($enable = null, $threshold = null, $post_to_url = null) + { + if (!$this->mail_settings instanceof MailSettings) { + $this->mail_settings = new MailSettings(); + } + $this->mail_settings->setSpamCheck($enable, $threshold, $post_to_url); + } + + /** + * Add a TrackingSettings object to a Mail object + * + * @param TrackingSettings $tracking_settings Settings to determine how you + * would like to track the metrics + * of how your recipients interact + * with your email + */ + public function setTrackingSettings($tracking_settings) + { + $this->tracking_settings = $tracking_settings; + } + + /** + * Retrieve the TrackingSettings object attached to a Mail object + * + * @return TrackingSettings + */ + public function getTrackingSettings() + { + return $this->tracking_settings; + } + + /** + * Set the click tracking settings on a TrackingSettings object + * + * @param bool|ClickTracking $enable A ClickTracking object or a boolean + * to determine if this setting is active + * @param bool|null $enable_text Indicates if this setting should be + * included in the text/plain portion of + * your email + * + * @throws TypeException + */ + public function setClickTracking($enable = null, $enable_text = null) + { + if (!($this->tracking_settings instanceof TrackingSettings)) { + $this->tracking_settings = new TrackingSettings(); + } + $this->tracking_settings->setClickTracking($enable, $enable_text); + } + + /** + * Set the open tracking settings on a TrackingSettings object + * + * @param bool|OpenTracking $enable A OpenTracking object or a boolean + * to determine if this setting is + * active + * @param string|null $substitution_tag Allows you to specify a + * substitution tag that you can + * insert in the body of your email + * at a location that you desire. + * This tag will be replaced by the + * open tracking pixel + * + * @throws TypeException + */ + public function setOpenTracking($enable = null, $substitution_tag = null) + { + if (!($this->tracking_settings instanceof TrackingSettings)) { + $this->tracking_settings = new TrackingSettings(); + } + $this->tracking_settings->setOpenTracking($enable, $substitution_tag); + } + + /** + * Set the subscription tracking settings on a TrackingSettings object + * + * @param bool|SubscriptionTracking $enable A SubscriptionTracking + * object or a boolean to + * determine if this setting + * is active + * @param string|null $text Text to be appended to the + * email, with the + * subscription tracking + * link. You may control + * where the link is by using + * the tag <% %> + * @param string|null $html HTML to be appended to the + * email, with the + * subscription tracking + * link. You may control + * where the link is by using + * the tag <% %> + * @param string|null $substitution_tag A tag that will be + * replaced with the + * unsubscribe URL. for + * example: + * [unsubscribe_url]. If this + * parameter is used, it will + * override both the text and + * html parameters. The URL + * of the link will be placed + * at the substitution tag’s + * location, with no + * additional formatting + */ + public function setSubscriptionTracking( + $enable = null, + $text = null, + $html = null, + $substitution_tag = null + ) { + if (!($this->tracking_settings instanceof TrackingSettings)) { + $this->tracking_settings = new TrackingSettings(); + } + $this->tracking_settings->setSubscriptionTracking( + $enable, + $text, + $html, + $substitution_tag + ); + } + + /** + * Set the Google anatlyics settings on a TrackingSettings object + * + * @param bool|Ganalytics $enable A Ganalytics object or a boolean to + * determine if this setting + * is active + * @param string|null $utm_source Name of the referrer source. (e.g. + * Google, SomeDomain.com, or + * Marketing Email) + * @param string|null $utm_medium Name of the marketing medium. + * (e.g. Email) + * @param string|null $utm_term Used to identify any paid keywords. + * @param string|null $utm_content Used to differentiate your campaign + * from advertisements + * @param string|null $utm_campaign The name of the campaign + * + * @throws TypeException + */ + public function setGanalytics( + $enable = null, + $utm_source = null, + $utm_medium = null, + $utm_term = null, + $utm_content = null, + $utm_campaign = null + ) { + if (!($this->tracking_settings instanceof TrackingSettings)) { + $this->tracking_settings = new TrackingSettings(); + } + $this->tracking_settings->setGanalytics( + $enable, + $utm_source, + $utm_medium, + $utm_term, + $utm_content, + $utm_campaign + ); + } + + /** + * Return an array representing a request object for the Twilio SendGrid API + * + * @return null|array + * @throws TypeException + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + // Detect if we are using the new dynamic templates + if ($this->getTemplateId() !== null && strpos($this->getTemplateId()->getTemplateId(), 'd-') === 0) { + foreach ($this->personalization as $personalization) { + $personalization->setHasDynamicTemplate(true); + } + } + + return array_filter( + [ + 'personalizations' => array_values(array_filter( + $this->getPersonalizations(), + static function ($value) { + return null !== $value && null !== $value->jsonSerialize(); + } + )), + 'from' => $this->getFrom(), + 'reply_to' => $this->getReplyTo(), + 'subject' => $this->getGlobalSubject(), + 'content' => $this->getContents(), + 'attachments' => $this->getAttachments(), + 'template_id' => $this->getTemplateId(), + 'sections' => $this->getSections(), + 'headers' => $this->getGlobalHeaders(), + 'categories' => $this->getCategories(), + 'custom_args' => $this->getGlobalCustomArgs(), + 'send_at' => $this->getGlobalSendAt(), + 'batch_id' => $this->getBatchId(), + 'asm' => $this->getASM(), + 'ip_pool_name' => $this->getIpPoolName(), + 'substitutions' => $this->getGlobalSubstitutions(), + 'mail_settings' => $this->getMailSettings(), + 'tracking_settings' => $this->getTrackingSettings() + ], + static function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/MailSettings.php b/vendor/sendgrid/sendgrid/lib/mail/MailSettings.php new file mode 100644 index 00000000..6440d8aa --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/MailSettings.php @@ -0,0 +1,398 @@ +setBccSettings($bcc_settings); + } + if (isset($bypass_bounce_management)) { + $this->setBypassBounceManagement($bypass_bounce_management); + } + if (isset($bypass_list_management)) { + $this->setBypassListManagement($bypass_list_management); + } + if (isset($bypass_spam_management)) { + $this->setBypassSpamManagement($bypass_spam_management); + } + if (isset($bypass_unsubscribe_management)) { + $this->setBypassUnsubscribeManagement($bypass_unsubscribe_management); + } + if (isset($footer)) { + $this->setFooter($footer); + } + if (isset($sandbox_mode)) { + $this->setSandboxMode($sandbox_mode); + } + if (isset($spam_check)) { + $this->setSpamCheck($spam_check); + } + } + + /** + * Set the bcc settings on a MailSettings object + * + * @param BccSettings|bool $enable The BccSettings object or an indication + * if the setting is enabled + * @param string|null $email The email address that you would like + * to receive the BCC + * + * @throws \SendGrid\Mail\TypeException + */ + public function setBccSettings($enable, $email = null) + { + if ($enable instanceof BccSettings) { + $bcc = $enable; + $this->bcc = $bcc; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\BccSettings or a boolean.' + ); + $this->bcc = new BccSettings($enable, $email); + } + + /** + * Retrieve the bcc settings from a MailSettings object + * + * @return Bcc + */ + public function getBccSettings() + { + return $this->bcc; + } + + + /** + * Set bypass bounce management settings on a MailSettings object + * + * @param BypassBounceManagement|bool $enable The BypassBounceManagement + * object or an indication + * if the setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setBypassBounceManagement($enable) + { + if ($enable instanceof BypassBounceManagement) { + $bypass_bounce_management = $enable; + $this->bypass_bounce_management = $bypass_bounce_management; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\BypassBounceManagement + or a boolean.' + ); + $this->bypass_bounce_management = new BypassBounceManagement($enable); + } + + /** + * Set bypass list management settings on a MailSettings object + * + * @param BypassListManagement|bool $enable The BypassListManagement + * object or an indication + * if the setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setBypassListManagement($enable) + { + if ($enable instanceof BypassListManagement) { + $bypass_list_management = $enable; + $this->bypass_list_management = $bypass_list_management; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\BypassListManagement + or a boolean.' + ); + $this->bypass_list_management = new BypassListManagement($enable); + } + + /** + * Set bypass spam management settings on a MailSettings object + * + * @param BypassSpamManagement|bool $enable The BypassSpamManagement + * object or an indication + * if the setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setBypassSpamManagement($enable) + { + if ($enable instanceof BypassSpamManagement) { + $bypass_spam_management = $enable; + $this->bypass_spam_management = $bypass_spam_management; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\BypassSpamManagement or a boolean.' + ); + $this->bypass_spam_management = new BypassSpamManagement($enable); + } + + /** + * Set bypass unsubscribe management settings on a MailSettings object + * + * @param BypassUnsubscribeManagement|bool $enable The BypassUnsubscribeManagement + * object or an indication + * if the setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setBypassUnsubscribeManagement($enable) + { + if ($enable instanceof BypassUnsubscribeManagement) { + $bypass_unsubscribe_management = $enable; + $this->bypass_unsubscribe_management = $bypass_unsubscribe_management; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\BypassUnsubscribeManagement + or a boolean.' + ); + $this->bypass_unsubscribe_management = new BypassUnsubscribeManagement($enable); + } + + /** + * Retrieve bypass bounce management settings from a MailSettings object + * + * @return BypassBounceManagement + */ + public function getBypassBounceManagement() + { + return $this->bypass_bounce_management; + } + + /** + * Retrieve bypass list management settings from a MailSettings object + * + * @return BypassListManagement + */ + public function getBypassListManagement() + { + return $this->bypass_list_management; + } + + /** + * Retrieve bypass spam management settings from a MailSettings object + * + * @return BypassSpamManagement + */ + public function getBypassSpamManagement() + { + return $this->bypass_spam_management; + } + + /** + * Retrieve bypass unsubscribe management settings from a MailSettings object + * + * @return BypassUnsubscribeManagement + */ + public function getBypassUnsubscribeManagement() + { + return $this->bypass_unsubscribe_management; + } + + /** + * Set the footer settings on a MailSettings object + * + * @param Footer|bool $enable The Footer object or an indication + * if the setting is enabled + * @param string|null $text The plain text content of your footer + * @param string|null $html The HTML content of your footer + * + * @throws TypeException + */ + public function setFooter($enable, $text = null, $html = null) + { + if ($enable instanceof Footer) { + $footer = $enable; + $this->footer = $footer; + return; + } + $this->footer = new Footer($enable, $text, $html); + } + + /** + * Retrieve the footer settings from a MailSettings object + * + * @return Footer + */ + public function getFooter() + { + return $this->footer; + } + + /** + * Set sandbox mode settings on a MailSettings object + * + * @param SandBoxMode|bool $enable The SandBoxMode object or an + * indication if the setting is enabled + * + * @throws TypeException + */ + public function setSandboxMode($enable) + { + if ($enable instanceof SandBoxMode) { + $sandbox_mode = $enable; + $this->sandbox_mode = $sandbox_mode; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\SandBoxMode or a boolean.' + ); + $this->sandbox_mode = new SandBoxMode($enable); + } + + /** + * Retrieve sandbox mode settings on a MailSettings object + * + * @return SandBoxMode + */ + public function getSandboxMode() + { + return $this->sandbox_mode; + } + + /** + * Enable sandbox mode on a MailSettings object + * + * @throws TypeException + */ + public function enableSandboxMode() + { + $this->setSandboxMode(true); + } + + /** + * Disable sandbox mode on a MailSettings object + * + * @throws TypeException + */ + public function disableSandboxMode() + { + $this->setSandboxMode(false); + } + + /** + * Set spam check settings on a MailSettings object + * + * @param SpamCheck|bool $enable The SpamCheck object or an + * indication if the setting is enabled + * @param int $threshold The threshold used to determine if your + * content qualifies as spam on a scale + * from 1 to 10, with 10 being most strict, + * or most + * @param string $post_to_url An Inbound Parse URL that you would like + * a copy of your email along with the spam + * report to be sent to + * + * @throws TypeException + */ + public function setSpamCheck($enable, $threshold = null, $post_to_url = null) + { + if ($enable instanceof SpamCheck) { + $spam_check = $enable; + $this->spam_check = $spam_check; + return; + } + Assert::boolean( + $enable, 'enable', 'Value "$enable" must be an instance of SendGrid\Mail\SpamCheck or a boolean.' + ); + $this->spam_check = new SpamCheck($enable, $threshold, $post_to_url); + } + + /** + * Retrieve spam check settings from a MailSettings object + * + * @return SpamCheck + */ + public function getSpamCheck() + { + return $this->spam_check; + } + + /** + * Return an array representing a MailSettings object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'bcc' => $this->getBccSettings(), + 'bypass_bounce_management' => $this->getBypassBounceManagement(), + 'bypass_list_management' => $this->getBypassListManagement(), + 'bypass_spam_management' => $this->getBypassSpamManagement(), + 'bypass_unsubscribe_management' => $this->getBypassUnsubscribeManagement(), + 'footer' => $this->getFooter(), + 'sandbox_mode' => $this->getSandboxMode(), + 'spam_check' => $this->getSpamCheck() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/MimeType.php b/vendor/sendgrid/sendgrid/lib/mail/MimeType.php new file mode 100644 index 00000000..dbedaf94 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/MimeType.php @@ -0,0 +1,17 @@ +setEnable($enable); + } + if (isset($substitution_tag)) { + $this->setSubstitutionTag($substitution_tag); + } + } + + /** + * Update the enable setting on a OpenTracking object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a OpenTracking object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Set the substitution tag on a OpenTracking object + * + * @param string $substitution_tag Allows you to specify a substitution + * tag that you can insert in the body + * of your email at a location that you + * desire. This tag will be replaced by + * the open tracking pixel + * + * @throws \SendGrid\Mail\TypeException + */ + public function setSubstitutionTag($substitution_tag) + { + Assert::string($substitution_tag, 'substitution_tag'); + + $this->substitution_tag = $substitution_tag; + } + + /** + * Retrieve the substitution tag from a OpenTracking object + * + * @return string + */ + public function getSubstitutionTag() + { + return $this->substitution_tag; + } + + /** + * Return an array representing a OpenTracking object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'substitution_tag' => $this->getSubstitutionTag() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Personalization.php b/vendor/sendgrid/sendgrid/lib/mail/Personalization.php new file mode 100644 index 00000000..020e8245 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Personalization.php @@ -0,0 +1,331 @@ +tos[] = $email; + } + + /** + * Retrieve To object(s) from a Personalization object + * + * @return To[] + */ + public function getTos() + { + return $this->tos; + } + + /** + * Add a From object to a Personalization object + * + * @param From $email From object + */ + public function addFrom($email) + { + $this->from = $email; + } + + /** + * Retrieve From object from a Personalization object + * + * @return From|null + */ + public function getFrom() + { + return $this->from; + } + + /** + * Add a Cc object to a Personalization object + * + * @param Cc $email Cc object + */ + public function addCc($email) + { + $this->ccs[] = $email; + } + + /** + * Retrieve Cc object(s) from a Personalization object + * + * @return Cc[] + */ + public function getCcs() + { + return $this->ccs; + } + + /** + * Add a Bcc object to a Personalization object + * + * @param Bcc $email Bcc object + */ + public function addBcc($email) + { + $this->bccs[] = $email; + } + + /** + * Retrieve Bcc object(s) from a Personalization object + * + * @return Bcc[] + */ + public function getBccs() + { + return $this->bccs; + } + + /** + * Add a subject object to a Personalization object + * + * @param Subject|string $subject Subject object or string + * + * @throws TypeException + */ + public function setSubject($subject) + { + if (!($subject instanceof Subject)) { + Assert::string($subject, 'subject', '"$subject" must be an instance of SendGrid\Mail\Subject or a string'); + + $subject = new Subject($subject); + } + $this->subject = $subject; + } + + /** + * Retrieve a Subject object from a Personalization object + * + * @return Subject|null + */ + public function getSubject() + { + return $this->subject; + } + + /** + * Add a Header object to a Personalization object + * + * @param Header $header Header object + */ + public function addHeader($header) + { + Assert::isInstanceOf($header, 'header', Header::class); + + $this->headers[$header->getKey()] = $header->getValue(); + } + + /** + * Retrieve header key/value pairs from a Personalization object + * + * @return array|null + */ + public function getHeaders() + { + return $this->headers; + } + + /** + * Add a Substitution object or key/value to a Personalization object + * + * @param Substitution|string $data DynamicTemplateData object or the key of a + * dynamic data + * @param string|null $value The value of dynamic data + * + * @throws TypeException + */ + public function addDynamicTemplateData($data, $value = null) + { + $this->addSubstitution($data, $value); + } + + /** + * Retrieve dynamic template data key/value pairs from a Personalization object + * + * @return array|null + */ + public function getDynamicTemplateData() + { + return $this->getSubstitutions(); + } + + /** + * Add a Substitution object or key/value to a Personalization object + * + * @param Substitution|string $substitution Substitution object or the key of a + * substitution + * @param string|null $value The value of a substitution + * + * @throws TypeException + */ + public function addSubstitution($substitution, $value = null) + { + if (!($substitution instanceof Substitution)) { + $key = $substitution; + $substitution = new Substitution($key, $value); + } + $this->substitutions[$substitution->getKey()] = $substitution->getValue(); + } + + /** + * Retrieve substitution key/value pairs from a Personalization object + * + * @return array|null + */ + public function getSubstitutions() + { + return $this->substitutions; + } + + /** + * Add a CustomArg object to a Personalization object + * + * @param CustomArg $custom_arg CustomArg object + * + * @throws TypeException + */ + public function addCustomArg($custom_arg) + { + Assert::isInstanceOf($custom_arg, 'custom_arg', CustomArg::class); + + $this->custom_args[$custom_arg->getKey()] = (string)$custom_arg->getValue(); + } + + /** + * Retrieve custom arg key/value pairs from a Personalization object + * + * @return array|null + */ + public function getCustomArgs() + { + return $this->custom_args; + } + + /** + * Add a SendAt object to a Personalization object + * + * @param SendAt $send_at SendAt object + * + * @throws TypeException + */ + public function setSendAt($send_at) + { + Assert::isInstanceOf($send_at, 'send_at', SendAt::class); + + $this->send_at = $send_at; + } + + /** + * Retrieve a SendAt object from a Personalization object + * + * @return SendAt|null + */ + public function getSendAt() + { + return $this->send_at; + } + + /** + * Specify if this personalization is using dynamic templates + * + * @param bool $has_dynamic_template are we using dynamic templates + * + * @throws TypeException + */ + public function setHasDynamicTemplate($has_dynamic_template) + { + Assert::boolean($has_dynamic_template, 'has_dynamic_template'); + + $this->has_dynamic_template = $has_dynamic_template; + } + + /** + * Determine if this Personalization object is using dynamic templates + * + * @return bool + */ + public function getHasDynamicTemplate() + { + return $this->has_dynamic_template; + } + + /** + * Return an array representing a Personalization object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + if ($this->getHasDynamicTemplate()) { + $dynamic_substitutions = $this->getSubstitutions(); + $substitutions = null; + } else { + $substitutions = $this->getSubstitutions(); + $dynamic_substitutions = null; + } + + return array_filter( + [ + 'to' => $this->getTos(), + 'from' => $this->getFrom(), + 'cc' => $this->getCcs(), + 'bcc' => $this->getBccs(), + 'subject' => $this->getSubject(), + 'headers' => $this->getHeaders(), + 'substitutions' => $substitutions, + 'dynamic_template_data' => $dynamic_substitutions, + 'custom_args' => $this->getCustomArgs(), + 'send_at' => $this->getSendAt() + ], + static function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/PlainTextContent.php b/vendor/sendgrid/sendgrid/lib/mail/PlainTextContent.php new file mode 100644 index 00000000..bae8b671 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/PlainTextContent.php @@ -0,0 +1,26 @@ +setEnable($enable); + } + } + + /** + * Update the enable setting on a SandBoxMode object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a SandBoxMode object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Return an array representing a SandBoxMode object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Section.php b/vendor/sendgrid/sendgrid/lib/mail/Section.php new file mode 100644 index 00000000..ae7123fd --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Section.php @@ -0,0 +1,108 @@ +setKey($key); + } + if (isset($value)) { + $this->setValue($value); + } + } + + /** + * Add the key on a Section object + * + * @param string $key Section key + * + * @throws \SendGrid\Mail\TypeException + */ + public function setKey($key) + { + Assert::string($key, 'key'); + + $this->key = $key; + } + + /** + * Retrieve the key from a Section object + * + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * Add the value on a Section object + * + * @param string $value Section value + * + * @throws \SendGrid\Mail\TypeException + */ + public function setValue($value) + { + Assert::string($value, 'value'); + + $this->value = $value; + } + + /** + * Retrieve the value from a Section object + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Return an array representing a Section object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'key' => $this->getKey(), + 'value' => $this->getValue() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/SendAt.php b/vendor/sendgrid/sendgrid/lib/mail/SendAt.php new file mode 100644 index 00000000..f1a22e96 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/SendAt.php @@ -0,0 +1,95 @@ +setSendAt($send_at); + } + } + + /** + * Add the send at value to a SendAt object + * + * @param int $send_at A unix timestamp allowing you to specify when you + * want your email to be delivered. This may be + * overridden by the personalizations[x].send_at + * parameter. You can't schedule more than 72 hours + * in advance. If you have the flexibility, it's better + * to schedule mail for off-peak times. Most emails are + * scheduled and sent at the top of the hour or half + * hour. Scheduling email to avoid those times (for + * example, scheduling at 10:53) can result in lower + * deferral rates because it won't be going through + * our servers at the same times as everyone else's mail + * + * @throws \SendGrid\Mail\TypeException + */ + public function setSendAt($send_at) + { + Assert::integer($send_at, 'send_at'); + + $this->send_at = $send_at; + } + + /** + * Retrieve the send at value from a SendAt object + * + * @return int + */ + public function getSendAt() + { + return $this->send_at; + } + + /** + * Return an array representing a SendAt object for the Twilio SendGrid API + * + * @return int + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getSendAt(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/SpamCheck.php b/vendor/sendgrid/sendgrid/lib/mail/SpamCheck.php new file mode 100644 index 00000000..a4390603 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/SpamCheck.php @@ -0,0 +1,156 @@ +setEnable($enable); + } + if (isset($threshold)) { + $this->setThreshold($threshold); + } + if (isset($post_to_url)) { + $this->setPostToUrl($post_to_url); + } + } + + /** + * Update the enable setting on a SpamCheck object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting on a SpamCheck object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Set the threshold value on a SpamCheck object + * + * @param int $threshold The threshold used to determine if your + * content qualifies as spam on a scale + * from 1 to 10, with 10 being most strict, + * or most + * + * @throws \SendGrid\Mail\TypeException + */ + public function setThreshold($threshold) + { + Assert::minValue($threshold, 'threshold', 1); + Assert::maxValue($threshold, 'threshold', 10); + + $this->threshold = $threshold; + } + + /** + * Retrieve the threshold value from a SpamCheck object + * + * @return int + */ + public function getThreshold() + { + return $this->threshold; + } + + /** + * Set the post to url value on a SpamCheck object + * + * @param string $post_to_url An Inbound Parse URL that you would like + * a copy of your email along with the spam + * report to be sent to + * + * @throws \SendGrid\Mail\TypeException + */ + public function setPostToUrl($post_to_url) + { + Assert::string($post_to_url, 'post_to_url'); + + $this->post_to_url = $post_to_url; + } + + /** + * Retrieve the post to url value from a SpamCheck object + * + * @return string + */ + public function getPostToUrl() + { + return $this->post_to_url; + } + + /** + * Return an array representing a SpamCheck object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'threshold' => $this->getThreshold(), + 'post_to_url' => $this->getPostToUrl() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Subject.php b/vendor/sendgrid/sendgrid/lib/mail/Subject.php new file mode 100644 index 00000000..f62c4050 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Subject.php @@ -0,0 +1,68 @@ +setSubject($subject); + } + } + + /** + * Set the subject on a Subject object + * + * @param string $subject The email subject + * + * @throws TypeException + */ + public function setSubject($subject) + { + Assert::minLength($subject, 'subject', 1); + + $this->subject = $subject; + } + + /** + * Retrieve the subject from a Subject object + * + * @return string + */ + public function getSubject() + { + return mb_convert_encoding((string)$this->subject, 'UTF-8', 'UTF-8'); + } + + /** + * Return an array representing a Subject object for the Twilio SendGrid API + * + * @return string + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getSubject(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/SubscriptionTracking.php b/vendor/sendgrid/sendgrid/lib/mail/SubscriptionTracking.php new file mode 100644 index 00000000..4a51eb4d --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/SubscriptionTracking.php @@ -0,0 +1,217 @@ + + */ + private $text; + /** + * @var $htmlstring string to be appended to the email, with the + * subscription tracking link. You may control where the + * link is by using the tag <% %> + */ + private $html; + /** + * @var $substitution_tag string A tag that will be replaced with the + * unsubscribe URL. for example: [unsubscribe_url]. If + * this parameter is used, it will override both the text + * and html parameters. The URL of the link will be placed + * at the substitution tag’s location, with no additional + * formatting + */ + private $substitution_tag; + + /** + * Optional constructor + * + * @param bool|null $enable Indicates if this setting is enabled + * @param string|null $text Text to be appended to the email, with + * the subscription tracking link. You may + * control where the link is by using the + * tag <% %> + * @param string|null $html HTML to be appended to the email, with + * the subscription tracking link. You may + * control where the link is by using the + * tag <% %> + * @param string|null $substitution_tag A tag that will be replaced with the + * unsubscribe URL. For example: + * [unsubscribe_url]. If this parameter + * is used, it will override both the text + * and html parameters. The URL of the link + * will be placed at the substitution tag’s + * location, with no additional formatting + * @throws \SendGrid\Mail\TypeException + */ + public function __construct( + $enable = null, + $text = null, + $html = null, + $substitution_tag = null + ) { + if (isset($enable)) { + $this->setEnable($enable); + } + if (isset($text)) { + $this->setText($text); + } + if (isset($html)) { + $this->setHtml($html); + } + if (isset($substitution_tag)) { + $this->setSubstitutionTag($substitution_tag); + } + } + + /** + * Update the enable setting on a SubscriptionTracking object + * + * @param bool $enable Indicates if this setting is enabled + * + * @throws \SendGrid\Mail\TypeException + */ + public function setEnable($enable) + { + Assert::boolean($enable, 'enable'); + + $this->enable = $enable; + } + + /** + * Retrieve the enable setting from a SubscriptionTracking object + * + * @return bool + */ + public function getEnable() + { + return $this->enable; + } + + /** + * Add text to a SubscriptionTracking object + * + * @param string $text Text to be appended to the email, with + * the subscription tracking link. You may + * control where the link is by using the + * tag <% %> + * + * @throws \SendGrid\Mail\TypeException + */ + public function setText($text) + { + Assert::string($text, 'text'); + + $this->text = $text; + } + + /** + * Retrieve text from a SubscriptionTracking object + * + * @return string + */ + public function getText() + { + return $this->text; + } + + /** + * Add HTML to a SubscriptionTracking object + * + * @param string $html HTML to be appended to the email, with + * the subscription tracking link. You may + * control where the link is by using the + * tag <% %> + * + * @throws \SendGrid\Mail\TypeException + */ + public function setHtml($html) + { + Assert::string($html, 'html'); + + $this->html = $html; + } + + /** + * Retrieve HTML from a SubscriptionTracking object + * + * @return string + */ + public function getHtml() + { + return $this->html; + } + + /** + * Add a substitution tag to a SubscriptionTracking object + * + * @param string $substitution_tag A tag that will be replaced with the + * unsubscribe URL. for example: + * [unsubscribe_url]. If this parameter + * is used, it will override both the text + * and html parameters. The URL of the link + * will be placed at the substitution tag’s + * location, with no additional formatting %> + * + * @throws \SendGrid\Mail\TypeException + */ + public function setSubstitutionTag($substitution_tag) + { + Assert::string($substitution_tag, 'substitution_tag'); + + $this->substitution_tag = $substitution_tag; + } + + /** + * Retrieve a substitution tag from a SubscriptionTracking object + * + * @return string + */ + public function getSubstitutionTag() + { + return $this->substitution_tag; + } + + /** + * Return an array representing a SubscriptionTracking object + * for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'enable' => $this->getEnable(), + 'text' => $this->getText(), + 'html' => $this->getHtml(), + 'substitution_tag' => $this->getSubstitutionTag() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/Substitution.php b/vendor/sendgrid/sendgrid/lib/mail/Substitution.php new file mode 100644 index 00000000..6e608b44 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/Substitution.php @@ -0,0 +1,118 @@ +setKey($key); + } + if (isset($value)) { + $this->setValue($value); + } + } + + /** + * Add the key on a Substitution object + * + * @param string $key Substitution key + * + * @throws \SendGrid\Mail\TypeException + */ + public function setKey($key) + { + Assert::string($key, 'key'); + + $this->key = $key; + } + + /** + * Retrieve the key from a Substitution object + * + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * Add the value on a Substitution object + * + * @param string|array|object|bool|int|float $value Substitution value + * + * @throws \SendGrid\Mail\TypeException + */ + public function setValue($value) + { + Assert::accept($value, 'value', static function ($val) { + return \is_string($val) + || filter_var($val, FILTER_VALIDATE_INT) !== false + || \is_float($val) + || \is_bool($val) + || \is_array($val) + || \is_object($val); + }, '"$value" must be an array, object, boolean, string, numeric or integer.'); + + $this->value = $value; + } + + /** + * Retrieve the value from a Substitution object + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Return an array representing a Substitution object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'key' => $this->getKey(), + 'value' => $this->getValue() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/TemplateId.php b/vendor/sendgrid/sendgrid/lib/mail/TemplateId.php new file mode 100644 index 00000000..06661f3c --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/TemplateId.php @@ -0,0 +1,79 @@ +setTemplateId($template_id); + } + } + + /** + * Add a template id to a TemplateId object + * + * @param string $template_id The id of a template that you would like + * to use. If you use a template that contains + * a subject and content (either text or html), + * you do not need to specify those at the + * personalizations nor message level + * + * @throws \SendGrid\Mail\TypeException + */ + public function setTemplateId($template_id) + { + Assert::string($template_id, 'template_id'); + + $this->template_id = $template_id; + } + + /** + * Retrieve a template id from a TemplateId object + * + * @return string + */ + public function getTemplateId() + { + return $this->template_id; + } + + /** + * Return an array representing a TemplateId object for the Twilio SendGrid API + * + * @return string + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->getTemplateId(); + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/To.php b/vendor/sendgrid/sendgrid/lib/mail/To.php new file mode 100644 index 00000000..1ebdf5c3 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/To.php @@ -0,0 +1,15 @@ +setClickTracking($click_tracking); + } + if (isset($open_tracking)) { + $this->setOpenTracking($open_tracking); + } + if (isset($subscription_tracking)) { + $this->setSubscriptionTracking($subscription_tracking); + } + if (isset($ganalytics)) { + $this->setGanalytics($ganalytics); + } + } + + /** + * Set the click tracking settings on a TrackingSettings object + * + * @param ClickTracking|bool $enable The ClickTracking object or an + * indication if the setting is enabled + * @param bool|null $enable_text Indicates if this setting should be + * included in the text/plain portion of + * your email + * + * @throws TypeException + */ + public function setClickTracking($enable, $enable_text = null) + { + if ($enable instanceof ClickTracking) { + $click_tracking = $enable; + $this->click_tracking = $click_tracking; + return; + } + $this->click_tracking = new ClickTracking($enable, $enable_text); + } + + /** + * Retrieve the click tracking settings from a TrackingSettings object + * + * @return ClickTracking + */ + public function getClickTracking() + { + return $this->click_tracking; + } + + /** + * Set the open tracking settings on a TrackingSettings object + * + * @param OpenTracking|bool $enable The ClickTracking object or an + * indication if the setting is + * enabled + * @param string|null $substitution_tag Allows you to specify a + * substitution tag that you can + * insert in the body of your email + * at a location that you desire. + * This tag will be replaced by + * the open tracking pixelail + * + * @throws TypeException + */ + public function setOpenTracking($enable, $substitution_tag = null) + { + if ($enable instanceof OpenTracking) { + $open_tracking = $enable; + $this->open_tracking = $open_tracking; + return; + } + $this->open_tracking = new OpenTracking($enable, $substitution_tag); + } + + /** + * Retrieve the open tracking settings on a TrackingSettings object + * + * @return OpenTracking + */ + public function getOpenTracking() + { + return $this->open_tracking; + } + + /** + * Set the subscription tracking settings on a TrackingSettings object + * + * @param SubscriptionTracking|bool $enable The SubscriptionTracking + * object or an indication + * if the setting is enabled + * @param string|null $text Text to be appended to the + * email, with the + * subscription tracking + * link. You may control + * where the link is by using + * the tag <% %> + * @param string|null $html HTML to be appended to the + * email, with the + * subscription tracking + * link. You may control + * where the link is by using + * the tag <% %> + * @param string|null $substitution_tag A tag that will be + * replaced with the + * unsubscribe URL. For + * example: + * [unsubscribe_url]. If this + * parameter is used, it will + * override both the text + * and html parameters. The + * URL of the link will be + * placed at the substitution + * tag’s location, with no + * additional formatting + * + * @throws TypeException + */ + public function setSubscriptionTracking( + $enable, + $text = null, + $html = null, + $substitution_tag = null + ) { + if ($enable instanceof SubscriptionTracking) { + $subscription_tracking = $enable; + $this->subscription_tracking = $subscription_tracking; + return; + } + $this->subscription_tracking = new SubscriptionTracking($enable, $text, $html, $substitution_tag); + } + + /** + * Retrieve the subscription tracking settings from a TrackingSettings object + * + * @return SubscriptionTracking + */ + public function getSubscriptionTracking() + { + return $this->subscription_tracking; + } + + /** + * Set the Google analytics settings on a TrackingSettings object + * + * @param Ganalytics|bool $enable The Ganalytics object or an indication + * if the setting is enabled + * @param string|null $utm_source Name of the referrer source. (e.g. + * Google, SomeDomain.com, or + * Marketing Email) + * @param string|null $utm_medium Name of the marketing medium. (e.g. + * Email) + * @param string|null $utm_term Used to identify any paid keywords + * @param string|null $utm_content Used to differentiate your campaign from + * advertisements + * @param string|null $utm_campaign The name of the campaign + * + * @throws TypeException + */ + public function setGanalytics( + $enable, + $utm_source = null, + $utm_medium = null, + $utm_term = null, + $utm_content = null, + $utm_campaign = null + ) { + if ($enable instanceof Ganalytics) { + $ganalytics = $enable; + $this->ganalytics = $ganalytics; + return; + } + $this->ganalytics = new Ganalytics( + $enable, + $utm_source, + $utm_medium, + $utm_term, + $utm_content, + $utm_campaign + ); + } + + /** + * Retrieve the Google analytics settings from a TrackingSettings object + * + * @return Ganalytics + */ + public function getGanalytics() + { + return $this->ganalytics; + } + + /** + * Return an array representing a TrackingSettings object for the Twilio SendGrid API + * + * @return null|array + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return array_filter( + [ + 'click_tracking' => $this->getClickTracking(), + 'open_tracking' => $this->getOpenTracking(), + 'subscription_tracking' => $this->getSubscriptionTracking(), + 'ganalytics' => $this->getGanalytics() + ], + function ($value) { + return $value !== null; + } + ) ?: null; + } +} diff --git a/vendor/sendgrid/sendgrid/lib/mail/TypeException.php b/vendor/sendgrid/sendgrid/lib/mail/TypeException.php new file mode 100644 index 00000000..0b43f9c4 --- /dev/null +++ b/vendor/sendgrid/sendgrid/lib/mail/TypeException.php @@ -0,0 +1,8 @@ +validateDateFormat($startDate); + if (null !== $endDate) { + $this->validateDateFormat($endDate); + } + if (null !== $aggregatedBy) { + $this->validateOptions( + 'aggregatedBy', + $aggregatedBy, + self::OPTIONS_AGGREGATED_BY + ); + } + $this->startDate = $startDate; + $this->endDate = $endDate; + $this->aggregatedBy = $aggregatedBy; + } + + /** + * Retrieve global stats parameters, start date, end date and + * aggregated by + * + * @return array + */ + public function getGlobal() + { + return [ + 'start_date' => $this->startDate, + 'end_date' => $this->endDate, + 'aggregated_by' => $this->aggregatedBy + ]; + } + + /** + * Retrieve an array of categories + * + * @param array $categories + * + * @return array + * @throws Exception + */ + public function getCategory($categories) + { + $this->validateNumericArray('categories', $categories); + $stats = $this->getGlobal(); + $stats['categories'] = $categories; + return $stats; + } + + /** + * Retrieve global stats parameters, start date, end date and + * aggregated for the given set of subusers + * + * @param array $subusers Subuser accounts + * + * @return array + * @throws Exception + */ + public function getSubuser($subusers) + { + $this->validateNumericArray('subusers', $subusers); + $stats = $this->getGlobal(); + $stats['subusers'] = $subusers; + return $stats; + } + + /** + * Retrieve global stats parameters, start date, end date, + * aggregated by, sort by metric, sort by direction, limit + * and offset + * + * @param string $sortByMetric blocks|bounce_drops|bounces| + * clicks|deferred|delivered| + * invalid_emails|opens|processed| + * requests|spam_report_drops| + * spam_reports|unique_clicks| + * unique_opens|unsubscribe_drops| + * unsubscribes + * @param string $sortByDirection asc|desc + * @param integer $limit The number of results to return + * @param integer $offset The point in the list to begin + * retrieving results + * + * @return array + * @throws Exception + */ + public function getSum( + $sortByMetric = 'delivered', + $sortByDirection = 'desc', + $limit = 5, + $offset = 0 + ) { + $this->validateOptions( + 'sortByDirection', + $sortByDirection, + self::OPTIONS_SORT_DIRECTION + ); + $this->validateInteger('limit', $limit); + $this->validateInteger('offset', $offset); + $stats = $this->getGlobal(); + $stats['sort_by_metric'] = $sortByMetric; + $stats['sort_by_direction'] = $sortByDirection; + $stats['limit'] = $limit; + $stats['offset'] = $offset; + return $stats; + } + + /** + * Retrieve monthly stats by subuser + * + * @param string $subuser Subuser account + * @param string $sortByMetric blocks|bounce_drops|bounces| + * clicks|deferred|delivered| + * invalid_emails|opens|processed| + * requests|spam_report_drops| + * spam_reports|unique_clicks| + * unique_opens|unsubscribe_drops| + * unsubscribes + * @param string $sortByDirection asc|desc + * @param integer $limit The number of results to return + * @param integer $offset The point in the list to begin + * retrieving results + * + * @return array + * @throws Exception + */ + public function getSubuserMonthly( + $subuser = null, + $sortByMetric = 'delivered', + $sortByDirection = 'desc', + $limit = 5, + $offset = 0 + ) { + $this->validateOptions( + 'sortByDirection', + $sortByDirection, + self::OPTIONS_SORT_DIRECTION + ); + $this->validateInteger('limit', $limit); + $this->validateInteger('offset', $offset); + return [ + 'date' => $this->startDate, + 'subuser' => $subuser, + 'sort_by_metric' => $sortByMetric, + 'sort_by_direction' => $sortByDirection, + 'limit' => $limit, + 'offset' => $offset + ]; + } + + /** + * Validate the date format + * + * @param string $date YYYY-MM-DD + * + * @throws Exception + */ + protected function validateDateFormat($date) + { + if (false === DateTime::createFromFormat(self::DATE_FORMAT, $date)) { + throw new Exception('Date must be in the YYYY-MM-DD format.'); + } + } + + /** + * Validate options + * + * @param string $name Name of option + * @param string $value Value of option + * @param array $options Array of options + * + * @throws Exception + */ + protected function validateOptions($name, $value, $options) + { + if (!in_array($value, $options)) { + throw new Exception( + $name . ' must be one of: ' . implode(', ', $options) + ); + } + } + + /** + * Validate integer + * + * @param string $name Name as a string + * @param integer $value Value as an integer + * + * @throws Exception + */ + protected function validateInteger($name, $value) + { + if (!is_integer($value)) { + throw new Exception($name . ' must be an integer.'); + } + } + + /** + * Validate a numeric array + * + * @param string $name Name as a string + * @param array $value Value as an array of integers + * + * @throws Exception + */ + protected function validateNumericArray($name, $value) + { + if (!\is_array($value) || empty($value) || !$this->isNumeric($value)) { + throw new Exception($name . ' must be a non-empty numeric array.'); + } + } + + /** + * Determine if the array is numeric + * + * @param array $array Array of values + * + * @return bool + */ + protected function isNumeric(array $array) + { + return \array_keys($array) === range(0, \count($array) - 1); + } +} diff --git a/vendor/sendgrid/sendgrid/phpcs.xml b/vendor/sendgrid/sendgrid/phpcs.xml new file mode 100644 index 00000000..f646392e --- /dev/null +++ b/vendor/sendgrid/sendgrid/phpcs.xml @@ -0,0 +1,196 @@ + + + The PSR-2 coding standard. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sendgrid/sendgrid/scripts/package.sh b/vendor/sendgrid/sendgrid/scripts/package.sh new file mode 100755 index 00000000..6d237430 --- /dev/null +++ b/vendor/sendgrid/sendgrid/scripts/package.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +rm -rf vendor composer.lock +composer install --no-dev +printf "" > sendgrid-php.php +cd .. +zip -r sendgrid-php.zip sendgrid-php -x \*.git\* \*composer.json\* \*scripts\* \*test\* \*.travis.yml\* \*prism\* + +exit 0 diff --git a/vendor/sendgrid/sendgrid/sendgrid-php.php b/vendor/sendgrid/sendgrid/sendgrid-php.php new file mode 100644 index 00000000..1ffbc58c --- /dev/null +++ b/vendor/sendgrid/sendgrid/sendgrid-php.php @@ -0,0 +1,28 @@ + array( + array( + "amount" => 100000000, + "taxId" => "594.739.480-42", + "name" => "Daenerys Targaryen Stormborn", + "bankCode" => "341", + "branchCode" => "2201", + "accountNumber" => "76543-8", + "tags" => array("daenerys", "targaryen", "transfer-1-external-id") + ) + ) +); + +$message = json_encode($message, JSON_PRETTY_PRINT); + +$signature = EllipticCurve\Ecdsa::sign($message, $privateKey); + +# Generate Signature in base64. This result can be sent to Stark Bank in header as Digital-Signature parameter +echo "\n" . $signature->toBase64(); + +# To double check if message matches the signature +$publicKey = $privateKey->publicKey(); + +echo "\n" . EllipticCurve\Ecdsa::verify($message, $signature, $publicKey); + +``` + +Simple use: + +```php + +# Generate new Keys +$privateKey = new EllipticCurve\PrivateKey; +$publicKey = $privateKey->publicKey(); + +$message = "My test message"; + +# Generate Signature +$signature = EllipticCurve\Ecdsa::sign($message, $privateKey); + +# Verify if signature is valid +echo "\n" . EllipticCurve\Ecdsa::verify($message, $signature, $publicKey); + +``` + +### OpenSSL + +This library is compatible with OpenSSL, so you can use it to generate keys: + +``` +openssl ecparam -name secp256k1 -genkey -out privateKey.pem +openssl ec -in privateKey.pem -pubout -out publicKey.pem +``` + +Create a message.txt file and sign it: + +``` +openssl dgst -sha256 -sign privateKey.pem -out signatureDer.txt message.txt +``` + +It's time to verify: + +```php + +$publicKeyPem = EllipticCurve\Utils\File::read("publicKey.pem"); +$signatureDer = EllipticCurve\Utils\File::read("signatureDer.txt"); +$message = EllipticCurve\Utils\File::read("message.txt"); + +$publicKey = EllipticCurve\PublicKey::fromPem($publicKeyPem); +$signature = EllipticCurve\Signature::fromDer($signatureDer); + +echo "\n" . EllipticCurve\Ecdsa::verify($message, $signature, $publicKey); + +``` + +You can also verify it on terminal: + +``` +openssl dgst -sha256 -verify publicKey.pem -signature signatureDer.txt message.txt +``` + +NOTE: If you want to create a Digital Signature to use in the [Stark Bank], you need to convert the binary signature to base64. + +``` +openssl base64 -in signatureDer.txt -out signatureBase64.txt +``` + +You can also verify it with this library: + +```php +$signatureDer = EllipticCurve\Utils\File::read("signatureDer.txt"); + +$signature = EllipticCurve\Signature::fromDer($signatureDer); + +echo "\n" . $signature->toBase64(); +``` + +[Stark Bank]: https://starkbank.com + +### Run all unit tests + +```sh +php tests/test.php +``` + +[python-ecdsa]: https://github.com/warner/python-ecdsa diff --git a/vendor/starkbank/ecdsa/composer.json b/vendor/starkbank/ecdsa/composer.json new file mode 100644 index 00000000..63cf2216 --- /dev/null +++ b/vendor/starkbank/ecdsa/composer.json @@ -0,0 +1,22 @@ +{ + "name": "starkbank/ecdsa", + "version": "0.0.5", + "type": "library", + "description": "fast openSSL-compatible implementation of the Elliptic Curve Digital Signature Algorithm (ECDSA)", + "homepage": "https://github.com/starkbank/ecdsa-php", + "license": "MIT", + "authors": [ + { + "name": "StarkBank", + "email": "developers@starkbank.com", + "homepage": "https://starkbank.com", + "role": "Developer" + } + ], + "require": { + "php" : ">=5.5" + }, + "autoload": { + "files": ["src/ellipticcurve.php"] + } +} diff --git a/vendor/starkbank/ecdsa/src/ecdsa.php b/vendor/starkbank/ecdsa/src/ecdsa.php new file mode 100644 index 00000000..10e33eb6 --- /dev/null +++ b/vendor/starkbank/ecdsa/src/ecdsa.php @@ -0,0 +1,24 @@ +openSslPrivateKey, OPENSSL_ALGO_SHA256); + return new Signature($signature); + } + + public static function verify ($message, $signature, $publicKey) { + $success = openssl_verify($message, $signature->toDer(), $publicKey->openSslPublicKey, OPENSSL_ALGO_SHA256); + if ($success == 1) { + return true; + } + return false; + } +} + +?> \ No newline at end of file diff --git a/vendor/starkbank/ecdsa/src/ellipticcurve.php b/vendor/starkbank/ecdsa/src/ellipticcurve.php new file mode 100644 index 00000000..d353cec7 --- /dev/null +++ b/vendor/starkbank/ecdsa/src/ellipticcurve.php @@ -0,0 +1,9 @@ + diff --git a/vendor/starkbank/ecdsa/src/privatekey.php b/vendor/starkbank/ecdsa/src/privatekey.php new file mode 100644 index 00000000..8d7797f9 --- /dev/null +++ b/vendor/starkbank/ecdsa/src/privatekey.php @@ -0,0 +1,81 @@ + "sha256", + "private_key_bits" => 2048, + "private_key_type" => OPENSSL_KEYTYPE_EC, + "curve_name" => $curve + ); + + $response = openssl_pkey_new($config); + + openssl_pkey_export($response, $openSslPrivateKey, null, $config); + + $openSslPrivateKey = openssl_pkey_get_private($openSslPrivateKey); + } + + $this->openSslPrivateKey = $openSslPrivateKey; + } + + function publicKey() { + $openSslPublicKey = openssl_pkey_get_details($this->openSslPrivateKey)["key"]; + + return new PublicKey($openSslPublicKey); + } + + function toString () { + return base64_encode($this->toDer()); + } + + function toDer () { + $pem = $this->toPem(); + + $lines = array(); + foreach(explode("\n", $pem) as $value) { + if (substr($value, 0, 5) !== "-----") { + array_push($lines, $value); + } + } + + $pem_data = join("", $lines); + + return base64_decode($pem_data); + } + + function toPem () { + openssl_pkey_export($this->openSslPrivateKey, $out, null); + return $out; + } + + static function fromPem ($str) { + $rebuilt = array(); + foreach(explode("\n", $str) as $line) { + $line = trim($line); + if (strlen($line) > 1) { + array_push($rebuilt, $line); + } + }; + $rebuilt = join("\n", $rebuilt) . "\n"; + return new PrivateKey(null, openssl_get_privatekey($rebuilt)); + } + + static function fromDer ($str) { + $pem_data = base64_encode($str); + $pem = "-----BEGIN EC PRIVATE KEY-----\n" . substr($pem_data, 0, 64) . "\n" . substr($pem_data, 64, 64) . "\n" . substr($pem_data, 128, 64) . "\n-----END EC PRIVATE KEY-----\n"; + return new PrivateKey(null, openssl_get_privatekey($pem)); + } + + static function fromString ($str) { + return PrivateKey::fromDer(base64_decode($str)); + } + +} + +?> \ No newline at end of file diff --git a/vendor/starkbank/ecdsa/src/publickey.php b/vendor/starkbank/ecdsa/src/publickey.php new file mode 100644 index 00000000..bfdcb03d --- /dev/null +++ b/vendor/starkbank/ecdsa/src/publickey.php @@ -0,0 +1,60 @@ +pem = $pem; + $this->openSslPublicKey = openssl_get_publickey($pem); + } + + function toString () { + return base64_encode($this->toDer()); + } + + function toDer () { + $pem = $this->toPem(); + + $lines = array(); + foreach(explode("\n", $pem) as $value) { + if (substr($value, 0, 5) !== "-----") { + array_push($lines, $value); + } + } + + $pem_data = join("", $lines); + + return base64_decode($pem_data); + } + + function toPem () { + return $this->pem; + } + + static function fromPem ($str) { + $rebuilt = array(); + foreach(explode("\n", $str) as $line) { + $line = trim($line); + if (strlen($line) > 1) { + array_push($rebuilt, $line); + } + }; + $rebuilt = join("\n", $rebuilt) . "\n"; + return new PublicKey($rebuilt); + } + + static function fromDer ($str) { + $pem_data = base64_encode($str); + $pem = "-----BEGIN PUBLIC KEY-----\n" . substr($pem_data, 0, 64) . "\n" . substr($pem_data, 64) . "\n-----END PUBLIC KEY-----\n"; + return new PublicKey($pem); + } + + static function fromString ($str) { + return PublicKey::fromDer(base64_decode($str)); + } + +} + +?> \ No newline at end of file diff --git a/vendor/starkbank/ecdsa/src/signature.php b/vendor/starkbank/ecdsa/src/signature.php new file mode 100644 index 00000000..aef40416 --- /dev/null +++ b/vendor/starkbank/ecdsa/src/signature.php @@ -0,0 +1,29 @@ +der = $der; + } + + function toDer () { + return $this->der; + } + + function toBase64 () { + return base64_encode($this->der); + } + + static function fromDer ($str) { + return new Signature($str); + } + + static function fromBase64 ($str) { + return new Signature(base64_decode($str)); + } +} + +?> \ No newline at end of file diff --git a/vendor/starkbank/ecdsa/src/utils/file.php b/vendor/starkbank/ecdsa/src/utils/file.php new file mode 100644 index 00000000..2b5a8494 --- /dev/null +++ b/vendor/starkbank/ecdsa/src/utils/file.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/vendor/symfony/css-selector/CHANGELOG.md b/vendor/symfony/css-selector/CHANGELOG.md new file mode 100644 index 00000000..c035d6b3 --- /dev/null +++ b/vendor/symfony/css-selector/CHANGELOG.md @@ -0,0 +1,23 @@ +CHANGELOG +========= + +6.3 +----- + + * Add support for `:scope` + +4.4.0 +----- + + * Added support for `*:only-of-type` + +2.8.0 +----- + + * Added the `CssSelectorConverter` class as a non-static API for the component. + * Deprecated the `CssSelector` static API of the component. + +2.1.0 +----- + + * none diff --git a/vendor/symfony/css-selector/CssSelectorConverter.php b/vendor/symfony/css-selector/CssSelectorConverter.php new file mode 100644 index 00000000..7120a295 --- /dev/null +++ b/vendor/symfony/css-selector/CssSelectorConverter.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector; + +use Symfony\Component\CssSelector\Parser\Shortcut\ClassParser; +use Symfony\Component\CssSelector\Parser\Shortcut\ElementParser; +use Symfony\Component\CssSelector\Parser\Shortcut\EmptyStringParser; +use Symfony\Component\CssSelector\Parser\Shortcut\HashParser; +use Symfony\Component\CssSelector\XPath\Extension\HtmlExtension; +use Symfony\Component\CssSelector\XPath\Translator; + +/** + * CssSelectorConverter is the main entry point of the component and can convert CSS + * selectors to XPath expressions. + * + * @author Christophe Coevoet + */ +class CssSelectorConverter +{ + private Translator $translator; + private array $cache; + + private static array $xmlCache = []; + private static array $htmlCache = []; + + /** + * @param bool $html Whether HTML support should be enabled. Disable it for XML documents + */ + public function __construct(bool $html = true) + { + $this->translator = new Translator(); + + if ($html) { + $this->translator->registerExtension(new HtmlExtension($this->translator)); + $this->cache = &self::$htmlCache; + } else { + $this->cache = &self::$xmlCache; + } + + $this->translator + ->registerParserShortcut(new EmptyStringParser()) + ->registerParserShortcut(new ElementParser()) + ->registerParserShortcut(new ClassParser()) + ->registerParserShortcut(new HashParser()) + ; + } + + /** + * Translates a CSS expression to its XPath equivalent. + * + * Optionally, a prefix can be added to the resulting XPath + * expression with the $prefix parameter. + */ + public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string + { + return $this->cache[$prefix][$cssExpr] ??= $this->translator->cssToXPath($cssExpr, $prefix); + } +} diff --git a/vendor/symfony/css-selector/Exception/ExceptionInterface.php b/vendor/symfony/css-selector/Exception/ExceptionInterface.php new file mode 100644 index 00000000..9e259006 --- /dev/null +++ b/vendor/symfony/css-selector/Exception/ExceptionInterface.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Exception; + +/** + * Interface for exceptions. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/vendor/symfony/css-selector/Exception/ExpressionErrorException.php b/vendor/symfony/css-selector/Exception/ExpressionErrorException.php new file mode 100644 index 00000000..fd5deeab --- /dev/null +++ b/vendor/symfony/css-selector/Exception/ExpressionErrorException.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Exception; + +/** + * ParseException is thrown when a CSS selector syntax is not valid. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + */ +class ExpressionErrorException extends ParseException +{ +} diff --git a/vendor/symfony/css-selector/Exception/InternalErrorException.php b/vendor/symfony/css-selector/Exception/InternalErrorException.php new file mode 100644 index 00000000..e60e5ed0 --- /dev/null +++ b/vendor/symfony/css-selector/Exception/InternalErrorException.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Exception; + +/** + * ParseException is thrown when a CSS selector syntax is not valid. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + */ +class InternalErrorException extends ParseException +{ +} diff --git a/vendor/symfony/css-selector/Exception/ParseException.php b/vendor/symfony/css-selector/Exception/ParseException.php new file mode 100644 index 00000000..3b0b0ee8 --- /dev/null +++ b/vendor/symfony/css-selector/Exception/ParseException.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Exception; + +/** + * ParseException is thrown when a CSS selector syntax is not valid. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Fabien Potencier + */ +class ParseException extends \Exception implements ExceptionInterface +{ +} diff --git a/vendor/symfony/css-selector/Exception/SyntaxErrorException.php b/vendor/symfony/css-selector/Exception/SyntaxErrorException.php new file mode 100644 index 00000000..5a9d8078 --- /dev/null +++ b/vendor/symfony/css-selector/Exception/SyntaxErrorException.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Exception; + +use Symfony\Component\CssSelector\Parser\Token; + +/** + * ParseException is thrown when a CSS selector syntax is not valid. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + */ +class SyntaxErrorException extends ParseException +{ + public static function unexpectedToken(string $expectedValue, Token $foundToken): self + { + return new self(sprintf('Expected %s, but %s found.', $expectedValue, $foundToken)); + } + + public static function pseudoElementFound(string $pseudoElement, string $unexpectedLocation): self + { + return new self(sprintf('Unexpected pseudo-element "::%s" found %s.', $pseudoElement, $unexpectedLocation)); + } + + public static function unclosedString(int $position): self + { + return new self(sprintf('Unclosed/invalid string at %s.', $position)); + } + + public static function nestedNot(): self + { + return new self('Got nested ::not().'); + } + + public static function notAtTheStartOfASelector(string $pseudoElement): self + { + return new self(sprintf('Got immediate child pseudo-element ":%s" not at the start of a selector', $pseudoElement)); + } + + public static function stringAsFunctionArgument(): self + { + return new self('String not allowed as function argument.'); + } +} diff --git a/vendor/symfony/css-selector/LICENSE b/vendor/symfony/css-selector/LICENSE new file mode 100644 index 00000000..0138f8f0 --- /dev/null +++ b/vendor/symfony/css-selector/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/css-selector/Node/AbstractNode.php b/vendor/symfony/css-selector/Node/AbstractNode.php new file mode 100644 index 00000000..d99e80a8 --- /dev/null +++ b/vendor/symfony/css-selector/Node/AbstractNode.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Abstract base node class. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +abstract class AbstractNode implements NodeInterface +{ + private string $nodeName; + + public function getNodeName(): string + { + return $this->nodeName ??= preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class); + } +} diff --git a/vendor/symfony/css-selector/Node/AttributeNode.php b/vendor/symfony/css-selector/Node/AttributeNode.php new file mode 100644 index 00000000..ba4df310 --- /dev/null +++ b/vendor/symfony/css-selector/Node/AttributeNode.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a "[| ]" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class AttributeNode extends AbstractNode +{ + private NodeInterface $selector; + private ?string $namespace; + private string $attribute; + private string $operator; + private ?string $value; + + public function __construct(NodeInterface $selector, ?string $namespace, string $attribute, string $operator, ?string $value) + { + $this->selector = $selector; + $this->namespace = $namespace; + $this->attribute = $attribute; + $this->operator = $operator; + $this->value = $value; + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getNamespace(): ?string + { + return $this->namespace; + } + + public function getAttribute(): string + { + return $this->attribute; + } + + public function getOperator(): string + { + return $this->operator; + } + + public function getValue(): ?string + { + return $this->value; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0)); + } + + public function __toString(): string + { + $attribute = $this->namespace ? $this->namespace.'|'.$this->attribute : $this->attribute; + + return 'exists' === $this->operator + ? sprintf('%s[%s[%s]]', $this->getNodeName(), $this->selector, $attribute) + : sprintf("%s[%s[%s %s '%s']]", $this->getNodeName(), $this->selector, $attribute, $this->operator, $this->value); + } +} diff --git a/vendor/symfony/css-selector/Node/ClassNode.php b/vendor/symfony/css-selector/Node/ClassNode.php new file mode 100644 index 00000000..71744587 --- /dev/null +++ b/vendor/symfony/css-selector/Node/ClassNode.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a "." node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class ClassNode extends AbstractNode +{ + private NodeInterface $selector; + private string $name; + + public function __construct(NodeInterface $selector, string $name) + { + $this->selector = $selector; + $this->name = $name; + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getName(): string + { + return $this->name; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0)); + } + + public function __toString(): string + { + return sprintf('%s[%s.%s]', $this->getNodeName(), $this->selector, $this->name); + } +} diff --git a/vendor/symfony/css-selector/Node/CombinedSelectorNode.php b/vendor/symfony/css-selector/Node/CombinedSelectorNode.php new file mode 100644 index 00000000..19fecb70 --- /dev/null +++ b/vendor/symfony/css-selector/Node/CombinedSelectorNode.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a combined node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class CombinedSelectorNode extends AbstractNode +{ + private NodeInterface $selector; + private string $combinator; + private NodeInterface $subSelector; + + public function __construct(NodeInterface $selector, string $combinator, NodeInterface $subSelector) + { + $this->selector = $selector; + $this->combinator = $combinator; + $this->subSelector = $subSelector; + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getCombinator(): string + { + return $this->combinator; + } + + public function getSubSelector(): NodeInterface + { + return $this->subSelector; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity()); + } + + public function __toString(): string + { + $combinator = ' ' === $this->combinator ? '' : $this->combinator; + + return sprintf('%s[%s %s %s]', $this->getNodeName(), $this->selector, $combinator, $this->subSelector); + } +} diff --git a/vendor/symfony/css-selector/Node/ElementNode.php b/vendor/symfony/css-selector/Node/ElementNode.php new file mode 100644 index 00000000..76d2078e --- /dev/null +++ b/vendor/symfony/css-selector/Node/ElementNode.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a "|" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class ElementNode extends AbstractNode +{ + private ?string $namespace; + private ?string $element; + + public function __construct(?string $namespace = null, ?string $element = null) + { + $this->namespace = $namespace; + $this->element = $element; + } + + public function getNamespace(): ?string + { + return $this->namespace; + } + + public function getElement(): ?string + { + return $this->element; + } + + public function getSpecificity(): Specificity + { + return new Specificity(0, 0, $this->element ? 1 : 0); + } + + public function __toString(): string + { + $element = $this->element ?: '*'; + + return sprintf('%s[%s]', $this->getNodeName(), $this->namespace ? $this->namespace.'|'.$element : $element); + } +} diff --git a/vendor/symfony/css-selector/Node/FunctionNode.php b/vendor/symfony/css-selector/Node/FunctionNode.php new file mode 100644 index 00000000..938a82b1 --- /dev/null +++ b/vendor/symfony/css-selector/Node/FunctionNode.php @@ -0,0 +1,71 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +use Symfony\Component\CssSelector\Parser\Token; + +/** + * Represents a ":()" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class FunctionNode extends AbstractNode +{ + private NodeInterface $selector; + private string $name; + private array $arguments; + + /** + * @param Token[] $arguments + */ + public function __construct(NodeInterface $selector, string $name, array $arguments = []) + { + $this->selector = $selector; + $this->name = strtolower($name); + $this->arguments = $arguments; + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getName(): string + { + return $this->name; + } + + /** + * @return Token[] + */ + public function getArguments(): array + { + return $this->arguments; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0)); + } + + public function __toString(): string + { + $arguments = implode(', ', array_map(fn (Token $token) => "'".$token->getValue()."'", $this->arguments)); + + return sprintf('%s[%s:%s(%s)]', $this->getNodeName(), $this->selector, $this->name, $arguments ? '['.$arguments.']' : ''); + } +} diff --git a/vendor/symfony/css-selector/Node/HashNode.php b/vendor/symfony/css-selector/Node/HashNode.php new file mode 100644 index 00000000..3af8e847 --- /dev/null +++ b/vendor/symfony/css-selector/Node/HashNode.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a "#" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class HashNode extends AbstractNode +{ + private NodeInterface $selector; + private string $id; + + public function __construct(NodeInterface $selector, string $id) + { + $this->selector = $selector; + $this->id = $id; + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getId(): string + { + return $this->id; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus(new Specificity(1, 0, 0)); + } + + public function __toString(): string + { + return sprintf('%s[%s#%s]', $this->getNodeName(), $this->selector, $this->id); + } +} diff --git a/vendor/symfony/css-selector/Node/NegationNode.php b/vendor/symfony/css-selector/Node/NegationNode.php new file mode 100644 index 00000000..f8067583 --- /dev/null +++ b/vendor/symfony/css-selector/Node/NegationNode.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a ":not()" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class NegationNode extends AbstractNode +{ + private NodeInterface $selector; + private NodeInterface $subSelector; + + public function __construct(NodeInterface $selector, NodeInterface $subSelector) + { + $this->selector = $selector; + $this->subSelector = $subSelector; + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getSubSelector(): NodeInterface + { + return $this->subSelector; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity()); + } + + public function __toString(): string + { + return sprintf('%s[%s:not(%s)]', $this->getNodeName(), $this->selector, $this->subSelector); + } +} diff --git a/vendor/symfony/css-selector/Node/NodeInterface.php b/vendor/symfony/css-selector/Node/NodeInterface.php new file mode 100644 index 00000000..7d541f9c --- /dev/null +++ b/vendor/symfony/css-selector/Node/NodeInterface.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Interface for nodes. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +interface NodeInterface extends \Stringable +{ + public function getNodeName(): string; + + public function getSpecificity(): Specificity; +} diff --git a/vendor/symfony/css-selector/Node/PseudoNode.php b/vendor/symfony/css-selector/Node/PseudoNode.php new file mode 100644 index 00000000..c21cd6e9 --- /dev/null +++ b/vendor/symfony/css-selector/Node/PseudoNode.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a ":" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class PseudoNode extends AbstractNode +{ + private NodeInterface $selector; + private string $identifier; + + public function __construct(NodeInterface $selector, string $identifier) + { + $this->selector = $selector; + $this->identifier = strtolower($identifier); + } + + public function getSelector(): NodeInterface + { + return $this->selector; + } + + public function getIdentifier(): string + { + return $this->identifier; + } + + public function getSpecificity(): Specificity + { + return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0)); + } + + public function __toString(): string + { + return sprintf('%s[%s:%s]', $this->getNodeName(), $this->selector, $this->identifier); + } +} diff --git a/vendor/symfony/css-selector/Node/SelectorNode.php b/vendor/symfony/css-selector/Node/SelectorNode.php new file mode 100644 index 00000000..2318b2bf --- /dev/null +++ b/vendor/symfony/css-selector/Node/SelectorNode.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a "(::|:)" node. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class SelectorNode extends AbstractNode +{ + private NodeInterface $tree; + private ?string $pseudoElement; + + public function __construct(NodeInterface $tree, ?string $pseudoElement = null) + { + $this->tree = $tree; + $this->pseudoElement = $pseudoElement ? strtolower($pseudoElement) : null; + } + + public function getTree(): NodeInterface + { + return $this->tree; + } + + public function getPseudoElement(): ?string + { + return $this->pseudoElement; + } + + public function getSpecificity(): Specificity + { + return $this->tree->getSpecificity()->plus(new Specificity(0, 0, $this->pseudoElement ? 1 : 0)); + } + + public function __toString(): string + { + return sprintf('%s[%s%s]', $this->getNodeName(), $this->tree, $this->pseudoElement ? '::'.$this->pseudoElement : ''); + } +} diff --git a/vendor/symfony/css-selector/Node/Specificity.php b/vendor/symfony/css-selector/Node/Specificity.php new file mode 100644 index 00000000..bb8e5e34 --- /dev/null +++ b/vendor/symfony/css-selector/Node/Specificity.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Node; + +/** + * Represents a node specificity. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @see http://www.w3.org/TR/selectors/#specificity + * + * @author Jean-François Simon + * + * @internal + */ +class Specificity +{ + public const A_FACTOR = 100; + public const B_FACTOR = 10; + public const C_FACTOR = 1; + + private int $a; + private int $b; + private int $c; + + public function __construct(int $a, int $b, int $c) + { + $this->a = $a; + $this->b = $b; + $this->c = $c; + } + + public function plus(self $specificity): self + { + return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c); + } + + public function getValue(): int + { + return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR; + } + + /** + * Returns -1 if the object specificity is lower than the argument, + * 0 if they are equal, and 1 if the argument is lower. + */ + public function compareTo(self $specificity): int + { + if ($this->a !== $specificity->a) { + return $this->a > $specificity->a ? 1 : -1; + } + + if ($this->b !== $specificity->b) { + return $this->b > $specificity->b ? 1 : -1; + } + + if ($this->c !== $specificity->c) { + return $this->c > $specificity->c ? 1 : -1; + } + + return 0; + } +} diff --git a/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php b/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php new file mode 100644 index 00000000..cc01d1e6 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector comment handler. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class CommentHandler implements HandlerInterface +{ + public function handle(Reader $reader, TokenStream $stream): bool + { + if ('/*' !== $reader->getSubstring(2)) { + return false; + } + + $offset = $reader->getOffset('*/'); + + if (false === $offset) { + $reader->moveToEnd(); + } else { + $reader->moveForward($offset + 2); + } + + return true; + } +} diff --git a/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php b/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php new file mode 100644 index 00000000..9ec714d5 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector handler interface. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +interface HandlerInterface +{ + public function handle(Reader $reader, TokenStream $stream): bool; +} diff --git a/vendor/symfony/css-selector/Parser/Handler/HashHandler.php b/vendor/symfony/css-selector/Parser/Handler/HashHandler.php new file mode 100644 index 00000000..b29042f5 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/HashHandler.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\Token; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector comment handler. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class HashHandler implements HandlerInterface +{ + private TokenizerPatterns $patterns; + private TokenizerEscaping $escaping; + + public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping) + { + $this->patterns = $patterns; + $this->escaping = $escaping; + } + + public function handle(Reader $reader, TokenStream $stream): bool + { + $match = $reader->findPattern($this->patterns->getHashPattern()); + + if (!$match) { + return false; + } + + $value = $this->escaping->escapeUnicode($match[1]); + $stream->push(new Token(Token::TYPE_HASH, $value, $reader->getPosition())); + $reader->moveForward(\strlen($match[0])); + + return true; + } +} diff --git a/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php b/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php new file mode 100644 index 00000000..25c0761e --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\Token; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector comment handler. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class IdentifierHandler implements HandlerInterface +{ + private TokenizerPatterns $patterns; + private TokenizerEscaping $escaping; + + public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping) + { + $this->patterns = $patterns; + $this->escaping = $escaping; + } + + public function handle(Reader $reader, TokenStream $stream): bool + { + $match = $reader->findPattern($this->patterns->getIdentifierPattern()); + + if (!$match) { + return false; + } + + $value = $this->escaping->escapeUnicode($match[0]); + $stream->push(new Token(Token::TYPE_IDENTIFIER, $value, $reader->getPosition())); + $reader->moveForward(\strlen($match[0])); + + return true; + } +} diff --git a/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php b/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php new file mode 100644 index 00000000..e3eb7afe --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\Token; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector comment handler. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class NumberHandler implements HandlerInterface +{ + private TokenizerPatterns $patterns; + + public function __construct(TokenizerPatterns $patterns) + { + $this->patterns = $patterns; + } + + public function handle(Reader $reader, TokenStream $stream): bool + { + $match = $reader->findPattern($this->patterns->getNumberPattern()); + + if (!$match) { + return false; + } + + $stream->push(new Token(Token::TYPE_NUMBER, $match[0], $reader->getPosition())); + $reader->moveForward(\strlen($match[0])); + + return true; + } +} diff --git a/vendor/symfony/css-selector/Parser/Handler/StringHandler.php b/vendor/symfony/css-selector/Parser/Handler/StringHandler.php new file mode 100644 index 00000000..5fd44df2 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/StringHandler.php @@ -0,0 +1,74 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Exception\InternalErrorException; +use Symfony\Component\CssSelector\Exception\SyntaxErrorException; +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\Token; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping; +use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector comment handler. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class StringHandler implements HandlerInterface +{ + private TokenizerPatterns $patterns; + private TokenizerEscaping $escaping; + + public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping) + { + $this->patterns = $patterns; + $this->escaping = $escaping; + } + + public function handle(Reader $reader, TokenStream $stream): bool + { + $quote = $reader->getSubstring(1); + + if (!\in_array($quote, ["'", '"'])) { + return false; + } + + $reader->moveForward(1); + $match = $reader->findPattern($this->patterns->getQuotedStringPattern($quote)); + + if (!$match) { + throw new InternalErrorException(sprintf('Should have found at least an empty match at %d.', $reader->getPosition())); + } + + // check unclosed strings + if (\strlen($match[0]) === $reader->getRemainingLength()) { + throw SyntaxErrorException::unclosedString($reader->getPosition() - 1); + } + + // check quotes pairs validity + if ($quote !== $reader->getSubstring(1, \strlen($match[0]))) { + throw SyntaxErrorException::unclosedString($reader->getPosition() - 1); + } + + $string = $this->escaping->escapeUnicodeAndNewLine($match[0]); + $stream->push(new Token(Token::TYPE_STRING, $string, $reader->getPosition())); + $reader->moveForward(\strlen($match[0]) + 1); + + return true; + } +} diff --git a/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php b/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php new file mode 100644 index 00000000..eb41c3f7 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Handler; + +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\Token; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector whitespace handler. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class WhitespaceHandler implements HandlerInterface +{ + public function handle(Reader $reader, TokenStream $stream): bool + { + $match = $reader->findPattern('~^[ \t\r\n\f]+~'); + + if (false === $match) { + return false; + } + + $stream->push(new Token(Token::TYPE_WHITESPACE, $match[0], $reader->getPosition())); + $reader->moveForward(\strlen($match[0])); + + return true; + } +} diff --git a/vendor/symfony/css-selector/Parser/Parser.php b/vendor/symfony/css-selector/Parser/Parser.php new file mode 100644 index 00000000..309c9b52 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Parser.php @@ -0,0 +1,359 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser; + +use Symfony\Component\CssSelector\Exception\SyntaxErrorException; +use Symfony\Component\CssSelector\Node; +use Symfony\Component\CssSelector\Parser\Tokenizer\Tokenizer; + +/** + * CSS selector parser. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/scrapy/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class Parser implements ParserInterface +{ + private Tokenizer $tokenizer; + + public function __construct(?Tokenizer $tokenizer = null) + { + $this->tokenizer = $tokenizer ?? new Tokenizer(); + } + + public function parse(string $source): array + { + $reader = new Reader($source); + $stream = $this->tokenizer->tokenize($reader); + + return $this->parseSelectorList($stream); + } + + /** + * Parses the arguments for ":nth-child()" and friends. + * + * @param Token[] $tokens + * + * @throws SyntaxErrorException + */ + public static function parseSeries(array $tokens): array + { + foreach ($tokens as $token) { + if ($token->isString()) { + throw SyntaxErrorException::stringAsFunctionArgument(); + } + } + + $joined = trim(implode('', array_map(fn (Token $token) => $token->getValue(), $tokens))); + + $int = function ($string) { + if (!is_numeric($string)) { + throw SyntaxErrorException::stringAsFunctionArgument(); + } + + return (int) $string; + }; + + switch (true) { + case 'odd' === $joined: + return [2, 1]; + case 'even' === $joined: + return [2, 0]; + case 'n' === $joined: + return [1, 0]; + case !str_contains($joined, 'n'): + return [0, $int($joined)]; + } + + $split = explode('n', $joined); + $first = $split[0] ?? null; + + return [ + $first ? ('-' === $first || '+' === $first ? $int($first.'1') : $int($first)) : 1, + isset($split[1]) && $split[1] ? $int($split[1]) : 0, + ]; + } + + private function parseSelectorList(TokenStream $stream): array + { + $stream->skipWhitespace(); + $selectors = []; + + while (true) { + $selectors[] = $this->parserSelectorNode($stream); + + if ($stream->getPeek()->isDelimiter([','])) { + $stream->getNext(); + $stream->skipWhitespace(); + } else { + break; + } + } + + return $selectors; + } + + private function parserSelectorNode(TokenStream $stream): Node\SelectorNode + { + [$result, $pseudoElement] = $this->parseSimpleSelector($stream); + + while (true) { + $stream->skipWhitespace(); + $peek = $stream->getPeek(); + + if ($peek->isFileEnd() || $peek->isDelimiter([','])) { + break; + } + + if (null !== $pseudoElement) { + throw SyntaxErrorException::pseudoElementFound($pseudoElement, 'not at the end of a selector'); + } + + if ($peek->isDelimiter(['+', '>', '~'])) { + $combinator = $stream->getNext()->getValue(); + $stream->skipWhitespace(); + } else { + $combinator = ' '; + } + + [$nextSelector, $pseudoElement] = $this->parseSimpleSelector($stream); + $result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector); + } + + return new Node\SelectorNode($result, $pseudoElement); + } + + /** + * Parses next simple node (hash, class, pseudo, negation). + * + * @throws SyntaxErrorException + */ + private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = false): array + { + $stream->skipWhitespace(); + + $selectorStart = \count($stream->getUsed()); + $result = $this->parseElementNode($stream); + $pseudoElement = null; + + while (true) { + $peek = $stream->getPeek(); + if ($peek->isWhitespace() + || $peek->isFileEnd() + || $peek->isDelimiter([',', '+', '>', '~']) + || ($insideNegation && $peek->isDelimiter([')'])) + ) { + break; + } + + if (null !== $pseudoElement) { + throw SyntaxErrorException::pseudoElementFound($pseudoElement, 'not at the end of a selector'); + } + + if ($peek->isHash()) { + $result = new Node\HashNode($result, $stream->getNext()->getValue()); + } elseif ($peek->isDelimiter(['.'])) { + $stream->getNext(); + $result = new Node\ClassNode($result, $stream->getNextIdentifier()); + } elseif ($peek->isDelimiter(['['])) { + $stream->getNext(); + $result = $this->parseAttributeNode($result, $stream); + } elseif ($peek->isDelimiter([':'])) { + $stream->getNext(); + + if ($stream->getPeek()->isDelimiter([':'])) { + $stream->getNext(); + $pseudoElement = $stream->getNextIdentifier(); + + continue; + } + + $identifier = $stream->getNextIdentifier(); + if (\in_array(strtolower($identifier), ['first-line', 'first-letter', 'before', 'after'])) { + // Special case: CSS 2.1 pseudo-elements can have a single ':'. + // Any new pseudo-element must have two. + $pseudoElement = $identifier; + + continue; + } + + if (!$stream->getPeek()->isDelimiter(['('])) { + $result = new Node\PseudoNode($result, $identifier); + if ('Pseudo[Element[*]:scope]' === $result->__toString()) { + $used = \count($stream->getUsed()); + if (!(2 === $used + || 3 === $used && $stream->getUsed()[0]->isWhiteSpace() + || $used >= 3 && $stream->getUsed()[$used - 3]->isDelimiter([',']) + || $used >= 4 + && $stream->getUsed()[$used - 3]->isWhiteSpace() + && $stream->getUsed()[$used - 4]->isDelimiter([',']) + )) { + throw SyntaxErrorException::notAtTheStartOfASelector('scope'); + } + } + continue; + } + + $stream->getNext(); + $stream->skipWhitespace(); + + if ('not' === strtolower($identifier)) { + if ($insideNegation) { + throw SyntaxErrorException::nestedNot(); + } + + [$argument, $argumentPseudoElement] = $this->parseSimpleSelector($stream, true); + $next = $stream->getNext(); + + if (null !== $argumentPseudoElement) { + throw SyntaxErrorException::pseudoElementFound($argumentPseudoElement, 'inside ::not()'); + } + + if (!$next->isDelimiter([')'])) { + throw SyntaxErrorException::unexpectedToken('")"', $next); + } + + $result = new Node\NegationNode($result, $argument); + } else { + $arguments = []; + $next = null; + + while (true) { + $stream->skipWhitespace(); + $next = $stream->getNext(); + + if ($next->isIdentifier() + || $next->isString() + || $next->isNumber() + || $next->isDelimiter(['+', '-']) + ) { + $arguments[] = $next; + } elseif ($next->isDelimiter([')'])) { + break; + } else { + throw SyntaxErrorException::unexpectedToken('an argument', $next); + } + } + + if (!$arguments) { + throw SyntaxErrorException::unexpectedToken('at least one argument', $next); + } + + $result = new Node\FunctionNode($result, $identifier, $arguments); + } + } else { + throw SyntaxErrorException::unexpectedToken('selector', $peek); + } + } + + if (\count($stream->getUsed()) === $selectorStart) { + throw SyntaxErrorException::unexpectedToken('selector', $stream->getPeek()); + } + + return [$result, $pseudoElement]; + } + + private function parseElementNode(TokenStream $stream): Node\ElementNode + { + $peek = $stream->getPeek(); + + if ($peek->isIdentifier() || $peek->isDelimiter(['*'])) { + if ($peek->isIdentifier()) { + $namespace = $stream->getNext()->getValue(); + } else { + $stream->getNext(); + $namespace = null; + } + + if ($stream->getPeek()->isDelimiter(['|'])) { + $stream->getNext(); + $element = $stream->getNextIdentifierOrStar(); + } else { + $element = $namespace; + $namespace = null; + } + } else { + $element = $namespace = null; + } + + return new Node\ElementNode($namespace, $element); + } + + private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream): Node\AttributeNode + { + $stream->skipWhitespace(); + $attribute = $stream->getNextIdentifierOrStar(); + + if (null === $attribute && !$stream->getPeek()->isDelimiter(['|'])) { + throw SyntaxErrorException::unexpectedToken('"|"', $stream->getPeek()); + } + + if ($stream->getPeek()->isDelimiter(['|'])) { + $stream->getNext(); + + if ($stream->getPeek()->isDelimiter(['='])) { + $namespace = null; + $stream->getNext(); + $operator = '|='; + } else { + $namespace = $attribute; + $attribute = $stream->getNextIdentifier(); + $operator = null; + } + } else { + $namespace = $operator = null; + } + + if (null === $operator) { + $stream->skipWhitespace(); + $next = $stream->getNext(); + + if ($next->isDelimiter([']'])) { + return new Node\AttributeNode($selector, $namespace, $attribute, 'exists', null); + } elseif ($next->isDelimiter(['='])) { + $operator = '='; + } elseif ($next->isDelimiter(['^', '$', '*', '~', '|', '!']) + && $stream->getPeek()->isDelimiter(['=']) + ) { + $operator = $next->getValue().'='; + $stream->getNext(); + } else { + throw SyntaxErrorException::unexpectedToken('operator', $next); + } + } + + $stream->skipWhitespace(); + $value = $stream->getNext(); + + if ($value->isNumber()) { + // if the value is a number, it's casted into a string + $value = new Token(Token::TYPE_STRING, (string) $value->getValue(), $value->getPosition()); + } + + if (!($value->isIdentifier() || $value->isString())) { + throw SyntaxErrorException::unexpectedToken('string or identifier', $value); + } + + $stream->skipWhitespace(); + $next = $stream->getNext(); + + if (!$next->isDelimiter([']'])) { + throw SyntaxErrorException::unexpectedToken('"]"', $next); + } + + return new Node\AttributeNode($selector, $namespace, $attribute, $operator, $value->getValue()); + } +} diff --git a/vendor/symfony/css-selector/Parser/ParserInterface.php b/vendor/symfony/css-selector/Parser/ParserInterface.php new file mode 100644 index 00000000..51c3d935 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/ParserInterface.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser; + +use Symfony\Component\CssSelector\Node\SelectorNode; + +/** + * CSS selector parser interface. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +interface ParserInterface +{ + /** + * Parses given selector source into an array of tokens. + * + * @return SelectorNode[] + */ + public function parse(string $source): array; +} diff --git a/vendor/symfony/css-selector/Parser/Reader.php b/vendor/symfony/css-selector/Parser/Reader.php new file mode 100644 index 00000000..7f6ae7a6 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Reader.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser; + +/** + * CSS selector reader. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class Reader +{ + private string $source; + private int $length; + private int $position = 0; + + public function __construct(string $source) + { + $this->source = $source; + $this->length = \strlen($source); + } + + public function isEOF(): bool + { + return $this->position >= $this->length; + } + + public function getPosition(): int + { + return $this->position; + } + + public function getRemainingLength(): int + { + return $this->length - $this->position; + } + + public function getSubstring(int $length, int $offset = 0): string + { + return substr($this->source, $this->position + $offset, $length); + } + + /** + * @return int|false + */ + public function getOffset(string $string): int|bool + { + $position = strpos($this->source, $string, $this->position); + + return false === $position ? false : $position - $this->position; + } + + public function findPattern(string $pattern): array|false + { + $source = substr($this->source, $this->position); + + if (preg_match($pattern, $source, $matches)) { + return $matches; + } + + return false; + } + + public function moveForward(int $length): void + { + $this->position += $length; + } + + public function moveToEnd(): void + { + $this->position = $this->length; + } +} diff --git a/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php b/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php new file mode 100644 index 00000000..f0ce6118 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Shortcut; + +use Symfony\Component\CssSelector\Node\ClassNode; +use Symfony\Component\CssSelector\Node\ElementNode; +use Symfony\Component\CssSelector\Node\SelectorNode; +use Symfony\Component\CssSelector\Parser\ParserInterface; + +/** + * CSS selector class parser shortcut. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class ClassParser implements ParserInterface +{ + public function parse(string $source): array + { + // Matches an optional namespace, optional element, and required class + // $source = 'test|input.ab6bd_field'; + // $matches = array (size=4) + // 0 => string 'test|input.ab6bd_field' (length=22) + // 1 => string 'test' (length=4) + // 2 => string 'input' (length=5) + // 3 => string 'ab6bd_field' (length=11) + if (preg_match('/^(?:([a-z]++)\|)?+([\w-]++|\*)?+\.([\w-]++)$/i', trim($source), $matches)) { + return [ + new SelectorNode(new ClassNode(new ElementNode($matches[1] ?: null, $matches[2] ?: null), $matches[3])), + ]; + } + + return []; + } +} diff --git a/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php b/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php new file mode 100644 index 00000000..a448e4a8 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Shortcut; + +use Symfony\Component\CssSelector\Node\ElementNode; +use Symfony\Component\CssSelector\Node\SelectorNode; +use Symfony\Component\CssSelector\Parser\ParserInterface; + +/** + * CSS selector element parser shortcut. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class ElementParser implements ParserInterface +{ + public function parse(string $source): array + { + // Matches an optional namespace, required element or `*` + // $source = 'testns|testel'; + // $matches = array (size=3) + // 0 => string 'testns|testel' (length=13) + // 1 => string 'testns' (length=6) + // 2 => string 'testel' (length=6) + if (preg_match('/^(?:([a-z]++)\|)?([\w-]++|\*)$/i', trim($source), $matches)) { + return [new SelectorNode(new ElementNode($matches[1] ?: null, $matches[2]))]; + } + + return []; + } +} diff --git a/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php b/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php new file mode 100644 index 00000000..a6391912 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Shortcut; + +use Symfony\Component\CssSelector\Node\ElementNode; +use Symfony\Component\CssSelector\Node\SelectorNode; +use Symfony\Component\CssSelector\Parser\ParserInterface; + +/** + * CSS selector class parser shortcut. + * + * This shortcut ensure compatibility with previous version. + * - The parser fails to parse an empty string. + * - In the previous version, an empty string matches each tags. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class EmptyStringParser implements ParserInterface +{ + public function parse(string $source): array + { + // Matches an empty string + if ('' == $source) { + return [new SelectorNode(new ElementNode(null, '*'))]; + } + + return []; + } +} diff --git a/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php b/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php new file mode 100644 index 00000000..6683126a --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Shortcut; + +use Symfony\Component\CssSelector\Node\ElementNode; +use Symfony\Component\CssSelector\Node\HashNode; +use Symfony\Component\CssSelector\Node\SelectorNode; +use Symfony\Component\CssSelector\Parser\ParserInterface; + +/** + * CSS selector hash parser shortcut. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class HashParser implements ParserInterface +{ + public function parse(string $source): array + { + // Matches an optional namespace, optional element, and required id + // $source = 'test|input#ab6bd_field'; + // $matches = array (size=4) + // 0 => string 'test|input#ab6bd_field' (length=22) + // 1 => string 'test' (length=4) + // 2 => string 'input' (length=5) + // 3 => string 'ab6bd_field' (length=11) + if (preg_match('/^(?:([a-z]++)\|)?+([\w-]++|\*)?+#([\w-]++)$/i', trim($source), $matches)) { + return [ + new SelectorNode(new HashNode(new ElementNode($matches[1] ?: null, $matches[2] ?: null), $matches[3])), + ]; + } + + return []; + } +} diff --git a/vendor/symfony/css-selector/Parser/Token.php b/vendor/symfony/css-selector/Parser/Token.php new file mode 100644 index 00000000..b50441a8 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Token.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser; + +/** + * CSS selector token. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class Token +{ + public const TYPE_FILE_END = 'eof'; + public const TYPE_DELIMITER = 'delimiter'; + public const TYPE_WHITESPACE = 'whitespace'; + public const TYPE_IDENTIFIER = 'identifier'; + public const TYPE_HASH = 'hash'; + public const TYPE_NUMBER = 'number'; + public const TYPE_STRING = 'string'; + + private ?string $type; + private ?string $value; + private ?int $position; + + public function __construct(?string $type, ?string $value, ?int $position) + { + $this->type = $type; + $this->value = $value; + $this->position = $position; + } + + public function getType(): ?int + { + return $this->type; + } + + public function getValue(): ?string + { + return $this->value; + } + + public function getPosition(): ?int + { + return $this->position; + } + + public function isFileEnd(): bool + { + return self::TYPE_FILE_END === $this->type; + } + + public function isDelimiter(array $values = []): bool + { + if (self::TYPE_DELIMITER !== $this->type) { + return false; + } + + if (!$values) { + return true; + } + + return \in_array($this->value, $values); + } + + public function isWhitespace(): bool + { + return self::TYPE_WHITESPACE === $this->type; + } + + public function isIdentifier(): bool + { + return self::TYPE_IDENTIFIER === $this->type; + } + + public function isHash(): bool + { + return self::TYPE_HASH === $this->type; + } + + public function isNumber(): bool + { + return self::TYPE_NUMBER === $this->type; + } + + public function isString(): bool + { + return self::TYPE_STRING === $this->type; + } + + public function __toString(): string + { + if ($this->value) { + return sprintf('<%s "%s" at %s>', $this->type, $this->value, $this->position); + } + + return sprintf('<%s at %s>', $this->type, $this->position); + } +} diff --git a/vendor/symfony/css-selector/Parser/TokenStream.php b/vendor/symfony/css-selector/Parser/TokenStream.php new file mode 100644 index 00000000..8b72d5db --- /dev/null +++ b/vendor/symfony/css-selector/Parser/TokenStream.php @@ -0,0 +1,156 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser; + +use Symfony\Component\CssSelector\Exception\InternalErrorException; +use Symfony\Component\CssSelector\Exception\SyntaxErrorException; + +/** + * CSS selector token stream. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class TokenStream +{ + /** + * @var Token[] + */ + private array $tokens = []; + + /** + * @var Token[] + */ + private array $used = []; + + private int $cursor = 0; + private ?Token $peeked; + private bool $peeking = false; + + /** + * Pushes a token. + * + * @return $this + */ + public function push(Token $token): static + { + $this->tokens[] = $token; + + return $this; + } + + /** + * Freezes stream. + * + * @return $this + */ + public function freeze(): static + { + return $this; + } + + /** + * Returns next token. + * + * @throws InternalErrorException If there is no more token + */ + public function getNext(): Token + { + if ($this->peeking) { + $this->peeking = false; + $this->used[] = $this->peeked; + + return $this->peeked; + } + + if (!isset($this->tokens[$this->cursor])) { + throw new InternalErrorException('Unexpected token stream end.'); + } + + return $this->tokens[$this->cursor++]; + } + + /** + * Returns peeked token. + */ + public function getPeek(): Token + { + if (!$this->peeking) { + $this->peeked = $this->getNext(); + $this->peeking = true; + } + + return $this->peeked; + } + + /** + * Returns used tokens. + * + * @return Token[] + */ + public function getUsed(): array + { + return $this->used; + } + + /** + * Returns next identifier token. + * + * @throws SyntaxErrorException If next token is not an identifier + */ + public function getNextIdentifier(): string + { + $next = $this->getNext(); + + if (!$next->isIdentifier()) { + throw SyntaxErrorException::unexpectedToken('identifier', $next); + } + + return $next->getValue(); + } + + /** + * Returns next identifier or null if star delimiter token is found. + * + * @throws SyntaxErrorException If next token is not an identifier or a star delimiter + */ + public function getNextIdentifierOrStar(): ?string + { + $next = $this->getNext(); + + if ($next->isIdentifier()) { + return $next->getValue(); + } + + if ($next->isDelimiter(['*'])) { + return null; + } + + throw SyntaxErrorException::unexpectedToken('identifier or "*"', $next); + } + + /** + * Skips next whitespace if any. + */ + public function skipWhitespace(): void + { + $peek = $this->getPeek(); + + if ($peek->isWhitespace()) { + $this->getNext(); + } + } +} diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php b/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php new file mode 100644 index 00000000..35c96a48 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Tokenizer; + +use Symfony\Component\CssSelector\Parser\Handler; +use Symfony\Component\CssSelector\Parser\Reader; +use Symfony\Component\CssSelector\Parser\Token; +use Symfony\Component\CssSelector\Parser\TokenStream; + +/** + * CSS selector tokenizer. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class Tokenizer +{ + /** + * @var Handler\HandlerInterface[] + */ + private array $handlers; + + public function __construct() + { + $patterns = new TokenizerPatterns(); + $escaping = new TokenizerEscaping($patterns); + + $this->handlers = [ + new Handler\WhitespaceHandler(), + new Handler\IdentifierHandler($patterns, $escaping), + new Handler\HashHandler($patterns, $escaping), + new Handler\StringHandler($patterns, $escaping), + new Handler\NumberHandler($patterns), + new Handler\CommentHandler(), + ]; + } + + /** + * Tokenize selector source code. + */ + public function tokenize(Reader $reader): TokenStream + { + $stream = new TokenStream(); + + while (!$reader->isEOF()) { + foreach ($this->handlers as $handler) { + if ($handler->handle($reader, $stream)) { + continue 2; + } + } + + $stream->push(new Token(Token::TYPE_DELIMITER, $reader->getSubstring(1), $reader->getPosition())); + $reader->moveForward(1); + } + + return $stream + ->push(new Token(Token::TYPE_FILE_END, null, $reader->getPosition())) + ->freeze(); + } +} diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php new file mode 100644 index 00000000..8c4b9f74 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Tokenizer; + +/** + * CSS selector tokenizer escaping applier. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class TokenizerEscaping +{ + private TokenizerPatterns $patterns; + + public function __construct(TokenizerPatterns $patterns) + { + $this->patterns = $patterns; + } + + public function escapeUnicode(string $value): string + { + $value = $this->replaceUnicodeSequences($value); + + return preg_replace($this->patterns->getSimpleEscapePattern(), '$1', $value); + } + + public function escapeUnicodeAndNewLine(string $value): string + { + $value = preg_replace($this->patterns->getNewLineEscapePattern(), '', $value); + + return $this->escapeUnicode($value); + } + + private function replaceUnicodeSequences(string $value): string + { + return preg_replace_callback($this->patterns->getUnicodeEscapePattern(), function ($match) { + $c = hexdec($match[1]); + + if (0x80 > $c %= 0x200000) { + return \chr($c); + } + if (0x800 > $c) { + return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); + } + if (0x10000 > $c) { + return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } + + return ''; + }, $value); + } +} diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php new file mode 100644 index 00000000..3c77cf09 --- /dev/null +++ b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\Parser\Tokenizer; + +/** + * CSS selector tokenizer patterns builder. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class TokenizerPatterns +{ + private string $unicodeEscapePattern; + private string $simpleEscapePattern; + private string $newLineEscapePattern; + private string $escapePattern; + private string $stringEscapePattern; + private string $nonAsciiPattern; + private string $nmCharPattern; + private string $nmStartPattern; + private string $identifierPattern; + private string $hashPattern; + private string $numberPattern; + private string $quotedStringPattern; + + public function __construct() + { + $this->unicodeEscapePattern = '\\\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?'; + $this->simpleEscapePattern = '\\\\(.)'; + $this->newLineEscapePattern = '\\\\(?:\n|\r\n|\r|\f)'; + $this->escapePattern = $this->unicodeEscapePattern.'|\\\\[^\n\r\f0-9a-f]'; + $this->stringEscapePattern = $this->newLineEscapePattern.'|'.$this->escapePattern; + $this->nonAsciiPattern = '[^\x00-\x7F]'; + $this->nmCharPattern = '[_a-z0-9-]|'.$this->escapePattern.'|'.$this->nonAsciiPattern; + $this->nmStartPattern = '[_a-z]|'.$this->escapePattern.'|'.$this->nonAsciiPattern; + $this->identifierPattern = '-?(?:'.$this->nmStartPattern.')(?:'.$this->nmCharPattern.')*'; + $this->hashPattern = '#((?:'.$this->nmCharPattern.')+)'; + $this->numberPattern = '[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)'; + $this->quotedStringPattern = '([^\n\r\f\\\\%s]|'.$this->stringEscapePattern.')*'; + } + + public function getNewLineEscapePattern(): string + { + return '~'.$this->newLineEscapePattern.'~'; + } + + public function getSimpleEscapePattern(): string + { + return '~'.$this->simpleEscapePattern.'~'; + } + + public function getUnicodeEscapePattern(): string + { + return '~'.$this->unicodeEscapePattern.'~i'; + } + + public function getIdentifierPattern(): string + { + return '~^'.$this->identifierPattern.'~i'; + } + + public function getHashPattern(): string + { + return '~^'.$this->hashPattern.'~i'; + } + + public function getNumberPattern(): string + { + return '~^'.$this->numberPattern.'~'; + } + + public function getQuotedStringPattern(string $quote): string + { + return '~^'.sprintf($this->quotedStringPattern, $quote).'~i'; + } +} diff --git a/vendor/symfony/css-selector/README.md b/vendor/symfony/css-selector/README.md new file mode 100644 index 00000000..ede4a3ac --- /dev/null +++ b/vendor/symfony/css-selector/README.md @@ -0,0 +1,20 @@ +CssSelector Component +===================== + +The CssSelector component converts CSS selectors to XPath expressions. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/css_selector.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) + +Credits +------- + +This component is a port of the Python cssselect library +[v0.7.1](https://github.com/SimonSapin/cssselect/releases/tag/v0.7.1), +which is distributed under the BSD license. diff --git a/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php b/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php new file mode 100644 index 00000000..495f8829 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +/** + * XPath expression translator abstract extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +abstract class AbstractExtension implements ExtensionInterface +{ + public function getNodeTranslators(): array + { + return []; + } + + public function getCombinationTranslators(): array + { + return []; + } + + public function getFunctionTranslators(): array + { + return []; + } + + public function getPseudoClassTranslators(): array + { + return []; + } + + public function getAttributeMatchingTranslators(): array + { + return []; + } +} diff --git a/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php b/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php new file mode 100644 index 00000000..3c785e97 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +use Symfony\Component\CssSelector\XPath\Translator; +use Symfony\Component\CssSelector\XPath\XPathExpr; + +/** + * XPath expression translator attribute extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class AttributeMatchingExtension extends AbstractExtension +{ + public function getAttributeMatchingTranslators(): array + { + return [ + 'exists' => $this->translateExists(...), + '=' => $this->translateEquals(...), + '~=' => $this->translateIncludes(...), + '|=' => $this->translateDashMatch(...), + '^=' => $this->translatePrefixMatch(...), + '$=' => $this->translateSuffixMatch(...), + '*=' => $this->translateSubstringMatch(...), + '!=' => $this->translateDifferent(...), + ]; + } + + public function translateExists(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition($attribute); + } + + public function translateEquals(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition(sprintf('%s = %s', $attribute, Translator::getXpathLiteral($value))); + } + + public function translateIncludes(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition($value ? sprintf( + '%1$s and contains(concat(\' \', normalize-space(%1$s), \' \'), %2$s)', + $attribute, + Translator::getXpathLiteral(' '.$value.' ') + ) : '0'); + } + + public function translateDashMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition(sprintf( + '%1$s and (%1$s = %2$s or starts-with(%1$s, %3$s))', + $attribute, + Translator::getXpathLiteral($value), + Translator::getXpathLiteral($value.'-') + )); + } + + public function translatePrefixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition($value ? sprintf( + '%1$s and starts-with(%1$s, %2$s)', + $attribute, + Translator::getXpathLiteral($value) + ) : '0'); + } + + public function translateSuffixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition($value ? sprintf( + '%1$s and substring(%1$s, string-length(%1$s)-%2$s) = %3$s', + $attribute, + \strlen($value) - 1, + Translator::getXpathLiteral($value) + ) : '0'); + } + + public function translateSubstringMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition($value ? sprintf( + '%1$s and contains(%1$s, %2$s)', + $attribute, + Translator::getXpathLiteral($value) + ) : '0'); + } + + public function translateDifferent(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr + { + return $xpath->addCondition(sprintf( + $value ? 'not(%1$s) or %1$s != %2$s' : '%s != %s', + $attribute, + Translator::getXpathLiteral($value) + )); + } + + public function getName(): string + { + return 'attribute-matching'; + } +} diff --git a/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php b/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php new file mode 100644 index 00000000..f78d4888 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +use Symfony\Component\CssSelector\XPath\XPathExpr; + +/** + * XPath expression translator combination extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class CombinationExtension extends AbstractExtension +{ + public function getCombinationTranslators(): array + { + return [ + ' ' => $this->translateDescendant(...), + '>' => $this->translateChild(...), + '+' => $this->translateDirectAdjacent(...), + '~' => $this->translateIndirectAdjacent(...), + ]; + } + + public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr + { + return $xpath->join('/descendant-or-self::*/', $combinedXpath); + } + + public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr + { + return $xpath->join('/', $combinedXpath); + } + + public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr + { + return $xpath + ->join('/following-sibling::', $combinedXpath) + ->addNameTest() + ->addCondition('position() = 1'); + } + + public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr + { + return $xpath->join('/following-sibling::', $combinedXpath); + } + + public function getName(): string + { + return 'combination'; + } +} diff --git a/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php b/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php new file mode 100644 index 00000000..1a74b90a --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +/** + * XPath expression translator extension interface. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +interface ExtensionInterface +{ + /** + * Returns node translators. + * + * These callables will receive the node as first argument and the translator as second argument. + * + * @return callable[] + */ + public function getNodeTranslators(): array; + + /** + * Returns combination translators. + * + * @return callable[] + */ + public function getCombinationTranslators(): array; + + /** + * Returns function translators. + * + * @return callable[] + */ + public function getFunctionTranslators(): array; + + /** + * Returns pseudo-class translators. + * + * @return callable[] + */ + public function getPseudoClassTranslators(): array; + + /** + * Returns attribute operation translators. + * + * @return callable[] + */ + public function getAttributeMatchingTranslators(): array; + + /** + * Returns extension name. + */ + public function getName(): string; +} diff --git a/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php b/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php new file mode 100644 index 00000000..4b9d7bc2 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php @@ -0,0 +1,165 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +use Symfony\Component\CssSelector\Exception\ExpressionErrorException; +use Symfony\Component\CssSelector\Exception\SyntaxErrorException; +use Symfony\Component\CssSelector\Node\FunctionNode; +use Symfony\Component\CssSelector\Parser\Parser; +use Symfony\Component\CssSelector\XPath\Translator; +use Symfony\Component\CssSelector\XPath\XPathExpr; + +/** + * XPath expression translator function extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class FunctionExtension extends AbstractExtension +{ + public function getFunctionTranslators(): array + { + return [ + 'nth-child' => $this->translateNthChild(...), + 'nth-last-child' => $this->translateNthLastChild(...), + 'nth-of-type' => $this->translateNthOfType(...), + 'nth-last-of-type' => $this->translateNthLastOfType(...), + 'contains' => $this->translateContains(...), + 'lang' => $this->translateLang(...), + ]; + } + + /** + * @throws ExpressionErrorException + */ + public function translateNthChild(XPathExpr $xpath, FunctionNode $function, bool $last = false, bool $addNameTest = true): XPathExpr + { + try { + [$a, $b] = Parser::parseSeries($function->getArguments()); + } catch (SyntaxErrorException $e) { + throw new ExpressionErrorException(sprintf('Invalid series: "%s".', implode('", "', $function->getArguments())), 0, $e); + } + + $xpath->addStarPrefix(); + if ($addNameTest) { + $xpath->addNameTest(); + } + + if (0 === $a) { + return $xpath->addCondition('position() = '.($last ? 'last() - '.($b - 1) : $b)); + } + + if ($a < 0) { + if ($b < 1) { + return $xpath->addCondition('false()'); + } + + $sign = '<='; + } else { + $sign = '>='; + } + + $expr = 'position()'; + + if ($last) { + $expr = 'last() - '.$expr; + --$b; + } + + if (0 !== $b) { + $expr .= ' - '.$b; + } + + $conditions = [sprintf('%s %s 0', $expr, $sign)]; + + if (1 !== $a && -1 !== $a) { + $conditions[] = sprintf('(%s) mod %d = 0', $expr, $a); + } + + return $xpath->addCondition(implode(' and ', $conditions)); + + // todo: handle an+b, odd, even + // an+b means every-a, plus b, e.g., 2n+1 means odd + // 0n+b means b + // n+0 means a=1, i.e., all elements + // an means every a elements, i.e., 2n means even + // -n means -1n + // -1n+6 means elements 6 and previous + } + + public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + return $this->translateNthChild($xpath, $function, true); + } + + public function translateNthOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + return $this->translateNthChild($xpath, $function, false, false); + } + + /** + * @throws ExpressionErrorException + */ + public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + if ('*' === $xpath->getElement()) { + throw new ExpressionErrorException('"*:nth-of-type()" is not implemented.'); + } + + return $this->translateNthChild($xpath, $function, true, false); + } + + /** + * @throws ExpressionErrorException + */ + public function translateContains(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + $arguments = $function->getArguments(); + foreach ($arguments as $token) { + if (!($token->isString() || $token->isIdentifier())) { + throw new ExpressionErrorException('Expected a single string or identifier for :contains(), got '.implode(', ', $arguments)); + } + } + + return $xpath->addCondition(sprintf( + 'contains(string(.), %s)', + Translator::getXpathLiteral($arguments[0]->getValue()) + )); + } + + /** + * @throws ExpressionErrorException + */ + public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + $arguments = $function->getArguments(); + foreach ($arguments as $token) { + if (!($token->isString() || $token->isIdentifier())) { + throw new ExpressionErrorException('Expected a single string or identifier for :lang(), got '.implode(', ', $arguments)); + } + } + + return $xpath->addCondition(sprintf( + 'lang(%s)', + Translator::getXpathLiteral($arguments[0]->getValue()) + )); + } + + public function getName(): string + { + return 'function'; + } +} diff --git a/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php b/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php new file mode 100644 index 00000000..4653add5 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php @@ -0,0 +1,178 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +use Symfony\Component\CssSelector\Exception\ExpressionErrorException; +use Symfony\Component\CssSelector\Node\FunctionNode; +use Symfony\Component\CssSelector\XPath\Translator; +use Symfony\Component\CssSelector\XPath\XPathExpr; + +/** + * XPath expression translator HTML extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class HtmlExtension extends AbstractExtension +{ + public function __construct(Translator $translator) + { + $translator + ->getExtension('node') + ->setFlag(NodeExtension::ELEMENT_NAME_IN_LOWER_CASE, true) + ->setFlag(NodeExtension::ATTRIBUTE_NAME_IN_LOWER_CASE, true); + } + + public function getPseudoClassTranslators(): array + { + return [ + 'checked' => $this->translateChecked(...), + 'link' => $this->translateLink(...), + 'disabled' => $this->translateDisabled(...), + 'enabled' => $this->translateEnabled(...), + 'selected' => $this->translateSelected(...), + 'invalid' => $this->translateInvalid(...), + 'hover' => $this->translateHover(...), + 'visited' => $this->translateVisited(...), + ]; + } + + public function getFunctionTranslators(): array + { + return [ + 'lang' => $this->translateLang(...), + ]; + } + + public function translateChecked(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition( + '(@checked ' + ."and (name(.) = 'input' or name(.) = 'command')" + ."and (@type = 'checkbox' or @type = 'radio'))" + ); + } + + public function translateLink(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition("@href and (name(.) = 'a' or name(.) = 'link' or name(.) = 'area')"); + } + + public function translateDisabled(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition( + '(' + .'@disabled and' + .'(' + ."(name(.) = 'input' and @type != 'hidden')" + ." or name(.) = 'button'" + ." or name(.) = 'select'" + ." or name(.) = 'textarea'" + ." or name(.) = 'command'" + ." or name(.) = 'fieldset'" + ." or name(.) = 'optgroup'" + ." or name(.) = 'option'" + .')' + .') or (' + ."(name(.) = 'input' and @type != 'hidden')" + ." or name(.) = 'button'" + ." or name(.) = 'select'" + ." or name(.) = 'textarea'" + .')' + .' and ancestor::fieldset[@disabled]' + ); + // todo: in the second half, add "and is not a descendant of that fieldset element's first legend element child, if any." + } + + public function translateEnabled(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition( + '(' + .'@href and (' + ."name(.) = 'a'" + ." or name(.) = 'link'" + ." or name(.) = 'area'" + .')' + .') or (' + .'(' + ."name(.) = 'command'" + ." or name(.) = 'fieldset'" + ." or name(.) = 'optgroup'" + .')' + .' and not(@disabled)' + .') or (' + .'(' + ."(name(.) = 'input' and @type != 'hidden')" + ." or name(.) = 'button'" + ." or name(.) = 'select'" + ." or name(.) = 'textarea'" + ." or name(.) = 'keygen'" + .')' + .' and not (@disabled or ancestor::fieldset[@disabled])' + .') or (' + ."name(.) = 'option' and not(" + .'@disabled or ancestor::optgroup[@disabled]' + .')' + .')' + ); + } + + /** + * @throws ExpressionErrorException + */ + public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + $arguments = $function->getArguments(); + foreach ($arguments as $token) { + if (!($token->isString() || $token->isIdentifier())) { + throw new ExpressionErrorException('Expected a single string or identifier for :lang(), got '.implode(', ', $arguments)); + } + } + + return $xpath->addCondition(sprintf( + 'ancestor-or-self::*[@lang][1][starts-with(concat(' + ."translate(@%s, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '-')" + .', %s)]', + 'lang', + Translator::getXpathLiteral(strtolower($arguments[0]->getValue()).'-') + )); + } + + public function translateSelected(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition("(@selected and name(.) = 'option')"); + } + + public function translateInvalid(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition('0'); + } + + public function translateHover(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition('0'); + } + + public function translateVisited(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition('0'); + } + + public function getName(): string + { + return 'html'; + } +} diff --git a/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php b/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php new file mode 100644 index 00000000..49e894ad --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php @@ -0,0 +1,191 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +use Symfony\Component\CssSelector\Node; +use Symfony\Component\CssSelector\XPath\Translator; +use Symfony\Component\CssSelector\XPath\XPathExpr; + +/** + * XPath expression translator node extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class NodeExtension extends AbstractExtension +{ + public const ELEMENT_NAME_IN_LOWER_CASE = 1; + public const ATTRIBUTE_NAME_IN_LOWER_CASE = 2; + public const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4; + + private int $flags; + + public function __construct(int $flags = 0) + { + $this->flags = $flags; + } + + /** + * @return $this + */ + public function setFlag(int $flag, bool $on): static + { + if ($on && !$this->hasFlag($flag)) { + $this->flags += $flag; + } + + if (!$on && $this->hasFlag($flag)) { + $this->flags -= $flag; + } + + return $this; + } + + public function hasFlag(int $flag): bool + { + return (bool) ($this->flags & $flag); + } + + public function getNodeTranslators(): array + { + return [ + 'Selector' => $this->translateSelector(...), + 'CombinedSelector' => $this->translateCombinedSelector(...), + 'Negation' => $this->translateNegation(...), + 'Function' => $this->translateFunction(...), + 'Pseudo' => $this->translatePseudo(...), + 'Attribute' => $this->translateAttribute(...), + 'Class' => $this->translateClass(...), + 'Hash' => $this->translateHash(...), + 'Element' => $this->translateElement(...), + ]; + } + + public function translateSelector(Node\SelectorNode $node, Translator $translator): XPathExpr + { + return $translator->nodeToXPath($node->getTree()); + } + + public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator): XPathExpr + { + return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector()); + } + + public function translateNegation(Node\NegationNode $node, Translator $translator): XPathExpr + { + $xpath = $translator->nodeToXPath($node->getSelector()); + $subXpath = $translator->nodeToXPath($node->getSubSelector()); + $subXpath->addNameTest(); + + if ($subXpath->getCondition()) { + return $xpath->addCondition(sprintf('not(%s)', $subXpath->getCondition())); + } + + return $xpath->addCondition('0'); + } + + public function translateFunction(Node\FunctionNode $node, Translator $translator): XPathExpr + { + $xpath = $translator->nodeToXPath($node->getSelector()); + + return $translator->addFunction($xpath, $node); + } + + public function translatePseudo(Node\PseudoNode $node, Translator $translator): XPathExpr + { + $xpath = $translator->nodeToXPath($node->getSelector()); + + return $translator->addPseudoClass($xpath, $node->getIdentifier()); + } + + public function translateAttribute(Node\AttributeNode $node, Translator $translator): XPathExpr + { + $name = $node->getAttribute(); + $safe = $this->isSafeName($name); + + if ($this->hasFlag(self::ATTRIBUTE_NAME_IN_LOWER_CASE)) { + $name = strtolower($name); + } + + if ($node->getNamespace()) { + $name = sprintf('%s:%s', $node->getNamespace(), $name); + $safe = $safe && $this->isSafeName($node->getNamespace()); + } + + $attribute = $safe ? '@'.$name : sprintf('attribute::*[name() = %s]', Translator::getXpathLiteral($name)); + $value = $node->getValue(); + $xpath = $translator->nodeToXPath($node->getSelector()); + + if ($this->hasFlag(self::ATTRIBUTE_VALUE_IN_LOWER_CASE)) { + $value = strtolower($value); + } + + return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value); + } + + public function translateClass(Node\ClassNode $node, Translator $translator): XPathExpr + { + $xpath = $translator->nodeToXPath($node->getSelector()); + + return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName()); + } + + public function translateHash(Node\HashNode $node, Translator $translator): XPathExpr + { + $xpath = $translator->nodeToXPath($node->getSelector()); + + return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId()); + } + + public function translateElement(Node\ElementNode $node): XPathExpr + { + $element = $node->getElement(); + + if ($element && $this->hasFlag(self::ELEMENT_NAME_IN_LOWER_CASE)) { + $element = strtolower($element); + } + + if ($element) { + $safe = $this->isSafeName($element); + } else { + $element = '*'; + $safe = true; + } + + if ($node->getNamespace()) { + $element = sprintf('%s:%s', $node->getNamespace(), $element); + $safe = $safe && $this->isSafeName($node->getNamespace()); + } + + $xpath = new XPathExpr('', $element); + + if (!$safe) { + $xpath->addNameTest(); + } + + return $xpath; + } + + public function getName(): string + { + return 'node'; + } + + private function isSafeName(string $name): bool + { + return 0 < preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name); + } +} diff --git a/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php b/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php new file mode 100644 index 00000000..aada8329 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php @@ -0,0 +1,122 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath\Extension; + +use Symfony\Component\CssSelector\Exception\ExpressionErrorException; +use Symfony\Component\CssSelector\XPath\XPathExpr; + +/** + * XPath expression translator pseudo-class extension. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class PseudoClassExtension extends AbstractExtension +{ + public function getPseudoClassTranslators(): array + { + return [ + 'root' => $this->translateRoot(...), + 'scope' => $this->translateScopePseudo(...), + 'first-child' => $this->translateFirstChild(...), + 'last-child' => $this->translateLastChild(...), + 'first-of-type' => $this->translateFirstOfType(...), + 'last-of-type' => $this->translateLastOfType(...), + 'only-child' => $this->translateOnlyChild(...), + 'only-of-type' => $this->translateOnlyOfType(...), + 'empty' => $this->translateEmpty(...), + ]; + } + + public function translateRoot(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition('not(parent::*)'); + } + + public function translateScopePseudo(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition('1'); + } + + public function translateFirstChild(XPathExpr $xpath): XPathExpr + { + return $xpath + ->addStarPrefix() + ->addNameTest() + ->addCondition('position() = 1'); + } + + public function translateLastChild(XPathExpr $xpath): XPathExpr + { + return $xpath + ->addStarPrefix() + ->addNameTest() + ->addCondition('position() = last()'); + } + + /** + * @throws ExpressionErrorException + */ + public function translateFirstOfType(XPathExpr $xpath): XPathExpr + { + if ('*' === $xpath->getElement()) { + throw new ExpressionErrorException('"*:first-of-type" is not implemented.'); + } + + return $xpath + ->addStarPrefix() + ->addCondition('position() = 1'); + } + + /** + * @throws ExpressionErrorException + */ + public function translateLastOfType(XPathExpr $xpath): XPathExpr + { + if ('*' === $xpath->getElement()) { + throw new ExpressionErrorException('"*:last-of-type" is not implemented.'); + } + + return $xpath + ->addStarPrefix() + ->addCondition('position() = last()'); + } + + public function translateOnlyChild(XPathExpr $xpath): XPathExpr + { + return $xpath + ->addStarPrefix() + ->addNameTest() + ->addCondition('last() = 1'); + } + + public function translateOnlyOfType(XPathExpr $xpath): XPathExpr + { + $element = $xpath->getElement(); + + return $xpath->addCondition(sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element)); + } + + public function translateEmpty(XPathExpr $xpath): XPathExpr + { + return $xpath->addCondition('not(*) and not(string-length())'); + } + + public function getName(): string + { + return 'pseudo-class'; + } +} diff --git a/vendor/symfony/css-selector/XPath/Translator.php b/vendor/symfony/css-selector/XPath/Translator.php new file mode 100644 index 00000000..9e66ce7d --- /dev/null +++ b/vendor/symfony/css-selector/XPath/Translator.php @@ -0,0 +1,224 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath; + +use Symfony\Component\CssSelector\Exception\ExpressionErrorException; +use Symfony\Component\CssSelector\Node\FunctionNode; +use Symfony\Component\CssSelector\Node\NodeInterface; +use Symfony\Component\CssSelector\Node\SelectorNode; +use Symfony\Component\CssSelector\Parser\Parser; +use Symfony\Component\CssSelector\Parser\ParserInterface; + +/** + * XPath expression translator interface. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class Translator implements TranslatorInterface +{ + private ParserInterface $mainParser; + + /** + * @var ParserInterface[] + */ + private array $shortcutParsers = []; + + /** + * @var Extension\ExtensionInterface[] + */ + private array $extensions = []; + + private array $nodeTranslators = []; + private array $combinationTranslators = []; + private array $functionTranslators = []; + private array $pseudoClassTranslators = []; + private array $attributeMatchingTranslators = []; + + public function __construct(?ParserInterface $parser = null) + { + $this->mainParser = $parser ?? new Parser(); + + $this + ->registerExtension(new Extension\NodeExtension()) + ->registerExtension(new Extension\CombinationExtension()) + ->registerExtension(new Extension\FunctionExtension()) + ->registerExtension(new Extension\PseudoClassExtension()) + ->registerExtension(new Extension\AttributeMatchingExtension()) + ; + } + + public static function getXpathLiteral(string $element): string + { + if (!str_contains($element, "'")) { + return "'".$element."'"; + } + + if (!str_contains($element, '"')) { + return '"'.$element.'"'; + } + + $string = $element; + $parts = []; + while (true) { + if (false !== $pos = strpos($string, "'")) { + $parts[] = sprintf("'%s'", substr($string, 0, $pos)); + $parts[] = "\"'\""; + $string = substr($string, $pos + 1); + } else { + $parts[] = "'$string'"; + break; + } + } + + return sprintf('concat(%s)', implode(', ', $parts)); + } + + public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string + { + $selectors = $this->parseSelectors($cssExpr); + + /** @var SelectorNode $selector */ + foreach ($selectors as $index => $selector) { + if (null !== $selector->getPseudoElement()) { + throw new ExpressionErrorException('Pseudo-elements are not supported.'); + } + + $selectors[$index] = $this->selectorToXPath($selector, $prefix); + } + + return implode(' | ', $selectors); + } + + public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string + { + return ($prefix ?: '').$this->nodeToXPath($selector); + } + + /** + * @return $this + */ + public function registerExtension(Extension\ExtensionInterface $extension): static + { + $this->extensions[$extension->getName()] = $extension; + + $this->nodeTranslators = array_merge($this->nodeTranslators, $extension->getNodeTranslators()); + $this->combinationTranslators = array_merge($this->combinationTranslators, $extension->getCombinationTranslators()); + $this->functionTranslators = array_merge($this->functionTranslators, $extension->getFunctionTranslators()); + $this->pseudoClassTranslators = array_merge($this->pseudoClassTranslators, $extension->getPseudoClassTranslators()); + $this->attributeMatchingTranslators = array_merge($this->attributeMatchingTranslators, $extension->getAttributeMatchingTranslators()); + + return $this; + } + + /** + * @throws ExpressionErrorException + */ + public function getExtension(string $name): Extension\ExtensionInterface + { + if (!isset($this->extensions[$name])) { + throw new ExpressionErrorException(sprintf('Extension "%s" not registered.', $name)); + } + + return $this->extensions[$name]; + } + + /** + * @return $this + */ + public function registerParserShortcut(ParserInterface $shortcut): static + { + $this->shortcutParsers[] = $shortcut; + + return $this; + } + + /** + * @throws ExpressionErrorException + */ + public function nodeToXPath(NodeInterface $node): XPathExpr + { + if (!isset($this->nodeTranslators[$node->getNodeName()])) { + throw new ExpressionErrorException(sprintf('Node "%s" not supported.', $node->getNodeName())); + } + + return $this->nodeTranslators[$node->getNodeName()]($node, $this); + } + + /** + * @throws ExpressionErrorException + */ + public function addCombination(string $combiner, NodeInterface $xpath, NodeInterface $combinedXpath): XPathExpr + { + if (!isset($this->combinationTranslators[$combiner])) { + throw new ExpressionErrorException(sprintf('Combiner "%s" not supported.', $combiner)); + } + + return $this->combinationTranslators[$combiner]($this->nodeToXPath($xpath), $this->nodeToXPath($combinedXpath)); + } + + /** + * @throws ExpressionErrorException + */ + public function addFunction(XPathExpr $xpath, FunctionNode $function): XPathExpr + { + if (!isset($this->functionTranslators[$function->getName()])) { + throw new ExpressionErrorException(sprintf('Function "%s" not supported.', $function->getName())); + } + + return $this->functionTranslators[$function->getName()]($xpath, $function); + } + + /** + * @throws ExpressionErrorException + */ + public function addPseudoClass(XPathExpr $xpath, string $pseudoClass): XPathExpr + { + if (!isset($this->pseudoClassTranslators[$pseudoClass])) { + throw new ExpressionErrorException(sprintf('Pseudo-class "%s" not supported.', $pseudoClass)); + } + + return $this->pseudoClassTranslators[$pseudoClass]($xpath); + } + + /** + * @throws ExpressionErrorException + */ + public function addAttributeMatching(XPathExpr $xpath, string $operator, string $attribute, ?string $value): XPathExpr + { + if (!isset($this->attributeMatchingTranslators[$operator])) { + throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator)); + } + + return $this->attributeMatchingTranslators[$operator]($xpath, $attribute, $value); + } + + /** + * @return SelectorNode[] + */ + private function parseSelectors(string $css): array + { + foreach ($this->shortcutParsers as $shortcut) { + $tokens = $shortcut->parse($css); + + if ($tokens) { + return $tokens; + } + } + + return $this->mainParser->parse($css); + } +} diff --git a/vendor/symfony/css-selector/XPath/TranslatorInterface.php b/vendor/symfony/css-selector/XPath/TranslatorInterface.php new file mode 100644 index 00000000..c19eefb9 --- /dev/null +++ b/vendor/symfony/css-selector/XPath/TranslatorInterface.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath; + +use Symfony\Component\CssSelector\Node\SelectorNode; + +/** + * XPath expression translator interface. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +interface TranslatorInterface +{ + /** + * Translates a CSS selector to an XPath expression. + */ + public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string; + + /** + * Translates a parsed selector node to an XPath expression. + */ + public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string; +} diff --git a/vendor/symfony/css-selector/XPath/XPathExpr.php b/vendor/symfony/css-selector/XPath/XPathExpr.php new file mode 100644 index 00000000..a76e30be --- /dev/null +++ b/vendor/symfony/css-selector/XPath/XPathExpr.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\CssSelector\XPath; + +/** + * XPath expression translator interface. + * + * This component is a port of the Python cssselect library, + * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. + * + * @author Jean-François Simon + * + * @internal + */ +class XPathExpr +{ + private string $path; + private string $element; + private string $condition; + + public function __construct(string $path = '', string $element = '*', string $condition = '', bool $starPrefix = false) + { + $this->path = $path; + $this->element = $element; + $this->condition = $condition; + + if ($starPrefix) { + $this->addStarPrefix(); + } + } + + public function getElement(): string + { + return $this->element; + } + + /** + * @return $this + */ + public function addCondition(string $condition): static + { + $this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition; + + return $this; + } + + public function getCondition(): string + { + return $this->condition; + } + + /** + * @return $this + */ + public function addNameTest(): static + { + if ('*' !== $this->element) { + $this->addCondition('name() = '.Translator::getXpathLiteral($this->element)); + $this->element = '*'; + } + + return $this; + } + + /** + * @return $this + */ + public function addStarPrefix(): static + { + $this->path .= '*/'; + + return $this; + } + + /** + * Joins another XPathExpr with a combiner. + * + * @return $this + */ + public function join(string $combiner, self $expr): static + { + $path = $this->__toString().$combiner; + + if ('*/' !== $expr->path) { + $path .= $expr->path; + } + + $this->path = $path; + $this->element = $expr->element; + $this->condition = $expr->condition; + + return $this; + } + + public function __toString(): string + { + $path = $this->path.$this->element; + $condition = null === $this->condition || '' === $this->condition ? '' : '['.$this->condition.']'; + + return $path.$condition; + } +} diff --git a/vendor/symfony/css-selector/composer.json b/vendor/symfony/css-selector/composer.json new file mode 100644 index 00000000..c08fdc2c --- /dev/null +++ b/vendor/symfony/css-selector/composer.json @@ -0,0 +1,32 @@ +{ + "name": "symfony/css-selector", + "type": "library", + "description": "Converts CSS selectors to XPath expressions", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\CssSelector\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/LICENSE.md b/vendor/tijsverkoyen/css-to-inline-styles/LICENSE.md new file mode 100644 index 00000000..5f40959f --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/LICENSE.md @@ -0,0 +1,23 @@ +Copyright (c) Tijs Verkoyen. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/tijsverkoyen/css-to-inline-styles/composer.json b/vendor/tijsverkoyen/css-to-inline-styles/composer.json new file mode 100644 index 00000000..055ba410 --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/composer.json @@ -0,0 +1,38 @@ +{ + "name": "tijsverkoyen/css-to-inline-styles", + "type": "library", + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "require": { + "php": "^5.5 || ^7.0 || ^8.0", + "ext-dom": "*", + "ext-libxml": "*", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\Tests\\": "tests" + } + }, + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + } +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Processor.php b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Processor.php new file mode 100644 index 00000000..0c5ceb16 --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Processor.php @@ -0,0 +1,71 @@ +doCleanup($css); + $rulesProcessor = new RuleProcessor(); + $rules = $rulesProcessor->splitIntoSeparateRules($css); + + return $rulesProcessor->convertArrayToObjects($rules, $existingRules); + } + + /** + * Get the CSS from the style-tags in the given HTML-string + * + * @param string $html + * + * @return string + */ + public function getCssFromStyleTags($html) + { + $css = ''; + $matches = array(); + $htmlNoComments = preg_replace('||s', '', $html); + preg_match_all('|(.*)|isU', $htmlNoComments, $matches); + + if (!empty($matches[1])) { + foreach ($matches[1] as $match) { + $css .= trim($match) . "\n"; + } + } + + return $css; + } + + /** + * @param string $css + * + * @return string + */ + private function doCleanup($css) + { + // remove charset + $css = preg_replace('/@charset "[^"]++";/', '', $css); + // remove media queries + $css = preg_replace('/@media [^{]*+{([^{}]++|{[^{}]*+})*+}/', '', $css); + + $css = str_replace(array("\r", "\n"), '', $css); + $css = str_replace(array("\t"), ' ', $css); + $css = str_replace('"', '\'', $css); + $css = preg_replace('|/\*.*?\*/|', '', $css); + $css = preg_replace('/\s\s++/', ' ', $css); + $css = trim($css); + + return $css; + } +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Property/Processor.php b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Property/Processor.php new file mode 100644 index 00000000..3b01861d --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Property/Processor.php @@ -0,0 +1,127 @@ +cleanup($propertiesString); + + $properties = (array) explode(';', $propertiesString); + $keysToRemove = array(); + $numberOfProperties = count($properties); + + for ($i = 0; $i < $numberOfProperties; $i++) { + $properties[$i] = trim($properties[$i]); + + // if the new property begins with base64 it is part of the current property + if (isset($properties[$i + 1]) && strpos(trim($properties[$i + 1]), 'base64,') === 0) { + $properties[$i] .= ';' . trim($properties[$i + 1]); + $keysToRemove[] = $i + 1; + } + } + + if (!empty($keysToRemove)) { + foreach ($keysToRemove as $key) { + unset($properties[$key]); + } + } + + return array_values($properties); + } + + /** + * @param string $string + * + * @return string + */ + private function cleanup($string) + { + $string = str_replace(array("\r", "\n"), '', $string); + $string = str_replace(array("\t"), ' ', $string); + $string = str_replace('"', '\'', $string); + $string = preg_replace('|/\*.*?\*/|', '', $string); + $string = preg_replace('/\s\s+/', ' ', $string); + + $string = trim($string); + $string = rtrim($string, ';'); + + return $string; + } + + /** + * Converts a property-string into an object + * + * @param string $property + * + * @return Property|null + */ + public function convertToObject($property, Specificity $specificity = null) + { + if (strpos($property, ':') === false) { + return null; + } + + list($name, $value) = explode(':', $property, 2); + + $name = trim($name); + $value = trim($value); + + if ($value === '') { + return null; + } + + return new Property($name, $value, $specificity); + } + + /** + * Converts an array of property-strings into objects + * + * @param string[] $properties + * + * @return Property[] + */ + public function convertArrayToObjects(array $properties, Specificity $specificity = null) + { + $objects = array(); + + foreach ($properties as $property) { + $object = $this->convertToObject($property, $specificity); + if ($object === null) { + continue; + } + + $objects[] = $object; + } + + return $objects; + } + + /** + * Build the property-string for multiple properties + * + * @param Property[] $properties + * + * @return string + */ + public function buildPropertiesString(array $properties) + { + $chunks = array(); + + foreach ($properties as $property) { + $chunks[] = $property->toString(); + } + + return implode(' ', $chunks); + } +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Property/Property.php b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Property/Property.php new file mode 100644 index 00000000..c8970cf4 --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Property/Property.php @@ -0,0 +1,90 @@ +name = $name; + $this->value = $value; + $this->originalSpecificity = $specificity; + } + + /** + * Get name + * + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Get value + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Get originalSpecificity + * + * @return Specificity + */ + public function getOriginalSpecificity() + { + return $this->originalSpecificity; + } + + /** + * Is this property important? + * + * @return bool + */ + public function isImportant() + { + return (stripos($this->value, '!important') !== false); + } + + /** + * Get the textual representation of the property + * + * @return string + */ + public function toString() + { + return sprintf( + '%1$s: %2$s;', + $this->name, + $this->value + ); + } +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Processor.php b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Processor.php new file mode 100644 index 00000000..d183262f --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Processor.php @@ -0,0 +1,163 @@ +cleanup($rulesString); + + return (array) explode('}', $rulesString); + } + + /** + * @param string $string + * + * @return string + */ + private function cleanup($string) + { + $string = str_replace(array("\r", "\n"), '', $string); + $string = str_replace(array("\t"), ' ', $string); + $string = str_replace('"', '\'', $string); + $string = preg_replace('|/\*.*?\*/|', '', $string); + $string = preg_replace('/\s\s+/', ' ', $string); + + $string = trim($string); + $string = rtrim($string, '}'); + + return $string; + } + + /** + * Converts a rule-string into an object + * + * @param string $rule + * @param int $originalOrder + * + * @return Rule[] + */ + public function convertToObjects($rule, $originalOrder) + { + $rule = $this->cleanup($rule); + + $chunks = explode('{', $rule); + if (!isset($chunks[1])) { + return array(); + } + $propertiesProcessor = new PropertyProcessor(); + $rules = array(); + $selectors = (array) explode(',', trim($chunks[0])); + $properties = $propertiesProcessor->splitIntoSeparateProperties($chunks[1]); + + foreach ($selectors as $selector) { + $selector = trim($selector); + $specificity = $this->calculateSpecificityBasedOnASelector($selector); + + $rules[] = new Rule( + $selector, + $propertiesProcessor->convertArrayToObjects($properties, $specificity), + $specificity, + $originalOrder + ); + } + + return $rules; + } + + /** + * Calculates the specificity based on a CSS Selector string, + * Based on the patterns from premailer/css_parser by Alex Dunae + * + * @see https://github.com/premailer/css_parser/blob/master/lib/css_parser/regexps.rb + * + * @param string $selector + * + * @return Specificity + */ + public function calculateSpecificityBasedOnASelector($selector) + { + $idSelectorsPattern = " \#"; + $classAttributesPseudoClassesSelectorsPattern = " (\.[\w]+) # classes + | + \[(\w+) # attributes + | + (\:( # pseudo classes + link|visited|active + |hover|focus + |lang + |target + |enabled|disabled|checked|indeterminate + |root + |nth-child|nth-last-child|nth-of-type|nth-last-of-type + |first-child|last-child|first-of-type|last-of-type + |only-child|only-of-type + |empty|contains + ))"; + + $typePseudoElementsSelectorPattern = " ((^|[\s\+\>\~]+)[\w]+ # elements + | + \:{1,2}( # pseudo-elements + after|before + |first-letter|first-line + |selection + ) + )"; + + return new Specificity( + preg_match_all("/{$idSelectorsPattern}/ix", $selector, $matches), + preg_match_all("/{$classAttributesPseudoClassesSelectorsPattern}/ix", $selector, $matches), + preg_match_all("/{$typePseudoElementsSelectorPattern}/ix", $selector, $matches) + ); + } + + /** + * @param string[] $rules + * @param Rule[] $objects + * + * @return Rule[] + */ + public function convertArrayToObjects(array $rules, array $objects = array()) + { + $order = 1; + foreach ($rules as $rule) { + $objects = array_merge($objects, $this->convertToObjects($rule, $order)); + $order++; + } + + return $objects; + } + + /** + * Sorts an array on the specificity element in an ascending way + * Lower specificity will be sorted to the beginning of the array + * + * @param Rule $e1 The first element. + * @param Rule $e2 The second element. + * + * @return int + */ + public static function sortOnSpecificity(Rule $e1, Rule $e2) + { + $e1Specificity = $e1->getSpecificity(); + $value = $e1Specificity->compareTo($e2->getSpecificity()); + + // if the specificity is the same, use the order in which the element appeared + if ($value === 0) { + $value = $e1->getOrder() - $e2->getOrder(); + } + + return $value; + } +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Rule.php b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Rule.php new file mode 100644 index 00000000..563889e5 --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Rule.php @@ -0,0 +1,85 @@ +selector = $selector; + $this->properties = $properties; + $this->specificity = $specificity; + $this->order = $order; + } + + /** + * Get selector + * + * @return string + */ + public function getSelector() + { + return $this->selector; + } + + /** + * Get properties + * + * @return Property[] + */ + public function getProperties() + { + return $this->properties; + } + + /** + * Get specificity + * + * @return Specificity + */ + public function getSpecificity() + { + return $this->specificity; + } + + /** + * Get order + * + * @return int + */ + public function getOrder() + { + return $this->order; + } +} diff --git a/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php b/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php new file mode 100644 index 00000000..e40ae25d --- /dev/null +++ b/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php @@ -0,0 +1,240 @@ +cssConverter = new CssSelectorConverter(); + } + } + + /** + * Will inline the $css into the given $html + * + * Remark: if the html contains