@budibase/server 0.0.32 → 0.0.999-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +6 -0
- package/.yarnrc +1 -0
- package/Dockerfile +41 -0
- package/LICENSE +391 -377
- package/__mocks__/@elastic/elasticsearch.ts +24 -0
- package/__mocks__/@google-cloud/firestore.ts +36 -0
- package/__mocks__/@sendgrid/mail.ts +22 -0
- package/__mocks__/airtable.ts +8 -0
- package/__mocks__/arangojs.ts +24 -0
- package/__mocks__/aws-sdk.ts +80 -0
- package/__mocks__/mongodb.ts +39 -0
- package/__mocks__/mssql.ts +24 -0
- package/__mocks__/mysql2/promise.ts +17 -0
- package/__mocks__/mysql2.ts +14 -0
- package/__mocks__/node-fetch.ts +201 -0
- package/__mocks__/oracledb.ts +31 -0
- package/__mocks__/pg.ts +30 -0
- package/babel.config.js +3 -0
- package/build/entitlements.mac.plist +14 -0
- package/build/icon.icns +0 -0
- package/build/icon.png +0 -0
- package/build/icons/512x512.png +0 -0
- package/build/pouchdb.js +9 -0
- package/builder/assets/auth0-logo.6fa5973f.png +0 -0
- package/builder/assets/backups-default.8c011f1b.png +0 -0
- package/builder/assets/bb-emblem.05f7ae7a.svg +80 -0
- package/builder/assets/bb-space-man.5be51a45.svg +290 -0
- package/builder/assets/bb-spaceship.8f6e81e1.svg +227 -0
- package/builder/assets/bg.29e85dd5.png +0 -0
- package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
- package/builder/assets/bulgaria.bd68393d.png +0 -0
- package/builder/assets/covanta.72c46c1e.png +0 -0
- package/builder/assets/discord.c14881e9.svg +10 -0
- package/builder/assets/google-logo.c16467b8.png +0 -0
- package/builder/assets/index.c0265b74.css +6 -0
- package/builder/assets/index.c977bf31.js +1776 -0
- package/builder/assets/integromat.42212f11.png +0 -0
- package/builder/assets/listScreenPreview.599c0aae.png +0 -0
- package/builder/assets/microsoft-logo.07033b2a.png +0 -0
- package/builder/assets/oidc-logo.cb2fff74.png +0 -0
- package/builder/assets/okta-logo.61437d3d.png +0 -0
- package/builder/assets/onelogin-logo.181cc193.png +0 -0
- package/builder/assets/oracle.66592424.png +0 -0
- package/builder/assets/remixicon.0ac8bc3c.ttf +0 -0
- package/builder/assets/remixicon.64bb3a0f.eot +0 -0
- package/builder/assets/remixicon.a10268fe.svg +6835 -0
- package/builder/assets/remixicon.c2dacfbc.woff +0 -0
- package/builder/assets/remixicon.e61f0d10.woff2 +0 -0
- package/builder/assets/schnellecke.cf1837a8.png +0 -0
- package/builder/assets/slack.1e1f7cfb.svg +33 -0
- package/builder/assets/zapier.3fbd8f5c.png +0 -0
- package/builder/index.html +10 -13
- package/dist/api/controllers/analytics.js +46 -0
- package/dist/api/controllers/apikeys.js +72 -0
- package/dist/api/controllers/application.js +575 -0
- package/dist/api/controllers/auth.js +80 -0
- package/dist/api/controllers/automation.js +303 -0
- package/dist/api/controllers/backup.js +37 -0
- package/dist/api/controllers/cloud.js +130 -0
- package/dist/api/controllers/component.js +59 -0
- package/dist/api/controllers/datasource.js +306 -0
- package/dist/api/controllers/deploy/Deployment.js +53 -0
- package/dist/api/controllers/deploy/index.js +198 -0
- package/dist/api/controllers/dev.js +146 -0
- package/dist/api/controllers/integration.js +28 -0
- package/dist/api/controllers/layout.js +49 -0
- package/dist/api/controllers/metadata.js +63 -0
- package/dist/api/controllers/migrations.js +29 -0
- package/dist/api/controllers/ops.js +40 -0
- package/dist/api/controllers/permission.js +162 -0
- package/dist/api/controllers/plugin/file.js +24 -0
- package/dist/api/controllers/plugin/github.js +69 -0
- package/dist/api/controllers/plugin/index.js +112 -0
- package/dist/api/controllers/plugin/npm.js +58 -0
- package/dist/api/controllers/plugin/uploaders.js +11 -0
- package/dist/api/controllers/plugin/url.js +24 -0
- package/dist/api/controllers/plugin/utils.js +27 -0
- package/dist/api/controllers/public/applications.js +146 -0
- package/dist/api/controllers/public/mapping/applications.js +29 -0
- package/dist/api/controllers/public/mapping/index.js +11 -0
- package/dist/api/controllers/public/mapping/queries.js +36 -0
- package/dist/api/controllers/public/mapping/rows.js +24 -0
- package/dist/api/controllers/public/mapping/tables.js +23 -0
- package/dist/api/controllers/public/mapping/types.js +2 -0
- package/dist/api/controllers/public/mapping/users.js +29 -0
- package/dist/api/controllers/public/metrics.js +113 -0
- package/dist/api/controllers/public/queries.js +58 -0
- package/dist/api/controllers/public/rows.js +120 -0
- package/dist/api/controllers/public/tables.js +95 -0
- package/dist/api/controllers/public/users.js +93 -0
- package/dist/api/controllers/public/utils.js +56 -0
- package/dist/api/controllers/query/import/index.js +87 -0
- package/dist/api/controllers/query/import/sources/base/index.js +75 -0
- package/dist/api/controllers/query/import/sources/base/openapi.js +42 -0
- package/dist/api/controllers/query/import/sources/curl.js +99 -0
- package/dist/api/controllers/query/import/sources/openapi2.js +145 -0
- package/dist/api/controllers/query/import/sources/openapi3.js +177 -0
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +253 -0
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +1054 -0
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
- package/dist/api/controllers/query/index.js +299 -0
- package/dist/api/controllers/query/validation.js +53 -0
- package/dist/api/controllers/role.js +109 -0
- package/dist/api/controllers/routing.js +105 -0
- package/dist/api/controllers/row/ExternalRequest.js +676 -0
- package/dist/api/controllers/row/external.js +339 -0
- package/dist/api/controllers/row/index.js +203 -0
- package/dist/api/controllers/row/internal.js +502 -0
- package/dist/api/controllers/row/internalSearch.js +28 -0
- package/dist/api/controllers/row/staticFormula.js +165 -0
- package/dist/api/controllers/row/utils.js +183 -0
- package/dist/api/controllers/screen.js +110 -0
- package/dist/api/controllers/script.js +30 -0
- package/dist/api/controllers/static/index.js +268 -0
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +135 -0
- package/dist/api/controllers/static/templates/app.hbs +13 -0
- package/dist/api/controllers/static/templates/preview.hbs +117 -0
- package/dist/api/controllers/table/bulkFormula.js +173 -0
- package/dist/api/controllers/table/external.js +279 -0
- package/dist/api/controllers/table/index.js +179 -0
- package/dist/api/controllers/table/internal.js +194 -0
- package/dist/api/controllers/table/utils.js +374 -0
- package/dist/api/controllers/templates.js +56 -0
- package/dist/api/controllers/user.js +124 -0
- package/dist/api/controllers/view/exporters.js +44 -0
- package/dist/api/controllers/view/index.js +193 -0
- package/dist/api/controllers/view/utils.js +177 -0
- package/dist/api/controllers/view/viewBuilder.js +158 -0
- package/dist/api/controllers/webhook.js +134 -0
- package/dist/api/index.js +56 -0
- package/dist/api/routes/analytics.js +34 -0
- package/dist/api/routes/apikeys.js +37 -0
- package/dist/api/routes/application.js +48 -0
- package/dist/api/routes/auth.js +33 -0
- package/dist/api/routes/automation.js +50 -0
- package/dist/api/routes/backup.js +35 -0
- package/dist/api/routes/cloud.js +39 -0
- package/dist/api/routes/component.js +35 -0
- package/dist/api/routes/datasource.js +43 -0
- package/dist/api/routes/deploy.js +37 -0
- package/dist/api/routes/dev.js +49 -0
- package/dist/api/routes/index.js +77 -0
- package/dist/api/routes/integration.js +37 -0
- package/dist/api/routes/layout.js +37 -0
- package/dist/api/routes/metadata.js +40 -0
- package/dist/api/routes/migrations.js +36 -0
- package/dist/api/routes/ops.js +52 -0
- package/dist/api/routes/permission.js +44 -0
- package/dist/api/routes/plugin.js +39 -0
- package/dist/api/routes/public/applications.js +174 -0
- package/dist/api/routes/public/index.js +131 -0
- package/dist/api/routes/public/metrics.js +30 -0
- package/dist/api/routes/public/middleware/mapper.js +97 -0
- package/dist/api/routes/public/queries.js +72 -0
- package/dist/api/routes/public/rows.js +158 -0
- package/dist/api/routes/public/tables.js +152 -0
- package/dist/api/routes/public/users.js +135 -0
- package/dist/api/routes/public/utils/Endpoint.js +36 -0
- package/dist/api/routes/query.js +47 -0
- package/dist/api/routes/role.js +40 -0
- package/dist/api/routes/routing.js +39 -0
- package/dist/api/routes/row.js +239 -0
- package/dist/api/routes/screen.js +39 -0
- package/dist/api/routes/script.js +35 -0
- package/dist/api/routes/static.js +80 -0
- package/dist/api/routes/table.js +163 -0
- package/dist/api/routes/templates.js +37 -0
- package/dist/api/routes/user.js +43 -0
- package/dist/api/routes/utils/validators.js +238 -0
- package/dist/api/routes/view.js +42 -0
- package/dist/api/routes/webhook.js +43 -0
- package/dist/app.js +132 -0
- package/dist/automations/actions.js +137 -0
- package/dist/automations/automationUtils.js +173 -0
- package/dist/automations/bullboard.js +71 -0
- package/dist/automations/index.js +43 -0
- package/dist/automations/logging/index.js +53 -0
- package/dist/automations/steps/bash.js +111 -0
- package/dist/automations/steps/createRow.js +108 -0
- package/dist/automations/steps/delay.js +53 -0
- package/dist/automations/steps/deleteRow.js +96 -0
- package/dist/automations/steps/discord.js +116 -0
- package/dist/automations/steps/executeQuery.js +134 -0
- package/dist/automations/steps/executeScript.js +106 -0
- package/dist/automations/steps/filter.js +112 -0
- package/dist/automations/steps/integromat.js +119 -0
- package/dist/automations/steps/loop.js +54 -0
- package/dist/automations/steps/outgoingWebhook.js +166 -0
- package/dist/automations/steps/queryRows.js +216 -0
- package/dist/automations/steps/sendSmtpEmail.js +115 -0
- package/dist/automations/steps/serverLog.js +65 -0
- package/dist/automations/steps/slack.js +98 -0
- package/dist/automations/steps/updateRow.js +144 -0
- package/dist/automations/steps/utils.js +56 -0
- package/dist/automations/steps/zapier.js +117 -0
- package/dist/automations/triggerInfo/app.js +36 -0
- package/dist/automations/triggerInfo/cron.js +35 -0
- package/dist/automations/triggerInfo/index.js +40 -0
- package/dist/automations/triggerInfo/rowDeleted.js +36 -0
- package/dist/automations/triggerInfo/rowSaved.js +44 -0
- package/dist/automations/triggerInfo/rowUpdated.js +44 -0
- package/dist/automations/triggerInfo/webhook.js +40 -0
- package/dist/automations/triggers.js +180 -0
- package/dist/automations/utils.js +264 -0
- package/dist/constants/definitions.js +2 -0
- package/dist/constants/index.js +181 -0
- package/dist/constants/layouts.js +148 -0
- package/dist/constants/screens.js +51 -0
- package/dist/db/defaultData/datasource_bb_default.js +574 -0
- package/dist/db/defaultData/employeeImport.js +155 -0
- package/dist/db/defaultData/expensesImport.js +117 -0
- package/dist/db/defaultData/inventoryImport.js +109 -0
- package/dist/db/defaultData/jobsImport.js +152 -0
- package/dist/db/dynamoClient.js +124 -0
- package/dist/db/inMemoryView.js +62 -0
- package/dist/db/index.js +43 -0
- package/dist/db/linkedRows/LinkController.js +392 -0
- package/dist/db/linkedRows/LinkDocument.js +33 -0
- package/dist/db/linkedRows/index.js +206 -0
- package/dist/db/linkedRows/linkUtils.js +131 -0
- package/dist/db/newid.js +7 -0
- package/dist/db/utils.js +247 -0
- package/dist/db/views/staticViews.js +144 -0
- package/dist/ddApm.js +11 -0
- package/dist/definitions/automations.js +8 -0
- package/dist/definitions/common.js +2 -0
- package/dist/definitions/datasource.js +7 -0
- package/dist/definitions/openapi.js +6 -0
- package/dist/environment.js +113 -0
- package/dist/events/AutomationEmitter.js +53 -0
- package/dist/events/BudibaseEmitter.js +25 -0
- package/dist/events/docUpdates/index.js +17 -0
- package/dist/events/docUpdates/processors.js +18 -0
- package/dist/events/docUpdates/syncUsers.js +49 -0
- package/dist/events/index.js +11 -0
- package/dist/events/utils.js +43 -0
- package/dist/index.js +16 -0
- package/dist/integrations/airtable.js +147 -0
- package/dist/integrations/arangodb.js +103 -0
- package/dist/integrations/base/query.js +32 -0
- package/dist/integrations/base/sql.js +600 -0
- package/dist/integrations/base/sqlTable.js +160 -0
- package/dist/integrations/base/types.js +2 -0
- package/dist/integrations/couchdb.js +125 -0
- package/dist/integrations/dynamodb.js +194 -0
- package/dist/integrations/elasticsearch.js +186 -0
- package/dist/integrations/firebase.js +174 -0
- package/dist/integrations/googlesheets.js +455 -0
- package/dist/integrations/index.js +135 -0
- package/dist/integrations/microsoftSqlServer.js +273 -0
- package/dist/integrations/mongodb.js +614 -0
- package/dist/integrations/mysql.js +256 -0
- package/dist/integrations/oracle.js +375 -0
- package/dist/integrations/postgres.js +300 -0
- package/dist/integrations/queries/sql.js +84 -0
- package/dist/integrations/redis.js +168 -0
- package/dist/integrations/rest.js +400 -0
- package/dist/integrations/s3.js +237 -0
- package/dist/integrations/snowflake.js +99 -0
- package/dist/integrations/utils.js +295 -0
- package/dist/middleware/appInfo.js +22 -0
- package/dist/middleware/authorized.js +112 -0
- package/dist/middleware/builder.js +93 -0
- package/dist/middleware/currentapp.js +103 -0
- package/dist/middleware/joi-validator.js +43 -0
- package/dist/middleware/publicApi.js +25 -0
- package/dist/middleware/resourceId.js +59 -0
- package/dist/middleware/selfhost.js +24 -0
- package/dist/middleware/utils.js +8 -0
- package/dist/migrations/functions/appUrls.js +42 -0
- package/dist/migrations/functions/backfill/app/automations.js +31 -0
- package/dist/migrations/functions/backfill/app/datasources.js +28 -0
- package/dist/migrations/functions/backfill/app/layouts.js +33 -0
- package/dist/migrations/functions/backfill/app/queries.js +50 -0
- package/dist/migrations/functions/backfill/app/roles.js +28 -0
- package/dist/migrations/functions/backfill/app/screens.js +28 -0
- package/dist/migrations/functions/backfill/app/tables.js +37 -0
- package/dist/migrations/functions/backfill/app.js +176 -0
- package/dist/migrations/functions/backfill/global/configs.js +67 -0
- package/dist/migrations/functions/backfill/global/quotas.js +60 -0
- package/dist/migrations/functions/backfill/global/users.js +50 -0
- package/dist/migrations/functions/backfill/global.js +205 -0
- package/dist/migrations/functions/backfill/index.js +32 -0
- package/dist/migrations/functions/backfill/installation.js +80 -0
- package/dist/migrations/functions/syncQuotas.js +50 -0
- package/dist/migrations/functions/tableSettings.js +130 -0
- package/dist/migrations/functions/usageQuotas/index.js +16 -0
- package/dist/migrations/functions/usageQuotas/syncApps.js +25 -0
- package/dist/migrations/functions/usageQuotas/syncPlugins.js +23 -0
- package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +111 -0
- package/dist/migrations/tests/helpers.js +72 -0
- package/dist/migrations/tests/structures.js +37 -0
- package/dist/package.json +180 -0
- package/dist/sdk/app/applications/index.js +28 -0
- package/dist/sdk/app/applications/sync.js +164 -0
- package/dist/sdk/app/applications/utils.js +21 -0
- package/dist/sdk/app/automations/index.js +29 -0
- package/dist/sdk/app/automations/webhook.js +54 -0
- package/dist/sdk/app/backups/constants.js +6 -0
- package/dist/sdk/app/backups/exports.js +184 -0
- package/dist/sdk/app/backups/imports.js +170 -0
- package/dist/sdk/app/backups/index.js +29 -0
- package/dist/sdk/app/backups/statistics.js +73 -0
- package/dist/sdk/app/datasources/datasources.js +166 -0
- package/dist/sdk/app/datasources/index.js +27 -0
- package/dist/sdk/app/queries/index.js +27 -0
- package/dist/sdk/app/queries/queries.js +60 -0
- package/dist/sdk/app/rows/attachments.js +61 -0
- package/dist/sdk/app/rows/index.js +28 -0
- package/dist/sdk/app/rows/rows.js +30 -0
- package/dist/sdk/app/tables/index.js +65 -0
- package/dist/sdk/index.js +27 -0
- package/dist/sdk/plugins/index.js +27 -0
- package/dist/sdk/plugins/plugins.js +53 -0
- package/dist/sdk/users/index.js +27 -0
- package/dist/sdk/users/utils.js +87 -0
- package/dist/sdk/utils/index.js +29 -0
- package/dist/startup.js +158 -0
- package/dist/threads/automation.js +449 -0
- package/dist/threads/definitions.js +2 -0
- package/dist/threads/index.js +137 -0
- package/dist/threads/query.js +265 -0
- package/dist/threads/utils.js +122 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utilities/appDirectoryTemplate/package.json +10 -0
- package/dist/utilities/budibaseDir.js +5 -0
- package/dist/utilities/centralPath.js +27 -0
- package/dist/utilities/fileSystem/app.js +88 -0
- package/dist/utilities/fileSystem/clientLibrary.js +138 -0
- package/dist/utilities/fileSystem/filesystem.js +180 -0
- package/dist/utilities/fileSystem/index.js +21 -0
- package/dist/utilities/fileSystem/plugin.js +76 -0
- package/dist/utilities/fileSystem/processor.js +34 -0
- package/dist/utilities/fileSystem/template.js +47 -0
- package/dist/utilities/global.js +149 -0
- package/dist/utilities/index.js +143 -0
- package/dist/utilities/redis.js +117 -0
- package/dist/utilities/retry.js +30 -0
- package/dist/utilities/routing/index.js +39 -0
- package/dist/utilities/rowProcessor/index.js +284 -0
- package/dist/utilities/rowProcessor/map.js +99 -0
- package/dist/utilities/rowProcessor/utils.js +88 -0
- package/dist/utilities/schema.js +108 -0
- package/dist/utilities/scriptRunner.js +26 -0
- package/dist/utilities/security.js +57 -0
- package/dist/utilities/statusCodes.js +9 -0
- package/dist/utilities/usageQuota/rows.js +88 -0
- package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
- package/dist/utilities/users.js +57 -0
- package/dist/utilities/workerRequests.js +171 -0
- package/dist/watch.js +53 -0
- package/dist/websockets/client.js +14 -0
- package/dist/websockets/grid.js +60 -0
- package/dist/websockets/index.js +17 -0
- package/dist/websockets/websocket.js +78 -0
- package/docker_run.sh +7 -0
- package/jest-testcontainers-config.js +8 -0
- package/jest.config.ts +52 -0
- package/nodemon.json +10 -0
- package/package.json +166 -31
- package/pm2.config.js +9 -0
- package/scripts/account.js +8 -0
- package/scripts/dev/manage.js +119 -0
- package/scripts/docs/README.md +31 -0
- package/scripts/docs/generate.js +74 -0
- package/scripts/docs/toSwagger.js +320 -0
- package/scripts/exportAppTemplate.js +64 -0
- package/scripts/integrations/customer-categories/docker-compose.yml +28 -0
- package/scripts/integrations/customer-categories/init.sql +41 -0
- package/scripts/integrations/customer-categories/reset.sh +3 -0
- package/scripts/integrations/mssql/data/Dockerfile +9 -0
- package/scripts/integrations/mssql/data/entrypoint.sh +25 -0
- package/scripts/integrations/mssql/data/setup.sql +80 -0
- package/scripts/integrations/mssql/docker-compose.yaml +12 -0
- package/scripts/integrations/mssql/reset.sh +3 -0
- package/scripts/integrations/mysql/docker-compose.yaml +21 -0
- package/scripts/integrations/mysql/init.sql +32 -0
- package/scripts/integrations/mysql/reset.sh +3 -0
- package/scripts/integrations/oracle/docker-compose.yml +19 -0
- package/scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip +0 -0
- package/scripts/integrations/oracle/instantclient/linux/arm64/install.sh +23 -0
- package/scripts/integrations/oracle/instantclient/linux/install.sh +10 -0
- package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
- package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
- package/scripts/integrations/oracle/oracle.md +90 -0
- package/scripts/integrations/pg-json/docker-compose.yml +28 -0
- package/scripts/integrations/pg-json/init.sql +22 -0
- package/scripts/integrations/pg-json/reset.sh +3 -0
- package/scripts/integrations/postgres/docker-compose.yml +28 -0
- package/scripts/integrations/postgres/emp-skill.sql +46 -0
- package/scripts/integrations/postgres/emp-territory.sql +32 -0
- package/scripts/integrations/postgres/init.sql +57 -0
- package/scripts/integrations/postgres/reset.sh +3 -0
- package/scripts/integrations/service-vehicles/docker-compose.yml +28 -0
- package/scripts/integrations/service-vehicles/init.sql +52 -0
- package/scripts/integrations/service-vehicles/reset.sh +3 -0
- package/scripts/load/create-many-apps.js +24 -0
- package/scripts/load/create-many-rows.js +30 -0
- package/scripts/load/utils.js +66 -0
- package/scripts/localdomain.js +52 -0
- package/scripts/multiTenancy.js +8 -0
- package/scripts/selfhost.js +8 -0
- package/scripts/test.sh +14 -0
- package/scripts/watchtower-hooks/post-check.sh +1 -0
- package/scripts/watchtower-hooks/post-update.sh +1 -0
- package/scripts/watchtower-hooks/pre-check.sh +1 -0
- package/scripts/watchtower-hooks/pre-update.sh +1 -0
- package/specs/generate.ts +92 -0
- package/specs/openapi.json +2782 -0
- package/specs/openapi.yaml +2111 -0
- package/specs/parameters.ts +59 -0
- package/specs/resources/application.ts +137 -0
- package/specs/resources/index.ts +26 -0
- package/specs/resources/metrics.ts +81 -0
- package/specs/resources/misc.ts +128 -0
- package/specs/resources/query.ts +217 -0
- package/specs/resources/row.ts +124 -0
- package/specs/resources/table.ts +197 -0
- package/specs/resources/user.ts +132 -0
- package/specs/resources/utils/Resource.ts +39 -0
- package/specs/resources/utils/index.ts +11 -0
- package/specs/security.ts +7 -0
- package/src/api/controllers/analytics.ts +35 -0
- package/src/api/controllers/apikeys.ts +54 -0
- package/src/api/controllers/application.ts +633 -0
- package/src/api/controllers/auth.ts +72 -0
- package/src/api/controllers/automation.ts +302 -0
- package/src/api/controllers/backup.ts +21 -0
- package/src/api/controllers/cloud.ts +119 -0
- package/src/api/controllers/component.ts +58 -0
- package/src/api/controllers/datasource.ts +351 -0
- package/src/api/controllers/deploy/Deployment.ts +59 -0
- package/src/api/controllers/deploy/index.ts +203 -0
- package/src/api/controllers/dev.ts +129 -0
- package/src/api/controllers/integration.ts +13 -0
- package/src/api/controllers/layout.ts +47 -0
- package/src/api/controllers/metadata.ts +42 -0
- package/src/api/controllers/migrations.ts +14 -0
- package/src/api/controllers/ops.ts +32 -0
- package/src/api/controllers/permission.ts +178 -0
- package/src/api/controllers/plugin/file.ts +15 -0
- package/src/api/controllers/plugin/github.ts +75 -0
- package/src/api/controllers/plugin/index.ts +101 -0
- package/src/api/controllers/plugin/npm.ts +56 -0
- package/src/api/controllers/plugin/uploaders.ts +4 -0
- package/src/api/controllers/plugin/url.ts +12 -0
- package/src/api/controllers/plugin/utils.ts +17 -0
- package/src/api/controllers/public/applications.ts +100 -0
- package/src/api/controllers/public/mapping/applications.ts +32 -0
- package/src/api/controllers/public/mapping/index.ts +13 -0
- package/src/api/controllers/public/mapping/queries.ts +39 -0
- package/src/api/controllers/public/mapping/rows.ts +31 -0
- package/src/api/controllers/public/mapping/tables.ts +26 -0
- package/src/api/controllers/public/mapping/types.ts +21 -0
- package/src/api/controllers/public/mapping/users.ts +32 -0
- package/src/api/controllers/public/metrics.ts +251 -0
- package/src/api/controllers/public/queries.ts +20 -0
- package/src/api/controllers/public/rows.ts +81 -0
- package/src/api/controllers/public/tables.ts +56 -0
- package/src/api/controllers/public/users.ts +80 -0
- package/src/api/controllers/public/utils.ts +45 -0
- package/src/api/controllers/query/import/index.ts +96 -0
- package/src/api/controllers/query/import/sources/base/index.ts +98 -0
- package/src/api/controllers/query/import/sources/base/openapi.ts +24 -0
- package/src/api/controllers/query/import/sources/curl.ts +106 -0
- package/src/api/controllers/query/import/sources/openapi2.ts +167 -0
- package/src/api/controllers/query/import/sources/openapi3.ts +209 -0
- package/src/api/controllers/query/import/sources/tests/curl/curl.spec.js +103 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/delete.txt +1 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/empty-body.txt +2 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/get.txt +1 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/headers.txt +3 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/patch.txt +2 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/path.txt +1 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/post.txt +2 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/put.txt +2 -0
- package/src/api/controllers/query/import/sources/tests/curl/data/query.txt +1 -0
- package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +253 -0
- package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.yaml +160 -0
- package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +1054 -0
- package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.yaml +711 -0
- package/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js +238 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +153 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +804 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +240 -0
- package/src/api/controllers/query/import/tests/index.spec.js +162 -0
- package/src/api/controllers/query/index.ts +307 -0
- package/src/api/controllers/query/validation.ts +50 -0
- package/src/api/controllers/role.ts +104 -0
- package/src/api/controllers/routing.ts +95 -0
- package/src/api/controllers/row/ExternalRequest.ts +821 -0
- package/src/api/controllers/row/external.ts +304 -0
- package/src/api/controllers/row/index.ts +162 -0
- package/src/api/controllers/row/internal.ts +500 -0
- package/src/api/controllers/row/internalSearch.ts +18 -0
- package/src/api/controllers/row/staticFormula.ts +170 -0
- package/src/api/controllers/row/utils.ts +156 -0
- package/src/api/controllers/screen.ts +126 -0
- package/src/api/controllers/script.ts +12 -0
- package/src/api/controllers/static/index.ts +241 -0
- package/src/api/controllers/static/templates/BudibaseApp.svelte +135 -0
- package/src/api/controllers/static/templates/app.hbs +13 -0
- package/src/api/controllers/static/templates/preview.hbs +117 -0
- package/src/api/controllers/table/bulkFormula.ts +188 -0
- package/src/api/controllers/table/external.ts +364 -0
- package/src/api/controllers/table/index.ts +143 -0
- package/src/api/controllers/table/internal.ts +191 -0
- package/src/api/controllers/table/tests/utils.spec.ts +97 -0
- package/src/api/controllers/table/utils.ts +422 -0
- package/src/api/controllers/templates.ts +43 -0
- package/src/api/controllers/user.ts +97 -0
- package/src/api/controllers/view/exporters.ts +43 -0
- package/src/api/controllers/view/index.ts +192 -0
- package/src/api/controllers/view/tests/__snapshots__/viewBuilder.spec.js.snap +147 -0
- package/src/api/controllers/view/tests/viewBuilder.spec.js +65 -0
- package/src/api/controllers/view/utils.ts +165 -0
- package/src/api/controllers/view/viewBuilder.ts +203 -0
- package/src/api/controllers/webhook.ts +100 -0
- package/src/api/index.ts +63 -0
- package/src/api/routes/analytics.ts +9 -0
- package/src/api/routes/apikeys.ts +12 -0
- package/src/api/routes/application.ts +57 -0
- package/src/api/routes/auth.ts +8 -0
- package/src/api/routes/automation.ts +87 -0
- package/src/api/routes/backup.ts +14 -0
- package/src/api/routes/cloud.ts +18 -0
- package/src/api/routes/component.ts +14 -0
- package/src/api/routes/datasource.ts +60 -0
- package/src/api/routes/deploy.ts +20 -0
- package/src/api/routes/dev.ts +38 -0
- package/src/api/routes/index.ts +73 -0
- package/src/api/routes/integration.ts +16 -0
- package/src/api/routes/layout.ts +16 -0
- package/src/api/routes/metadata.ts +38 -0
- package/src/api/routes/migrations.ts +14 -0
- package/src/api/routes/ops.ts +30 -0
- package/src/api/routes/permission.ts +41 -0
- package/src/api/routes/plugin.ts +22 -0
- package/src/api/routes/public/applications.ts +195 -0
- package/src/api/routes/public/index.ts +145 -0
- package/src/api/routes/public/metrics.ts +28 -0
- package/src/api/routes/public/middleware/mapper.ts +85 -0
- package/src/api/routes/public/queries.ts +76 -0
- package/src/api/routes/public/rows.ts +171 -0
- package/src/api/routes/public/tables.ts +167 -0
- package/src/api/routes/public/tests/compare.spec.ts +185 -0
- package/src/api/routes/public/tests/metrics.spec.js +34 -0
- package/src/api/routes/public/tests/users.spec.js +38 -0
- package/src/api/routes/public/tests/utils.ts +45 -0
- package/src/api/routes/public/users.ts +142 -0
- package/src/api/routes/public/utils/Endpoint.ts +51 -0
- package/src/api/routes/query.ts +61 -0
- package/src/api/routes/role.ts +24 -0
- package/src/api/routes/routing.ts +14 -0
- package/src/api/routes/row.ts +266 -0
- package/src/api/routes/screen.ts +23 -0
- package/src/api/routes/script.ts +10 -0
- package/src/api/routes/static.ts +65 -0
- package/src/api/routes/table.ts +170 -0
- package/src/api/routes/templates.ts +16 -0
- package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +93 -0
- package/src/api/routes/tests/__snapshots__/view.spec.js.snap +38 -0
- package/src/api/routes/tests/analytics.spec.js +62 -0
- package/src/api/routes/tests/apikeys.spec.js +59 -0
- package/src/api/routes/tests/appSync.spec.ts +31 -0
- package/src/api/routes/tests/application.spec.ts +327 -0
- package/src/api/routes/tests/auth.spec.js +24 -0
- package/src/api/routes/tests/automation.spec.js +349 -0
- package/src/api/routes/tests/backup.spec.ts +45 -0
- package/src/api/routes/tests/cloud.spec.ts +54 -0
- package/src/api/routes/tests/component.spec.js +32 -0
- package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
- package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
- package/src/api/routes/tests/data/export-test.tar.gz +0 -0
- package/src/api/routes/tests/data/export.txt +1 -0
- package/src/api/routes/tests/data/old-app.txt +3 -0
- package/src/api/routes/tests/datasource.spec.ts +238 -0
- package/src/api/routes/tests/dev.spec.js +40 -0
- package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
- package/src/api/routes/tests/integration.spec.js +52 -0
- package/src/api/routes/tests/internalSearch.spec.js +197 -0
- package/src/api/routes/tests/layout.spec.js +59 -0
- package/src/api/routes/tests/metadata.spec.js +65 -0
- package/src/api/routes/tests/misc.spec.js +91 -0
- package/src/api/routes/tests/permissions.spec.js +133 -0
- package/src/api/routes/tests/plugin.spec.ts +179 -0
- package/src/api/routes/tests/query.seq.spec.js +538 -0
- package/src/api/routes/tests/role.spec.js +131 -0
- package/src/api/routes/tests/routing.spec.js +116 -0
- package/src/api/routes/tests/row.spec.js +573 -0
- package/src/api/routes/tests/screen.spec.js +103 -0
- package/src/api/routes/tests/static.spec.js +140 -0
- package/src/api/routes/tests/table.spec.js +302 -0
- package/src/api/routes/tests/templates.spec.js +24 -0
- package/src/api/routes/tests/user.spec.js +208 -0
- package/src/api/routes/tests/utilities/TestFunctions.ts +177 -0
- package/src/api/routes/tests/utilities/index.ts +96 -0
- package/src/api/routes/tests/view.spec.js +419 -0
- package/src/api/routes/tests/webhook.spec.js +134 -0
- package/src/api/routes/user.ts +46 -0
- package/src/api/routes/utils/validators.ts +240 -0
- package/src/api/routes/view.ts +34 -0
- package/src/api/routes/webhook.ts +27 -0
- package/src/app.ts +114 -0
- package/src/automations/actions.ts +109 -0
- package/src/automations/automationUtils.ts +163 -0
- package/src/automations/bullboard.ts +38 -0
- package/src/automations/index.ts +26 -0
- package/src/automations/logging/index.ts +38 -0
- package/src/automations/steps/bash.ts +81 -0
- package/src/automations/steps/createRow.ts +102 -0
- package/src/automations/steps/delay.ts +46 -0
- package/src/automations/steps/deleteRow.ts +91 -0
- package/src/automations/steps/discord.ts +106 -0
- package/src/automations/steps/executeQuery.ts +98 -0
- package/src/automations/steps/executeScript.ts +83 -0
- package/src/automations/steps/filter.ts +105 -0
- package/src/automations/steps/integromat.ts +110 -0
- package/src/automations/steps/loop.ts +58 -0
- package/src/automations/steps/outgoingWebhook.ts +141 -0
- package/src/automations/steps/queryRows.ts +196 -0
- package/src/automations/steps/sendSmtpEmail.ts +92 -0
- package/src/automations/steps/serverLog.ts +59 -0
- package/src/automations/steps/slack.ts +87 -0
- package/src/automations/steps/updateRow.ts +121 -0
- package/src/automations/steps/utils.ts +46 -0
- package/src/automations/steps/zapier.ts +108 -0
- package/src/automations/tests/automation.spec.ts +99 -0
- package/src/automations/tests/bash.spec.js +34 -0
- package/src/automations/tests/createRow.spec.ts +46 -0
- package/src/automations/tests/delay.spec.js +16 -0
- package/src/automations/tests/deleteRow.spec.ts +55 -0
- package/src/automations/tests/discord.spec.js +27 -0
- package/src/automations/tests/executeQuery.spec.js +48 -0
- package/src/automations/tests/executeScript.spec.js +48 -0
- package/src/automations/tests/filter.spec.js +49 -0
- package/src/automations/tests/loop.spec.ts +45 -0
- package/src/automations/tests/outgoingWebhook.spec.js +39 -0
- package/src/automations/tests/queryRows.spec.js +117 -0
- package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
- package/src/automations/tests/serverLog.spec.js +22 -0
- package/src/automations/tests/updateRow.spec.js +44 -0
- package/src/automations/tests/utilities/index.ts +60 -0
- package/src/automations/tests/zapier.spec.js +27 -0
- package/src/automations/triggerInfo/app.ts +40 -0
- package/src/automations/triggerInfo/cron.ts +39 -0
- package/src/automations/triggerInfo/index.ts +15 -0
- package/src/automations/triggerInfo/rowDeleted.ts +40 -0
- package/src/automations/triggerInfo/rowSaved.ts +48 -0
- package/src/automations/triggerInfo/rowUpdated.ts +48 -0
- package/src/automations/triggerInfo/webhook.ts +44 -0
- package/src/automations/triggers.ts +156 -0
- package/src/automations/unitTests/automationUtils.spec.ts +133 -0
- package/src/automations/utils.ts +267 -0
- package/src/constants/definitions.ts +42 -0
- package/src/constants/index.ts +183 -0
- package/src/constants/layouts.ts +147 -0
- package/src/constants/screens.ts +48 -0
- package/src/db/defaultData/datasource_bb_default.ts +654 -0
- package/src/db/defaultData/employeeImport.ts +152 -0
- package/src/db/defaultData/expensesImport.ts +114 -0
- package/src/db/defaultData/inventoryImport.ts +106 -0
- package/src/db/defaultData/jobsImport.ts +158 -0
- package/src/db/dynamoClient.ts +147 -0
- package/src/db/inMemoryView.ts +55 -0
- package/src/db/index.ts +16 -0
- package/src/db/linkedRows/LinkController.ts +445 -0
- package/src/db/linkedRows/LinkDocument.ts +60 -0
- package/src/db/linkedRows/index.ts +217 -0
- package/src/db/linkedRows/linkUtils.ts +125 -0
- package/src/db/newid.ts +5 -0
- package/src/db/tests/linkController.spec.js +236 -0
- package/src/db/tests/linkTests.spec.js +65 -0
- package/src/db/utils.ts +272 -0
- package/src/db/views/staticViews.ts +132 -0
- package/src/ddApm.ts +7 -0
- package/src/definitions/automations.ts +33 -0
- package/src/definitions/common.ts +54 -0
- package/src/definitions/datasource.ts +9 -0
- package/src/definitions/openapi.ts +1233 -0
- package/src/environment.ts +125 -0
- package/src/events/AutomationEmitter.ts +58 -0
- package/src/events/BudibaseEmitter.ts +29 -0
- package/src/events/docUpdates/index.ts +1 -0
- package/src/events/docUpdates/processors.ts +14 -0
- package/src/events/docUpdates/syncUsers.ts +35 -0
- package/src/events/index.ts +6 -0
- package/src/events/utils.ts +78 -0
- package/src/index.ts +16 -0
- package/src/integration-test/postgres.spec.ts +1026 -0
- package/src/integrations/airtable.ts +148 -0
- package/src/integrations/arangodb.ts +110 -0
- package/src/integrations/base/query.ts +18 -0
- package/src/integrations/base/sql.ts +651 -0
- package/src/integrations/base/sqlTable.ts +202 -0
- package/src/integrations/base/types.ts +134 -0
- package/src/integrations/couchdb.ts +133 -0
- package/src/integrations/dynamodb.ts +220 -0
- package/src/integrations/elasticsearch.ts +187 -0
- package/src/integrations/firebase.ts +187 -0
- package/src/integrations/googlesheets.ts +511 -0
- package/src/integrations/index.ts +125 -0
- package/src/integrations/microsoftSqlServer.ts +312 -0
- package/src/integrations/mongodb.ts +638 -0
- package/src/integrations/mysql.ts +300 -0
- package/src/integrations/oracle.ts +435 -0
- package/src/integrations/postgres.ts +336 -0
- package/src/integrations/queries/sql.ts +81 -0
- package/src/integrations/redis.ts +163 -0
- package/src/integrations/rest.ts +436 -0
- package/src/integrations/s3.ts +260 -0
- package/src/integrations/snowflake.ts +97 -0
- package/src/integrations/tests/TestConfiguration.js +0 -0
- package/src/integrations/tests/airtable.spec.ts +75 -0
- package/src/integrations/tests/arangodb.spec.ts +38 -0
- package/src/integrations/tests/couchdb.spec.ts +86 -0
- package/src/integrations/tests/dynamodb.spec.ts +155 -0
- package/src/integrations/tests/elasticsearch.spec.ts +82 -0
- package/src/integrations/tests/firebase.spec.ts +97 -0
- package/src/integrations/tests/googlesheets.spec.ts +126 -0
- package/src/integrations/tests/microsoftSqlServer.spec.ts +56 -0
- package/src/integrations/tests/mongo.spec.ts +334 -0
- package/src/integrations/tests/mysql.spec.ts +133 -0
- package/src/integrations/tests/oracle.spec.ts +96 -0
- package/src/integrations/tests/postgres.spec.ts +81 -0
- package/src/integrations/tests/redis.spec.ts +88 -0
- package/src/integrations/tests/rest.spec.ts +595 -0
- package/src/integrations/tests/s3.spec.ts +112 -0
- package/src/integrations/tests/sql.spec.ts +639 -0
- package/src/integrations/utils.ts +330 -0
- package/src/middleware/appInfo.ts +20 -0
- package/src/middleware/authorized.ts +131 -0
- package/src/middleware/builder.ts +97 -0
- package/src/middleware/currentapp.ts +112 -0
- package/src/middleware/joi-validator.ts +40 -0
- package/src/middleware/publicApi.ts +21 -0
- package/src/middleware/resourceId.ts +66 -0
- package/src/middleware/selfhost.ts +12 -0
- package/src/middleware/tests/authorized.spec.js +163 -0
- package/src/middleware/tests/currentapp.spec.js +207 -0
- package/src/middleware/tests/resourceId.spec.js +105 -0
- package/src/middleware/tests/selfhost.spec.js +43 -0
- package/src/middleware/utils.ts +9 -0
- package/src/migrations/functions/appUrls.ts +27 -0
- package/src/migrations/functions/backfill/app/automations.ts +26 -0
- package/src/migrations/functions/backfill/app/datasources.ts +22 -0
- package/src/migrations/functions/backfill/app/layouts.ts +29 -0
- package/src/migrations/functions/backfill/app/queries.ts +47 -0
- package/src/migrations/functions/backfill/app/roles.ts +22 -0
- package/src/migrations/functions/backfill/app/screens.ts +22 -0
- package/src/migrations/functions/backfill/app/tables.ts +27 -0
- package/src/migrations/functions/backfill/app.ts +149 -0
- package/src/migrations/functions/backfill/global/configs.ts +73 -0
- package/src/migrations/functions/backfill/global/quotas.ts +60 -0
- package/src/migrations/functions/backfill/global/users.ts +49 -0
- package/src/migrations/functions/backfill/global.ts +213 -0
- package/src/migrations/functions/backfill/index.ts +7 -0
- package/src/migrations/functions/backfill/installation.ts +50 -0
- package/src/migrations/functions/syncQuotas.ts +15 -0
- package/src/migrations/functions/tableSettings.ts +145 -0
- package/src/migrations/functions/tests/appUrls.spec.js +26 -0
- package/src/migrations/functions/tests/syncQuotas.spec.js +26 -0
- package/src/migrations/functions/tests/tableSettings.spec.ts +144 -0
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +34 -0
- package/src/migrations/functions/usageQuotas/index.ts +3 -0
- package/src/migrations/functions/usageQuotas/syncApps.ts +14 -0
- package/src/migrations/functions/usageQuotas/syncPlugins.ts +10 -0
- package/src/migrations/functions/usageQuotas/syncRows.ts +27 -0
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +35 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +53 -0
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +115 -0
- package/src/migrations/tests/helpers.ts +40 -0
- package/src/migrations/tests/index.spec.ts +142 -0
- package/src/migrations/tests/structures.ts +67 -0
- package/src/sdk/app/applications/index.ts +7 -0
- package/src/sdk/app/applications/sync.ts +168 -0
- package/src/sdk/app/applications/tests/sync.spec.ts +137 -0
- package/src/sdk/app/applications/utils.ts +17 -0
- package/src/sdk/app/automations/index.ts +5 -0
- package/src/sdk/app/automations/webhook.ts +43 -0
- package/src/sdk/app/backups/constants.ts +3 -0
- package/src/sdk/app/backups/exports.ts +195 -0
- package/src/sdk/app/backups/imports.ts +185 -0
- package/src/sdk/app/backups/index.ts +9 -0
- package/src/sdk/app/backups/statistics.ts +69 -0
- package/src/sdk/app/datasources/datasources.ts +162 -0
- package/src/sdk/app/datasources/index.ts +5 -0
- package/src/sdk/app/queries/index.ts +5 -0
- package/src/sdk/app/queries/queries.ts +50 -0
- package/src/sdk/app/rows/attachments.ts +60 -0
- package/src/sdk/app/rows/index.ts +7 -0
- package/src/sdk/app/rows/rows.ts +18 -0
- package/src/sdk/app/tables/index.ts +63 -0
- package/src/sdk/index.ts +24 -0
- package/src/sdk/plugins/index.ts +5 -0
- package/src/sdk/plugins/plugins.ts +41 -0
- package/src/sdk/tests/attachments.spec.ts +76 -0
- package/src/sdk/users/index.ts +5 -0
- package/src/sdk/users/tests/utils.spec.ts +128 -0
- package/src/sdk/users/utils.ts +93 -0
- package/src/sdk/utils/index.ts +16 -0
- package/src/startup.ts +138 -0
- package/src/tests/jestEnv.ts +11 -0
- package/src/tests/jestSetup.ts +22 -0
- package/src/tests/utilities/TestConfiguration.ts +768 -0
- package/src/tests/utilities/controllers.ts +14 -0
- package/src/tests/utilities/index.ts +11 -0
- package/src/tests/utilities/structures.ts +289 -0
- package/src/threads/automation.ts +502 -0
- package/src/threads/definitions.ts +21 -0
- package/src/threads/index.ts +111 -0
- package/src/threads/query.ts +305 -0
- package/src/threads/utils.ts +96 -0
- package/src/utilities/appDirectoryTemplate/package.json +10 -0
- package/src/utilities/budibaseDir.ts +3 -0
- package/src/utilities/centralPath.ts +22 -0
- package/src/utilities/fileSystem/app.ts +79 -0
- package/src/utilities/fileSystem/clientLibrary.ts +154 -0
- package/src/utilities/fileSystem/filesystem.ts +168 -0
- package/src/utilities/fileSystem/index.ts +5 -0
- package/src/utilities/fileSystem/plugin.ts +73 -0
- package/src/utilities/fileSystem/processor.ts +19 -0
- package/src/utilities/fileSystem/template.ts +36 -0
- package/src/utilities/global.ts +153 -0
- package/src/utilities/index.ts +134 -0
- package/src/utilities/redis.ts +88 -0
- package/src/utilities/retry.ts +18 -0
- package/src/utilities/routing/index.ts +32 -0
- package/src/utilities/rowProcessor/index.ts +279 -0
- package/src/utilities/rowProcessor/map.ts +96 -0
- package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
- package/src/utilities/rowProcessor/utils.ts +96 -0
- package/src/utilities/schema.ts +141 -0
- package/src/utilities/scriptRunner.ts +28 -0
- package/src/utilities/security.ts +65 -0
- package/{utilities/statusCodes.js → src/utilities/statusCodes.ts} +1 -1
- package/src/utilities/tests/test.csv +4 -0
- package/src/utilities/usageQuota/rows.ts +80 -0
- package/src/utilities/usageQuota/usageQuoteReset.ts +18 -0
- package/src/utilities/users.ts +49 -0
- package/src/utilities/workerRequests.ts +188 -0
- package/src/watch.ts +37 -0
- package/src/websockets/client.ts +11 -0
- package/src/websockets/grid.ts +55 -0
- package/src/websockets/index.ts +14 -0
- package/src/websockets/websocket.ts +83 -0
- package/tsconfig.build.json +28 -0
- package/tsconfig.json +22 -0
- package/app.js +0 -20
- package/appPackages/_master/access_levels.json +0 -175
- package/appPackages/_master/appDefinition.json +0 -527
- package/appPackages/_master/main.js +0 -125
- package/appPackages/_master/node_modules/.yarn-integrity +0 -20
- package/appPackages/_master/node_modules/@budibase/materialdesign-components/README.md +0 -33
- package/appPackages/_master/node_modules/@budibase/materialdesign-components/components.json +0 -249
- package/appPackages/_master/node_modules/@budibase/materialdesign-components/dist/index.js +0 -11282
- package/appPackages/_master/node_modules/@budibase/materialdesign-components/dist/index.js.map +0 -1
- package/appPackages/_master/node_modules/@budibase/materialdesign-components/package.json +0 -50
- package/appPackages/_master/node_modules/@budibase/standard-components/README.md +0 -33
- package/appPackages/_master/node_modules/@budibase/standard-components/components.json +0 -239
- package/appPackages/_master/node_modules/@budibase/standard-components/dist/generators.js +0 -198
- package/appPackages/_master/node_modules/@budibase/standard-components/dist/index.js +0 -3460
- package/appPackages/_master/node_modules/@budibase/standard-components/dist/index.js.map +0 -1
- package/appPackages/_master/node_modules/@budibase/standard-components/package.json +0 -38
- package/appPackages/_master/package-lock.json +0 -247
- package/appPackages/_master/package.json +0 -14
- package/appPackages/_master/pages/main/page.json +0 -199
- package/appPackages/_master/pages/main/screens/Apps List.json +0 -131
- package/appPackages/_master/pages/main/screens/Manage App.json +0 -292
- package/appPackages/_master/pages/main/screens/New App.json +0 -410
- package/appPackages/_master/pages/main/screens/New Instance.json +0 -227
- package/appPackages/_master/pages/unauthenticated/page.json +0 -83
- package/appPackages/_master/plugins.js +0 -3
- package/appPackages/_master/public/_shared/budibase-logo.png +0 -0
- package/appPackages/_master/public/main/budibase-client.js +0 -25115
- package/appPackages/_master/public/main/budibase-client.js.map +0 -1
- package/appPackages/_master/public/main/index.html +0 -48
- package/appPackages/_master/public/main/index.js +0 -3397
- package/appPackages/_master/public/main/index.js.map +0 -1
- package/appPackages/_master/public/unauthenticated/budibase-client.js +0 -25115
- package/appPackages/_master/public/unauthenticated/budibase-client.js.map +0 -1
- package/appPackages/_master/public/unauthenticated/index.html +0 -40
- package/appPackages/_master/public/unauthenticated/index.js +0 -3397
- package/appPackages/_master/public/unauthenticated/index.js.map +0 -1
- package/appPackages/_master/yarn.lock +0 -13
- package/builder/__app.html +0 -22
- package/builder/assets/budibase-emblem-white.svg +0 -29
- package/builder/assets/budibase-logo-only.png +0 -0
- package/builder/assets/budibase-logo-white.png +0 -0
- package/builder/assets/budibase-logo.png +0 -0
- package/builder/assets/javascript-logo.svg +0 -1
- package/builder/assets/roboto-v20-latin-ext_latin-300.woff +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-300.woff2 +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-500.woff +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-500.woff2 +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-700.woff +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-700.woff2 +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-900.woff +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-900.woff2 +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-regular.woff +0 -0
- package/builder/assets/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
- package/builder/budibase-client.esm.mjs +0 -24948
- package/builder/budibase.css +0 -120
- package/builder/bundle.css +0 -70
- package/builder/bundle.css.map +0 -146
- package/builder/bundle.js +0 -99294
- package/builder/bundle.js.map +0 -1
- package/builder/codemirror.css +0 -349
- package/builder/favicon.png +0 -0
- package/builder/flatpickr.css +0 -784
- package/builder/fonts.css +0 -47
- package/builder/global.css +0 -111
- package/builder/monokai.css +0 -41
- package/builder/uikit.min.css +0 -1
- package/config.contributors.js +0 -13
- package/config.dev.js +0 -13
- package/config.sample.js +0 -33
- package/index.js +0 -24
- package/initialise/buildAppContext.js +0 -11
- package/initialise/createInstanceDb.js +0 -37
- package/initialise/createMasterDb.js +0 -34
- package/initialise/initialiseBudibase.js +0 -1
- package/initialise/initialiseRuntimePackages.js +0 -42
- package/middleware/routeHandlers/aggregatesPost.js +0 -12
- package/middleware/routeHandlers/appDefault.js +0 -21
- package/middleware/routeHandlers/authenticate.js +0 -15
- package/middleware/routeHandlers/changeMyPassword.js +0 -9
- package/middleware/routeHandlers/createTemporaryAccess.js +0 -17
- package/middleware/routeHandlers/createUser.js +0 -10
- package/middleware/routeHandlers/deleteRecord.js +0 -9
- package/middleware/routeHandlers/disableUser.js +0 -11
- package/middleware/routeHandlers/enableUser.js +0 -6
- package/middleware/routeHandlers/executeAction.js +0 -9
- package/middleware/routeHandlers/getAccessLevels.js +0 -6
- package/middleware/routeHandlers/getRecord.js +0 -15
- package/middleware/routeHandlers/getUsers.js +0 -6
- package/middleware/routeHandlers/helpers.js +0 -15
- package/middleware/routeHandlers/index.js +0 -45
- package/middleware/routeHandlers/listRecordsGet.js +0 -8
- package/middleware/routeHandlers/listRecordsPost.js +0 -12
- package/middleware/routeHandlers/lookupField.js +0 -14
- package/middleware/routeHandlers/postFiles.js +0 -13
- package/middleware/routeHandlers/saveAppHierarchy.js +0 -6
- package/middleware/routeHandlers/saveRecord.js +0 -6
- package/middleware/routeHandlers/setPasswordFromTemporaryCode.js +0 -20
- package/middleware/routeHandlers/upgradeData.js +0 -11
- package/middleware/routers.js +0 -330
- package/middleware/session.js +0 -24
- package/utilities/budibaseApi.js +0 -84
- package/utilities/builder/buildPage.js +0 -164
- package/utilities/builder/componentLibraryInfo.js +0 -77
- package/utilities/builder/convertCssToFiles.js +0 -43
- package/utilities/builder/deleteCodeMeta.js +0 -9
- package/utilities/builder/getPages.js +0 -20
- package/utilities/builder/index.js +0 -165
- package/utilities/builder/index.template.html +0 -44
- package/utilities/builder/listScreens.js +0 -48
- package/utilities/builder/publicPath.js +0 -3
- package/utilities/builder/saveBackend.js +0 -28
- package/utilities/constructHierarchy.js +0 -8
- package/utilities/createAppPackage.js +0 -101
- package/utilities/databaseManager.js +0 -4
- package/utilities/datastore.js +0 -2
- package/utilities/exceptions.js +0 -16
- package/utilities/injectedPlugins/createUser.js +0 -19
- package/utilities/injectedPlugins/disableUser.js +0 -3
- package/utilities/injectedPlugins/enableUser.js +0 -3
- package/utilities/injectedPlugins/index.js +0 -76
- package/utilities/masterAppInternal.js +0 -384
- package/utilities/runtimePackages.js +0 -34
- package/utilities/targzAppPackage.js +0 -119
|
@@ -1,3460 +0,0 @@
|
|
|
1
|
-
function noop() { }
|
|
2
|
-
function run(fn) {
|
|
3
|
-
return fn();
|
|
4
|
-
}
|
|
5
|
-
function blank_object() {
|
|
6
|
-
return Object.create(null);
|
|
7
|
-
}
|
|
8
|
-
function run_all(fns) {
|
|
9
|
-
fns.forEach(run);
|
|
10
|
-
}
|
|
11
|
-
function is_function(thing) {
|
|
12
|
-
return typeof thing === 'function';
|
|
13
|
-
}
|
|
14
|
-
function safe_not_equal(a, b) {
|
|
15
|
-
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
|
|
16
|
-
}
|
|
17
|
-
function null_to_empty(value) {
|
|
18
|
-
return value == null ? '' : value;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function append(target, node) {
|
|
22
|
-
target.appendChild(node);
|
|
23
|
-
}
|
|
24
|
-
function insert(target, node, anchor) {
|
|
25
|
-
target.insertBefore(node, anchor || null);
|
|
26
|
-
}
|
|
27
|
-
function detach(node) {
|
|
28
|
-
node.parentNode.removeChild(node);
|
|
29
|
-
}
|
|
30
|
-
function element(name) {
|
|
31
|
-
return document.createElement(name);
|
|
32
|
-
}
|
|
33
|
-
function svg_element(name) {
|
|
34
|
-
return document.createElementNS('http://www.w3.org/2000/svg', name);
|
|
35
|
-
}
|
|
36
|
-
function text(data) {
|
|
37
|
-
return document.createTextNode(data);
|
|
38
|
-
}
|
|
39
|
-
function space() {
|
|
40
|
-
return text(' ');
|
|
41
|
-
}
|
|
42
|
-
function empty() {
|
|
43
|
-
return text('');
|
|
44
|
-
}
|
|
45
|
-
function listen(node, event, handler, options) {
|
|
46
|
-
node.addEventListener(event, handler, options);
|
|
47
|
-
return () => node.removeEventListener(event, handler, options);
|
|
48
|
-
}
|
|
49
|
-
function attr(node, attribute, value) {
|
|
50
|
-
if (value == null)
|
|
51
|
-
node.removeAttribute(attribute);
|
|
52
|
-
else
|
|
53
|
-
node.setAttribute(attribute, value);
|
|
54
|
-
}
|
|
55
|
-
function children(element) {
|
|
56
|
-
return Array.from(element.childNodes);
|
|
57
|
-
}
|
|
58
|
-
function claim_element(nodes, name, attributes, svg) {
|
|
59
|
-
for (let i = 0; i < nodes.length; i += 1) {
|
|
60
|
-
const node = nodes[i];
|
|
61
|
-
if (node.nodeName === name) {
|
|
62
|
-
for (let j = 0; j < node.attributes.length; j += 1) {
|
|
63
|
-
const attribute = node.attributes[j];
|
|
64
|
-
if (!attributes[attribute.name])
|
|
65
|
-
node.removeAttribute(attribute.name);
|
|
66
|
-
}
|
|
67
|
-
return nodes.splice(i, 1)[0]; // TODO strip unwanted attributes
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return svg ? svg_element(name) : element(name);
|
|
71
|
-
}
|
|
72
|
-
function claim_text(nodes, data) {
|
|
73
|
-
for (let i = 0; i < nodes.length; i += 1) {
|
|
74
|
-
const node = nodes[i];
|
|
75
|
-
if (node.nodeType === 3) {
|
|
76
|
-
node.data = '' + data;
|
|
77
|
-
return nodes.splice(i, 1)[0];
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return text(data);
|
|
81
|
-
}
|
|
82
|
-
function claim_space(nodes) {
|
|
83
|
-
return claim_text(nodes, ' ');
|
|
84
|
-
}
|
|
85
|
-
function set_data(text, data) {
|
|
86
|
-
data = '' + data;
|
|
87
|
-
if (text.data !== data)
|
|
88
|
-
text.data = data;
|
|
89
|
-
}
|
|
90
|
-
function set_input_value(input, value) {
|
|
91
|
-
if (value != null || input.value) {
|
|
92
|
-
input.value = value;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
let current_component;
|
|
97
|
-
function set_current_component(component) {
|
|
98
|
-
current_component = component;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const dirty_components = [];
|
|
102
|
-
const binding_callbacks = [];
|
|
103
|
-
const render_callbacks = [];
|
|
104
|
-
const flush_callbacks = [];
|
|
105
|
-
const resolved_promise = Promise.resolve();
|
|
106
|
-
let update_scheduled = false;
|
|
107
|
-
function schedule_update() {
|
|
108
|
-
if (!update_scheduled) {
|
|
109
|
-
update_scheduled = true;
|
|
110
|
-
resolved_promise.then(flush);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function add_render_callback(fn) {
|
|
114
|
-
render_callbacks.push(fn);
|
|
115
|
-
}
|
|
116
|
-
function flush() {
|
|
117
|
-
const seen_callbacks = new Set();
|
|
118
|
-
do {
|
|
119
|
-
// first, call beforeUpdate functions
|
|
120
|
-
// and update components
|
|
121
|
-
while (dirty_components.length) {
|
|
122
|
-
const component = dirty_components.shift();
|
|
123
|
-
set_current_component(component);
|
|
124
|
-
update(component.$$);
|
|
125
|
-
}
|
|
126
|
-
while (binding_callbacks.length)
|
|
127
|
-
binding_callbacks.pop()();
|
|
128
|
-
// then, once components are updated, call
|
|
129
|
-
// afterUpdate functions. This may cause
|
|
130
|
-
// subsequent updates...
|
|
131
|
-
for (let i = 0; i < render_callbacks.length; i += 1) {
|
|
132
|
-
const callback = render_callbacks[i];
|
|
133
|
-
if (!seen_callbacks.has(callback)) {
|
|
134
|
-
callback();
|
|
135
|
-
// ...so guard against infinite loops
|
|
136
|
-
seen_callbacks.add(callback);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
render_callbacks.length = 0;
|
|
140
|
-
} while (dirty_components.length);
|
|
141
|
-
while (flush_callbacks.length) {
|
|
142
|
-
flush_callbacks.pop()();
|
|
143
|
-
}
|
|
144
|
-
update_scheduled = false;
|
|
145
|
-
}
|
|
146
|
-
function update($$) {
|
|
147
|
-
if ($$.fragment) {
|
|
148
|
-
$$.update($$.dirty);
|
|
149
|
-
run_all($$.before_update);
|
|
150
|
-
$$.fragment.p($$.dirty, $$.ctx);
|
|
151
|
-
$$.dirty = null;
|
|
152
|
-
$$.after_update.forEach(add_render_callback);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
const outroing = new Set();
|
|
156
|
-
function transition_in(block, local) {
|
|
157
|
-
if (block && block.i) {
|
|
158
|
-
outroing.delete(block);
|
|
159
|
-
block.i(local);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
function mount_component(component, target, anchor) {
|
|
163
|
-
const { fragment, on_mount, on_destroy, after_update } = component.$$;
|
|
164
|
-
fragment.m(target, anchor);
|
|
165
|
-
// onMount happens before the initial afterUpdate
|
|
166
|
-
add_render_callback(() => {
|
|
167
|
-
const new_on_destroy = on_mount.map(run).filter(is_function);
|
|
168
|
-
if (on_destroy) {
|
|
169
|
-
on_destroy.push(...new_on_destroy);
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
// Edge case - component was destroyed immediately,
|
|
173
|
-
// most likely as a result of a binding initialising
|
|
174
|
-
run_all(new_on_destroy);
|
|
175
|
-
}
|
|
176
|
-
component.$$.on_mount = [];
|
|
177
|
-
});
|
|
178
|
-
after_update.forEach(add_render_callback);
|
|
179
|
-
}
|
|
180
|
-
function destroy_component(component, detaching) {
|
|
181
|
-
if (component.$$.fragment) {
|
|
182
|
-
run_all(component.$$.on_destroy);
|
|
183
|
-
component.$$.fragment.d(detaching);
|
|
184
|
-
// TODO null out other refs, including component.$$ (but need to
|
|
185
|
-
// preserve final state?)
|
|
186
|
-
component.$$.on_destroy = component.$$.fragment = null;
|
|
187
|
-
component.$$.ctx = {};
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
function make_dirty(component, key) {
|
|
191
|
-
if (!component.$$.dirty) {
|
|
192
|
-
dirty_components.push(component);
|
|
193
|
-
schedule_update();
|
|
194
|
-
component.$$.dirty = blank_object();
|
|
195
|
-
}
|
|
196
|
-
component.$$.dirty[key] = true;
|
|
197
|
-
}
|
|
198
|
-
function init(component, options, instance, create_fragment, not_equal, prop_names) {
|
|
199
|
-
const parent_component = current_component;
|
|
200
|
-
set_current_component(component);
|
|
201
|
-
const props = options.props || {};
|
|
202
|
-
const $$ = component.$$ = {
|
|
203
|
-
fragment: null,
|
|
204
|
-
ctx: null,
|
|
205
|
-
// state
|
|
206
|
-
props: prop_names,
|
|
207
|
-
update: noop,
|
|
208
|
-
not_equal,
|
|
209
|
-
bound: blank_object(),
|
|
210
|
-
// lifecycle
|
|
211
|
-
on_mount: [],
|
|
212
|
-
on_destroy: [],
|
|
213
|
-
before_update: [],
|
|
214
|
-
after_update: [],
|
|
215
|
-
context: new Map(parent_component ? parent_component.$$.context : []),
|
|
216
|
-
// everything else
|
|
217
|
-
callbacks: blank_object(),
|
|
218
|
-
dirty: null
|
|
219
|
-
};
|
|
220
|
-
let ready = false;
|
|
221
|
-
$$.ctx = instance
|
|
222
|
-
? instance(component, props, (key, ret, value = ret) => {
|
|
223
|
-
if ($$.ctx && not_equal($$.ctx[key], $$.ctx[key] = value)) {
|
|
224
|
-
if ($$.bound[key])
|
|
225
|
-
$$.bound[key](value);
|
|
226
|
-
if (ready)
|
|
227
|
-
make_dirty(component, key);
|
|
228
|
-
}
|
|
229
|
-
return ret;
|
|
230
|
-
})
|
|
231
|
-
: props;
|
|
232
|
-
$$.update();
|
|
233
|
-
ready = true;
|
|
234
|
-
run_all($$.before_update);
|
|
235
|
-
$$.fragment = create_fragment($$.ctx);
|
|
236
|
-
if (options.target) {
|
|
237
|
-
if (options.hydrate) {
|
|
238
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
239
|
-
$$.fragment.l(children(options.target));
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
243
|
-
$$.fragment.c();
|
|
244
|
-
}
|
|
245
|
-
if (options.intro)
|
|
246
|
-
transition_in(component.$$.fragment);
|
|
247
|
-
mount_component(component, options.target, options.anchor);
|
|
248
|
-
flush();
|
|
249
|
-
}
|
|
250
|
-
set_current_component(parent_component);
|
|
251
|
-
}
|
|
252
|
-
let SvelteElement;
|
|
253
|
-
if (typeof HTMLElement !== 'undefined') {
|
|
254
|
-
SvelteElement = class extends HTMLElement {
|
|
255
|
-
constructor() {
|
|
256
|
-
super();
|
|
257
|
-
this.attachShadow({ mode: 'open' });
|
|
258
|
-
}
|
|
259
|
-
connectedCallback() {
|
|
260
|
-
// @ts-ignore todo: improve typings
|
|
261
|
-
for (const key in this.$$.slotted) {
|
|
262
|
-
// @ts-ignore todo: improve typings
|
|
263
|
-
this.appendChild(this.$$.slotted[key]);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
attributeChangedCallback(attr, _oldValue, newValue) {
|
|
267
|
-
this[attr] = newValue;
|
|
268
|
-
}
|
|
269
|
-
$destroy() {
|
|
270
|
-
destroy_component(this, 1);
|
|
271
|
-
this.$destroy = noop;
|
|
272
|
-
}
|
|
273
|
-
$on(type, callback) {
|
|
274
|
-
// TODO should this delegate to addEventListener?
|
|
275
|
-
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
|
|
276
|
-
callbacks.push(callback);
|
|
277
|
-
return () => {
|
|
278
|
-
const index = callbacks.indexOf(callback);
|
|
279
|
-
if (index !== -1)
|
|
280
|
-
callbacks.splice(index, 1);
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
$set() {
|
|
284
|
-
// overridden by instance, if it has props
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
class SvelteComponent {
|
|
289
|
-
$destroy() {
|
|
290
|
-
destroy_component(this, 1);
|
|
291
|
-
this.$destroy = noop;
|
|
292
|
-
}
|
|
293
|
-
$on(type, callback) {
|
|
294
|
-
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
|
|
295
|
-
callbacks.push(callback);
|
|
296
|
-
return () => {
|
|
297
|
-
const index = callbacks.indexOf(callback);
|
|
298
|
-
if (index !== -1)
|
|
299
|
-
callbacks.splice(index, 1);
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
$set() {
|
|
303
|
-
// overridden by instance, if it has props
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// https://github.com/kaisermann/svelte-css-vars
|
|
308
|
-
|
|
309
|
-
const cssVars = (node, props) => {
|
|
310
|
-
Object.entries(props).forEach(([key, value]) => {
|
|
311
|
-
node.style.setProperty(`--${key}`, value);
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
return {
|
|
315
|
-
update(new_props) {
|
|
316
|
-
Object.entries(new_props).forEach(([key, value]) => {
|
|
317
|
-
node.style.setProperty(`--${key}`, value);
|
|
318
|
-
delete props[key];
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
Object.keys(props).forEach(name => node.style.removeProperty(`--${name}`));
|
|
322
|
-
props = new_props;
|
|
323
|
-
},
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
const createClasses = classes => {
|
|
328
|
-
let all = "";
|
|
329
|
-
for (let cls in classes) {
|
|
330
|
-
if (classes[cls]) {
|
|
331
|
-
all = all + " " + cls;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return all
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
/* src\Container.svelte generated by Svelte v3.12.1 */
|
|
338
|
-
|
|
339
|
-
function add_css() {
|
|
340
|
-
var style = element("style");
|
|
341
|
-
style.id = 'svelte-hu2o2q-style';
|
|
342
|
-
style.textContent = ".backgroundColor.svelte-hu2o2q{background-color:var(--backgroundColor)}.color.svelte-hu2o2q{color:var(--color)}.borderColor.svelte-hu2o2q{border-color:var(--borderColor)}.borderWidth.svelte-hu2o2q{border-width:var(--borderWidth)}.borderStyle.svelte-hu2o2q{border-style:var(--borderStyle)}";
|
|
343
|
-
append(document.head, style);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// (98:31)
|
|
347
|
-
function create_if_block_12(ctx) {
|
|
348
|
-
var p, p_class_value, cssVars_action;
|
|
349
|
-
|
|
350
|
-
return {
|
|
351
|
-
c() {
|
|
352
|
-
p = element("p");
|
|
353
|
-
this.h();
|
|
354
|
-
},
|
|
355
|
-
|
|
356
|
-
l(nodes) {
|
|
357
|
-
p = claim_element(nodes, "P", { class: true }, false);
|
|
358
|
-
var p_nodes = children(p);
|
|
359
|
-
|
|
360
|
-
p_nodes.forEach(detach);
|
|
361
|
-
this.h();
|
|
362
|
-
},
|
|
363
|
-
|
|
364
|
-
h() {
|
|
365
|
-
attr(p, "class", p_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
366
|
-
},
|
|
367
|
-
|
|
368
|
-
m(target, anchor) {
|
|
369
|
-
insert(target, p, anchor);
|
|
370
|
-
ctx.p_binding(p);
|
|
371
|
-
cssVars_action = cssVars.call(null, p, ctx.cssVariables) || {};
|
|
372
|
-
},
|
|
373
|
-
|
|
374
|
-
p(changed, ctx) {
|
|
375
|
-
if ((changed.classes) && p_class_value !== (p_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
376
|
-
attr(p, "class", p_class_value);
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
380
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
381
|
-
}
|
|
382
|
-
},
|
|
383
|
-
|
|
384
|
-
d(detaching) {
|
|
385
|
-
if (detaching) {
|
|
386
|
-
detach(p);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
ctx.p_binding(null);
|
|
390
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// (93:32)
|
|
396
|
-
function create_if_block_11(ctx) {
|
|
397
|
-
var figcaption, figcaption_class_value, cssVars_action;
|
|
398
|
-
|
|
399
|
-
return {
|
|
400
|
-
c() {
|
|
401
|
-
figcaption = element("figcaption");
|
|
402
|
-
this.h();
|
|
403
|
-
},
|
|
404
|
-
|
|
405
|
-
l(nodes) {
|
|
406
|
-
figcaption = claim_element(nodes, "FIGCAPTION", { class: true }, false);
|
|
407
|
-
var figcaption_nodes = children(figcaption);
|
|
408
|
-
|
|
409
|
-
figcaption_nodes.forEach(detach);
|
|
410
|
-
this.h();
|
|
411
|
-
},
|
|
412
|
-
|
|
413
|
-
h() {
|
|
414
|
-
attr(figcaption, "class", figcaption_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
415
|
-
},
|
|
416
|
-
|
|
417
|
-
m(target, anchor) {
|
|
418
|
-
insert(target, figcaption, anchor);
|
|
419
|
-
ctx.figcaption_binding(figcaption);
|
|
420
|
-
cssVars_action = cssVars.call(null, figcaption, ctx.cssVariables) || {};
|
|
421
|
-
},
|
|
422
|
-
|
|
423
|
-
p(changed, ctx) {
|
|
424
|
-
if ((changed.classes) && figcaption_class_value !== (figcaption_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
425
|
-
attr(figcaption, "class", figcaption_class_value);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
429
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
430
|
-
}
|
|
431
|
-
},
|
|
432
|
-
|
|
433
|
-
d(detaching) {
|
|
434
|
-
if (detaching) {
|
|
435
|
-
detach(figcaption);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
ctx.figcaption_binding(null);
|
|
439
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
440
|
-
}
|
|
441
|
-
};
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
// (88:28)
|
|
445
|
-
function create_if_block_10(ctx) {
|
|
446
|
-
var figure, figure_class_value, cssVars_action;
|
|
447
|
-
|
|
448
|
-
return {
|
|
449
|
-
c() {
|
|
450
|
-
figure = element("figure");
|
|
451
|
-
this.h();
|
|
452
|
-
},
|
|
453
|
-
|
|
454
|
-
l(nodes) {
|
|
455
|
-
figure = claim_element(nodes, "FIGURE", { class: true }, false);
|
|
456
|
-
var figure_nodes = children(figure);
|
|
457
|
-
|
|
458
|
-
figure_nodes.forEach(detach);
|
|
459
|
-
this.h();
|
|
460
|
-
},
|
|
461
|
-
|
|
462
|
-
h() {
|
|
463
|
-
attr(figure, "class", figure_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
464
|
-
},
|
|
465
|
-
|
|
466
|
-
m(target, anchor) {
|
|
467
|
-
insert(target, figure, anchor);
|
|
468
|
-
ctx.figure_binding(figure);
|
|
469
|
-
cssVars_action = cssVars.call(null, figure, ctx.cssVariables) || {};
|
|
470
|
-
},
|
|
471
|
-
|
|
472
|
-
p(changed, ctx) {
|
|
473
|
-
if ((changed.classes) && figure_class_value !== (figure_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
474
|
-
attr(figure, "class", figure_class_value);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
478
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
479
|
-
}
|
|
480
|
-
},
|
|
481
|
-
|
|
482
|
-
d(detaching) {
|
|
483
|
-
if (detaching) {
|
|
484
|
-
detach(figure);
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
ctx.figure_binding(null);
|
|
488
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
489
|
-
}
|
|
490
|
-
};
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
// (83:26)
|
|
494
|
-
function create_if_block_9(ctx) {
|
|
495
|
-
var mark, mark_class_value, cssVars_action;
|
|
496
|
-
|
|
497
|
-
return {
|
|
498
|
-
c() {
|
|
499
|
-
mark = element("mark");
|
|
500
|
-
this.h();
|
|
501
|
-
},
|
|
502
|
-
|
|
503
|
-
l(nodes) {
|
|
504
|
-
mark = claim_element(nodes, "MARK", { class: true }, false);
|
|
505
|
-
var mark_nodes = children(mark);
|
|
506
|
-
|
|
507
|
-
mark_nodes.forEach(detach);
|
|
508
|
-
this.h();
|
|
509
|
-
},
|
|
510
|
-
|
|
511
|
-
h() {
|
|
512
|
-
attr(mark, "class", mark_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
513
|
-
},
|
|
514
|
-
|
|
515
|
-
m(target, anchor) {
|
|
516
|
-
insert(target, mark, anchor);
|
|
517
|
-
ctx.mark_binding(mark);
|
|
518
|
-
cssVars_action = cssVars.call(null, mark, ctx.cssVariables) || {};
|
|
519
|
-
},
|
|
520
|
-
|
|
521
|
-
p(changed, ctx) {
|
|
522
|
-
if ((changed.classes) && mark_class_value !== (mark_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
523
|
-
attr(mark, "class", mark_class_value);
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
527
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
528
|
-
}
|
|
529
|
-
},
|
|
530
|
-
|
|
531
|
-
d(detaching) {
|
|
532
|
-
if (detaching) {
|
|
533
|
-
detach(mark);
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
ctx.mark_binding(null);
|
|
537
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// (78:25)
|
|
543
|
-
function create_if_block_8(ctx) {
|
|
544
|
-
var nav, nav_class_value, cssVars_action;
|
|
545
|
-
|
|
546
|
-
return {
|
|
547
|
-
c() {
|
|
548
|
-
nav = element("nav");
|
|
549
|
-
this.h();
|
|
550
|
-
},
|
|
551
|
-
|
|
552
|
-
l(nodes) {
|
|
553
|
-
nav = claim_element(nodes, "NAV", { class: true }, false);
|
|
554
|
-
var nav_nodes = children(nav);
|
|
555
|
-
|
|
556
|
-
nav_nodes.forEach(detach);
|
|
557
|
-
this.h();
|
|
558
|
-
},
|
|
559
|
-
|
|
560
|
-
h() {
|
|
561
|
-
attr(nav, "class", nav_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
562
|
-
},
|
|
563
|
-
|
|
564
|
-
m(target, anchor) {
|
|
565
|
-
insert(target, nav, anchor);
|
|
566
|
-
ctx.nav_binding(nav);
|
|
567
|
-
cssVars_action = cssVars.call(null, nav, ctx.cssVariables) || {};
|
|
568
|
-
},
|
|
569
|
-
|
|
570
|
-
p(changed, ctx) {
|
|
571
|
-
if ((changed.classes) && nav_class_value !== (nav_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
572
|
-
attr(nav, "class", nav_class_value);
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
576
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
577
|
-
}
|
|
578
|
-
},
|
|
579
|
-
|
|
580
|
-
d(detaching) {
|
|
581
|
-
if (detaching) {
|
|
582
|
-
detach(nav);
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
ctx.nav_binding(null);
|
|
586
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
587
|
-
}
|
|
588
|
-
};
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
// (73:29)
|
|
592
|
-
function create_if_block_7(ctx) {
|
|
593
|
-
var article, article_class_value, cssVars_action;
|
|
594
|
-
|
|
595
|
-
return {
|
|
596
|
-
c() {
|
|
597
|
-
article = element("article");
|
|
598
|
-
this.h();
|
|
599
|
-
},
|
|
600
|
-
|
|
601
|
-
l(nodes) {
|
|
602
|
-
article = claim_element(nodes, "ARTICLE", { class: true }, false);
|
|
603
|
-
var article_nodes = children(article);
|
|
604
|
-
|
|
605
|
-
article_nodes.forEach(detach);
|
|
606
|
-
this.h();
|
|
607
|
-
},
|
|
608
|
-
|
|
609
|
-
h() {
|
|
610
|
-
attr(article, "class", article_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
611
|
-
},
|
|
612
|
-
|
|
613
|
-
m(target, anchor) {
|
|
614
|
-
insert(target, article, anchor);
|
|
615
|
-
ctx.article_binding(article);
|
|
616
|
-
cssVars_action = cssVars.call(null, article, ctx.cssVariables) || {};
|
|
617
|
-
},
|
|
618
|
-
|
|
619
|
-
p(changed, ctx) {
|
|
620
|
-
if ((changed.classes) && article_class_value !== (article_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
621
|
-
attr(article, "class", article_class_value);
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
625
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
626
|
-
}
|
|
627
|
-
},
|
|
628
|
-
|
|
629
|
-
d(detaching) {
|
|
630
|
-
if (detaching) {
|
|
631
|
-
detach(article);
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
ctx.article_binding(null);
|
|
635
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
636
|
-
}
|
|
637
|
-
};
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
// (68:29)
|
|
641
|
-
function create_if_block_6(ctx) {
|
|
642
|
-
var details, details_class_value, cssVars_action;
|
|
643
|
-
|
|
644
|
-
return {
|
|
645
|
-
c() {
|
|
646
|
-
details = element("details");
|
|
647
|
-
this.h();
|
|
648
|
-
},
|
|
649
|
-
|
|
650
|
-
l(nodes) {
|
|
651
|
-
details = claim_element(nodes, "DETAILS", { class: true }, false);
|
|
652
|
-
var details_nodes = children(details);
|
|
653
|
-
|
|
654
|
-
details_nodes.forEach(detach);
|
|
655
|
-
this.h();
|
|
656
|
-
},
|
|
657
|
-
|
|
658
|
-
h() {
|
|
659
|
-
attr(details, "class", details_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
660
|
-
},
|
|
661
|
-
|
|
662
|
-
m(target, anchor) {
|
|
663
|
-
insert(target, details, anchor);
|
|
664
|
-
ctx.details_binding(details);
|
|
665
|
-
cssVars_action = cssVars.call(null, details, ctx.cssVariables) || {};
|
|
666
|
-
},
|
|
667
|
-
|
|
668
|
-
p(changed, ctx) {
|
|
669
|
-
if ((changed.classes) && details_class_value !== (details_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
670
|
-
attr(details, "class", details_class_value);
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
674
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
675
|
-
}
|
|
676
|
-
},
|
|
677
|
-
|
|
678
|
-
d(detaching) {
|
|
679
|
-
if (detaching) {
|
|
680
|
-
detach(details);
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
ctx.details_binding(null);
|
|
684
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
685
|
-
}
|
|
686
|
-
};
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
// (63:29)
|
|
690
|
-
function create_if_block_5(ctx) {
|
|
691
|
-
var summary, summary_class_value, cssVars_action;
|
|
692
|
-
|
|
693
|
-
return {
|
|
694
|
-
c() {
|
|
695
|
-
summary = element("summary");
|
|
696
|
-
this.h();
|
|
697
|
-
},
|
|
698
|
-
|
|
699
|
-
l(nodes) {
|
|
700
|
-
summary = claim_element(nodes, "SUMMARY", { class: true }, false);
|
|
701
|
-
var summary_nodes = children(summary);
|
|
702
|
-
|
|
703
|
-
summary_nodes.forEach(detach);
|
|
704
|
-
this.h();
|
|
705
|
-
},
|
|
706
|
-
|
|
707
|
-
h() {
|
|
708
|
-
attr(summary, "class", summary_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
709
|
-
},
|
|
710
|
-
|
|
711
|
-
m(target, anchor) {
|
|
712
|
-
insert(target, summary, anchor);
|
|
713
|
-
ctx.summary_binding(summary);
|
|
714
|
-
cssVars_action = cssVars.call(null, summary, ctx.cssVariables) || {};
|
|
715
|
-
},
|
|
716
|
-
|
|
717
|
-
p(changed, ctx) {
|
|
718
|
-
if ((changed.classes) && summary_class_value !== (summary_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
719
|
-
attr(summary, "class", summary_class_value);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
723
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
724
|
-
}
|
|
725
|
-
},
|
|
726
|
-
|
|
727
|
-
d(detaching) {
|
|
728
|
-
if (detaching) {
|
|
729
|
-
detach(summary);
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
ctx.summary_binding(null);
|
|
733
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
734
|
-
}
|
|
735
|
-
};
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
// (58:27)
|
|
739
|
-
function create_if_block_4(ctx) {
|
|
740
|
-
var aside, aside_class_value, cssVars_action;
|
|
741
|
-
|
|
742
|
-
return {
|
|
743
|
-
c() {
|
|
744
|
-
aside = element("aside");
|
|
745
|
-
this.h();
|
|
746
|
-
},
|
|
747
|
-
|
|
748
|
-
l(nodes) {
|
|
749
|
-
aside = claim_element(nodes, "ASIDE", { class: true }, false);
|
|
750
|
-
var aside_nodes = children(aside);
|
|
751
|
-
|
|
752
|
-
aside_nodes.forEach(detach);
|
|
753
|
-
this.h();
|
|
754
|
-
},
|
|
755
|
-
|
|
756
|
-
h() {
|
|
757
|
-
attr(aside, "class", aside_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
758
|
-
},
|
|
759
|
-
|
|
760
|
-
m(target, anchor) {
|
|
761
|
-
insert(target, aside, anchor);
|
|
762
|
-
ctx.aside_binding(aside);
|
|
763
|
-
cssVars_action = cssVars.call(null, aside, ctx.cssVariables) || {};
|
|
764
|
-
},
|
|
765
|
-
|
|
766
|
-
p(changed, ctx) {
|
|
767
|
-
if ((changed.classes) && aside_class_value !== (aside_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
768
|
-
attr(aside, "class", aside_class_value);
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
772
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
773
|
-
}
|
|
774
|
-
},
|
|
775
|
-
|
|
776
|
-
d(detaching) {
|
|
777
|
-
if (detaching) {
|
|
778
|
-
detach(aside);
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
ctx.aside_binding(null);
|
|
782
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
783
|
-
}
|
|
784
|
-
};
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
// (53:28)
|
|
788
|
-
function create_if_block_3(ctx) {
|
|
789
|
-
var footer, footer_class_value, cssVars_action;
|
|
790
|
-
|
|
791
|
-
return {
|
|
792
|
-
c() {
|
|
793
|
-
footer = element("footer");
|
|
794
|
-
this.h();
|
|
795
|
-
},
|
|
796
|
-
|
|
797
|
-
l(nodes) {
|
|
798
|
-
footer = claim_element(nodes, "FOOTER", { class: true }, false);
|
|
799
|
-
var footer_nodes = children(footer);
|
|
800
|
-
|
|
801
|
-
footer_nodes.forEach(detach);
|
|
802
|
-
this.h();
|
|
803
|
-
},
|
|
804
|
-
|
|
805
|
-
h() {
|
|
806
|
-
attr(footer, "class", footer_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
807
|
-
},
|
|
808
|
-
|
|
809
|
-
m(target, anchor) {
|
|
810
|
-
insert(target, footer, anchor);
|
|
811
|
-
ctx.footer_binding(footer);
|
|
812
|
-
cssVars_action = cssVars.call(null, footer, ctx.cssVariables) || {};
|
|
813
|
-
},
|
|
814
|
-
|
|
815
|
-
p(changed, ctx) {
|
|
816
|
-
if ((changed.classes) && footer_class_value !== (footer_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
817
|
-
attr(footer, "class", footer_class_value);
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
821
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
822
|
-
}
|
|
823
|
-
},
|
|
824
|
-
|
|
825
|
-
d(detaching) {
|
|
826
|
-
if (detaching) {
|
|
827
|
-
detach(footer);
|
|
828
|
-
}
|
|
829
|
-
|
|
830
|
-
ctx.footer_binding(null);
|
|
831
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
832
|
-
}
|
|
833
|
-
};
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
// (48:26)
|
|
837
|
-
function create_if_block_2(ctx) {
|
|
838
|
-
var main, main_class_value, cssVars_action;
|
|
839
|
-
|
|
840
|
-
return {
|
|
841
|
-
c() {
|
|
842
|
-
main = element("main");
|
|
843
|
-
this.h();
|
|
844
|
-
},
|
|
845
|
-
|
|
846
|
-
l(nodes) {
|
|
847
|
-
main = claim_element(nodes, "MAIN", { class: true }, false);
|
|
848
|
-
var main_nodes = children(main);
|
|
849
|
-
|
|
850
|
-
main_nodes.forEach(detach);
|
|
851
|
-
this.h();
|
|
852
|
-
},
|
|
853
|
-
|
|
854
|
-
h() {
|
|
855
|
-
attr(main, "class", main_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
856
|
-
},
|
|
857
|
-
|
|
858
|
-
m(target, anchor) {
|
|
859
|
-
insert(target, main, anchor);
|
|
860
|
-
ctx.main_binding(main);
|
|
861
|
-
cssVars_action = cssVars.call(null, main, ctx.cssVariables) || {};
|
|
862
|
-
},
|
|
863
|
-
|
|
864
|
-
p(changed, ctx) {
|
|
865
|
-
if ((changed.classes) && main_class_value !== (main_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
866
|
-
attr(main, "class", main_class_value);
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
870
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
871
|
-
}
|
|
872
|
-
},
|
|
873
|
-
|
|
874
|
-
d(detaching) {
|
|
875
|
-
if (detaching) {
|
|
876
|
-
detach(main);
|
|
877
|
-
}
|
|
878
|
-
|
|
879
|
-
ctx.main_binding(null);
|
|
880
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
881
|
-
}
|
|
882
|
-
};
|
|
883
|
-
}
|
|
884
|
-
|
|
885
|
-
// (43:28)
|
|
886
|
-
function create_if_block_1(ctx) {
|
|
887
|
-
var header, header_class_value, cssVars_action;
|
|
888
|
-
|
|
889
|
-
return {
|
|
890
|
-
c() {
|
|
891
|
-
header = element("header");
|
|
892
|
-
this.h();
|
|
893
|
-
},
|
|
894
|
-
|
|
895
|
-
l(nodes) {
|
|
896
|
-
header = claim_element(nodes, "HEADER", { class: true }, false);
|
|
897
|
-
var header_nodes = children(header);
|
|
898
|
-
|
|
899
|
-
header_nodes.forEach(detach);
|
|
900
|
-
this.h();
|
|
901
|
-
},
|
|
902
|
-
|
|
903
|
-
h() {
|
|
904
|
-
attr(header, "class", header_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
905
|
-
},
|
|
906
|
-
|
|
907
|
-
m(target, anchor) {
|
|
908
|
-
insert(target, header, anchor);
|
|
909
|
-
ctx.header_binding(header);
|
|
910
|
-
cssVars_action = cssVars.call(null, header, ctx.cssVariables) || {};
|
|
911
|
-
},
|
|
912
|
-
|
|
913
|
-
p(changed, ctx) {
|
|
914
|
-
if ((changed.classes) && header_class_value !== (header_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
915
|
-
attr(header, "class", header_class_value);
|
|
916
|
-
}
|
|
917
|
-
|
|
918
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
919
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
920
|
-
}
|
|
921
|
-
},
|
|
922
|
-
|
|
923
|
-
d(detaching) {
|
|
924
|
-
if (detaching) {
|
|
925
|
-
detach(header);
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
ctx.header_binding(null);
|
|
929
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
930
|
-
}
|
|
931
|
-
};
|
|
932
|
-
}
|
|
933
|
-
|
|
934
|
-
// (38:0) {#if type === 'div'}
|
|
935
|
-
function create_if_block(ctx) {
|
|
936
|
-
var div, div_class_value, cssVars_action;
|
|
937
|
-
|
|
938
|
-
return {
|
|
939
|
-
c() {
|
|
940
|
-
div = element("div");
|
|
941
|
-
this.h();
|
|
942
|
-
},
|
|
943
|
-
|
|
944
|
-
l(nodes) {
|
|
945
|
-
div = claim_element(nodes, "DIV", { class: true }, false);
|
|
946
|
-
var div_nodes = children(div);
|
|
947
|
-
|
|
948
|
-
div_nodes.forEach(detach);
|
|
949
|
-
this.h();
|
|
950
|
-
},
|
|
951
|
-
|
|
952
|
-
h() {
|
|
953
|
-
attr(div, "class", div_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q");
|
|
954
|
-
},
|
|
955
|
-
|
|
956
|
-
m(target, anchor) {
|
|
957
|
-
insert(target, div, anchor);
|
|
958
|
-
ctx.div_binding(div);
|
|
959
|
-
cssVars_action = cssVars.call(null, div, ctx.cssVariables) || {};
|
|
960
|
-
},
|
|
961
|
-
|
|
962
|
-
p(changed, ctx) {
|
|
963
|
-
if ((changed.classes) && div_class_value !== (div_class_value = "" + null_to_empty(ctx.classes) + " svelte-hu2o2q")) {
|
|
964
|
-
attr(div, "class", div_class_value);
|
|
965
|
-
}
|
|
966
|
-
|
|
967
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
968
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
969
|
-
}
|
|
970
|
-
},
|
|
971
|
-
|
|
972
|
-
d(detaching) {
|
|
973
|
-
if (detaching) {
|
|
974
|
-
detach(div);
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
ctx.div_binding(null);
|
|
978
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
979
|
-
}
|
|
980
|
-
};
|
|
981
|
-
}
|
|
982
|
-
|
|
983
|
-
function create_fragment(ctx) {
|
|
984
|
-
var if_block_anchor;
|
|
985
|
-
|
|
986
|
-
function select_block_type(changed, ctx) {
|
|
987
|
-
if (ctx.type === 'div') return create_if_block;
|
|
988
|
-
if (ctx.type === 'header') return create_if_block_1;
|
|
989
|
-
if (ctx.type === 'main') return create_if_block_2;
|
|
990
|
-
if (ctx.type === 'footer') return create_if_block_3;
|
|
991
|
-
if (ctx.type === 'aside') return create_if_block_4;
|
|
992
|
-
if (ctx.type === 'summary') return create_if_block_5;
|
|
993
|
-
if (ctx.type === 'details') return create_if_block_6;
|
|
994
|
-
if (ctx.type === 'article') return create_if_block_7;
|
|
995
|
-
if (ctx.type === 'nav') return create_if_block_8;
|
|
996
|
-
if (ctx.type === 'mark') return create_if_block_9;
|
|
997
|
-
if (ctx.type === 'figure') return create_if_block_10;
|
|
998
|
-
if (ctx.type === 'figcaption') return create_if_block_11;
|
|
999
|
-
if (ctx.type === 'paragraph') return create_if_block_12;
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
var current_block_type = select_block_type(null, ctx);
|
|
1003
|
-
var if_block = current_block_type && current_block_type(ctx);
|
|
1004
|
-
|
|
1005
|
-
return {
|
|
1006
|
-
c() {
|
|
1007
|
-
if (if_block) if_block.c();
|
|
1008
|
-
if_block_anchor = empty();
|
|
1009
|
-
},
|
|
1010
|
-
|
|
1011
|
-
l(nodes) {
|
|
1012
|
-
if (if_block) if_block.l(nodes);
|
|
1013
|
-
if_block_anchor = empty();
|
|
1014
|
-
},
|
|
1015
|
-
|
|
1016
|
-
m(target, anchor) {
|
|
1017
|
-
if (if_block) if_block.m(target, anchor);
|
|
1018
|
-
insert(target, if_block_anchor, anchor);
|
|
1019
|
-
},
|
|
1020
|
-
|
|
1021
|
-
p(changed, ctx) {
|
|
1022
|
-
if (current_block_type === (current_block_type = select_block_type(changed, ctx)) && if_block) {
|
|
1023
|
-
if_block.p(changed, ctx);
|
|
1024
|
-
} else {
|
|
1025
|
-
if (if_block) if_block.d(1);
|
|
1026
|
-
if_block = current_block_type && current_block_type(ctx);
|
|
1027
|
-
if (if_block) {
|
|
1028
|
-
if_block.c();
|
|
1029
|
-
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
1030
|
-
}
|
|
1031
|
-
}
|
|
1032
|
-
},
|
|
1033
|
-
|
|
1034
|
-
i: noop,
|
|
1035
|
-
o: noop,
|
|
1036
|
-
|
|
1037
|
-
d(detaching) {
|
|
1038
|
-
if (if_block) if_block.d(detaching);
|
|
1039
|
-
|
|
1040
|
-
if (detaching) {
|
|
1041
|
-
detach(if_block_anchor);
|
|
1042
|
-
}
|
|
1043
|
-
}
|
|
1044
|
-
};
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
function instance($$self, $$props, $$invalidate) {
|
|
1048
|
-
let { className = "", onLoad, type, backgroundColor, color, borderWidth, borderColor, borderStyle, _bb } = $$props;
|
|
1049
|
-
|
|
1050
|
-
let containerElement;
|
|
1051
|
-
let hasLoaded;
|
|
1052
|
-
|
|
1053
|
-
function div_binding($$value) {
|
|
1054
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1055
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1056
|
-
});
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
|
-
function header_binding($$value) {
|
|
1060
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1061
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1062
|
-
});
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
function main_binding($$value) {
|
|
1066
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1067
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1068
|
-
});
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
function footer_binding($$value) {
|
|
1072
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1073
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1074
|
-
});
|
|
1075
|
-
}
|
|
1076
|
-
|
|
1077
|
-
function aside_binding($$value) {
|
|
1078
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1079
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
function summary_binding($$value) {
|
|
1084
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1085
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1086
|
-
});
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
function details_binding($$value) {
|
|
1090
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1091
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1092
|
-
});
|
|
1093
|
-
}
|
|
1094
|
-
|
|
1095
|
-
function article_binding($$value) {
|
|
1096
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1097
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1098
|
-
});
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1101
|
-
function nav_binding($$value) {
|
|
1102
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1103
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1104
|
-
});
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
function mark_binding($$value) {
|
|
1108
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1109
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1110
|
-
});
|
|
1111
|
-
}
|
|
1112
|
-
|
|
1113
|
-
function figure_binding($$value) {
|
|
1114
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1115
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1116
|
-
});
|
|
1117
|
-
}
|
|
1118
|
-
|
|
1119
|
-
function figcaption_binding($$value) {
|
|
1120
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1121
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1122
|
-
});
|
|
1123
|
-
}
|
|
1124
|
-
|
|
1125
|
-
function p_binding($$value) {
|
|
1126
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
1127
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
1128
|
-
});
|
|
1129
|
-
}
|
|
1130
|
-
|
|
1131
|
-
$$self.$set = $$props => {
|
|
1132
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
1133
|
-
if ('onLoad' in $$props) $$invalidate('onLoad', onLoad = $$props.onLoad);
|
|
1134
|
-
if ('type' in $$props) $$invalidate('type', type = $$props.type);
|
|
1135
|
-
if ('backgroundColor' in $$props) $$invalidate('backgroundColor', backgroundColor = $$props.backgroundColor);
|
|
1136
|
-
if ('color' in $$props) $$invalidate('color', color = $$props.color);
|
|
1137
|
-
if ('borderWidth' in $$props) $$invalidate('borderWidth', borderWidth = $$props.borderWidth);
|
|
1138
|
-
if ('borderColor' in $$props) $$invalidate('borderColor', borderColor = $$props.borderColor);
|
|
1139
|
-
if ('borderStyle' in $$props) $$invalidate('borderStyle', borderStyle = $$props.borderStyle);
|
|
1140
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
1141
|
-
};
|
|
1142
|
-
|
|
1143
|
-
let cssVariables, classes;
|
|
1144
|
-
|
|
1145
|
-
$$self.$$.update = ($$dirty = { backgroundColor: 1, color: 1, borderWidth: 1, borderColor: 1, borderStyle: 1, cssVariables: 1, className: 1, containerElement: 1, _bb: 1, hasLoaded: 1, onLoad: 1 }) => {
|
|
1146
|
-
if ($$dirty.backgroundColor || $$dirty.color || $$dirty.borderWidth || $$dirty.borderColor || $$dirty.borderStyle) { $$invalidate('cssVariables', cssVariables = {
|
|
1147
|
-
backgroundColor,
|
|
1148
|
-
color,
|
|
1149
|
-
borderWidth,
|
|
1150
|
-
borderColor,
|
|
1151
|
-
borderStyle,
|
|
1152
|
-
}); }
|
|
1153
|
-
if ($$dirty.cssVariables || $$dirty.className) { $$invalidate('classes', classes = `${createClasses(cssVariables)} ${className}`); }
|
|
1154
|
-
if ($$dirty.containerElement || $$dirty._bb || $$dirty.hasLoaded || $$dirty.onLoad) { {
|
|
1155
|
-
if (containerElement) {
|
|
1156
|
-
_bb.attachChildren(containerElement);
|
|
1157
|
-
if (!hasLoaded) {
|
|
1158
|
-
_bb.call(onLoad);
|
|
1159
|
-
$$invalidate('hasLoaded', hasLoaded = true);
|
|
1160
|
-
}
|
|
1161
|
-
}
|
|
1162
|
-
} }
|
|
1163
|
-
};
|
|
1164
|
-
|
|
1165
|
-
return {
|
|
1166
|
-
className,
|
|
1167
|
-
onLoad,
|
|
1168
|
-
type,
|
|
1169
|
-
backgroundColor,
|
|
1170
|
-
color,
|
|
1171
|
-
borderWidth,
|
|
1172
|
-
borderColor,
|
|
1173
|
-
borderStyle,
|
|
1174
|
-
_bb,
|
|
1175
|
-
containerElement,
|
|
1176
|
-
cssVariables,
|
|
1177
|
-
classes,
|
|
1178
|
-
div_binding,
|
|
1179
|
-
header_binding,
|
|
1180
|
-
main_binding,
|
|
1181
|
-
footer_binding,
|
|
1182
|
-
aside_binding,
|
|
1183
|
-
summary_binding,
|
|
1184
|
-
details_binding,
|
|
1185
|
-
article_binding,
|
|
1186
|
-
nav_binding,
|
|
1187
|
-
mark_binding,
|
|
1188
|
-
figure_binding,
|
|
1189
|
-
figcaption_binding,
|
|
1190
|
-
p_binding
|
|
1191
|
-
};
|
|
1192
|
-
}
|
|
1193
|
-
|
|
1194
|
-
class Container extends SvelteComponent {
|
|
1195
|
-
constructor(options) {
|
|
1196
|
-
super();
|
|
1197
|
-
if (!document.getElementById("svelte-hu2o2q-style")) add_css();
|
|
1198
|
-
init(this, options, instance, create_fragment, safe_not_equal, ["className", "onLoad", "type", "backgroundColor", "color", "borderWidth", "borderColor", "borderStyle", "_bb"]);
|
|
1199
|
-
}
|
|
1200
|
-
}
|
|
1201
|
-
|
|
1202
|
-
const buildStyle = styles => {
|
|
1203
|
-
let str = "";
|
|
1204
|
-
for (let s in styles) {
|
|
1205
|
-
if (styles[s]) {
|
|
1206
|
-
str += `${s}: ${styles[s]}; `;
|
|
1207
|
-
}
|
|
1208
|
-
}
|
|
1209
|
-
return str
|
|
1210
|
-
};
|
|
1211
|
-
|
|
1212
|
-
/* src\Text.svelte generated by Svelte v3.12.1 */
|
|
1213
|
-
|
|
1214
|
-
// (53:0) {:else}
|
|
1215
|
-
function create_else_block(ctx) {
|
|
1216
|
-
var t;
|
|
1217
|
-
|
|
1218
|
-
return {
|
|
1219
|
-
c() {
|
|
1220
|
-
t = text(ctx.text);
|
|
1221
|
-
},
|
|
1222
|
-
|
|
1223
|
-
l(nodes) {
|
|
1224
|
-
t = claim_text(nodes, ctx.text);
|
|
1225
|
-
},
|
|
1226
|
-
|
|
1227
|
-
m(target, anchor) {
|
|
1228
|
-
insert(target, t, anchor);
|
|
1229
|
-
},
|
|
1230
|
-
|
|
1231
|
-
p(changed, ctx) {
|
|
1232
|
-
if (changed.text) {
|
|
1233
|
-
set_data(t, ctx.text);
|
|
1234
|
-
}
|
|
1235
|
-
},
|
|
1236
|
-
|
|
1237
|
-
d(detaching) {
|
|
1238
|
-
if (detaching) {
|
|
1239
|
-
detach(t);
|
|
1240
|
-
}
|
|
1241
|
-
}
|
|
1242
|
-
};
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
|
-
// (51:25)
|
|
1246
|
-
function create_if_block_10$1(ctx) {
|
|
1247
|
-
var sup, t;
|
|
1248
|
-
|
|
1249
|
-
return {
|
|
1250
|
-
c() {
|
|
1251
|
-
sup = element("sup");
|
|
1252
|
-
t = text(ctx.text);
|
|
1253
|
-
this.h();
|
|
1254
|
-
},
|
|
1255
|
-
|
|
1256
|
-
l(nodes) {
|
|
1257
|
-
sup = claim_element(nodes, "SUP", { class: true, style: true }, false);
|
|
1258
|
-
var sup_nodes = children(sup);
|
|
1259
|
-
|
|
1260
|
-
t = claim_text(sup_nodes, ctx.text);
|
|
1261
|
-
sup_nodes.forEach(detach);
|
|
1262
|
-
this.h();
|
|
1263
|
-
},
|
|
1264
|
-
|
|
1265
|
-
h() {
|
|
1266
|
-
attr(sup, "class", ctx.className);
|
|
1267
|
-
attr(sup, "style", ctx.style);
|
|
1268
|
-
},
|
|
1269
|
-
|
|
1270
|
-
m(target, anchor) {
|
|
1271
|
-
insert(target, sup, anchor);
|
|
1272
|
-
append(sup, t);
|
|
1273
|
-
},
|
|
1274
|
-
|
|
1275
|
-
p(changed, ctx) {
|
|
1276
|
-
if (changed.text) {
|
|
1277
|
-
set_data(t, ctx.text);
|
|
1278
|
-
}
|
|
1279
|
-
|
|
1280
|
-
if (changed.className) {
|
|
1281
|
-
attr(sup, "class", ctx.className);
|
|
1282
|
-
}
|
|
1283
|
-
|
|
1284
|
-
if (changed.style) {
|
|
1285
|
-
attr(sup, "style", ctx.style);
|
|
1286
|
-
}
|
|
1287
|
-
},
|
|
1288
|
-
|
|
1289
|
-
d(detaching) {
|
|
1290
|
-
if (detaching) {
|
|
1291
|
-
detach(sup);
|
|
1292
|
-
}
|
|
1293
|
-
}
|
|
1294
|
-
};
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1297
|
-
// (49:25)
|
|
1298
|
-
function create_if_block_9$1(ctx) {
|
|
1299
|
-
var sub, t;
|
|
1300
|
-
|
|
1301
|
-
return {
|
|
1302
|
-
c() {
|
|
1303
|
-
sub = element("sub");
|
|
1304
|
-
t = text(ctx.text);
|
|
1305
|
-
this.h();
|
|
1306
|
-
},
|
|
1307
|
-
|
|
1308
|
-
l(nodes) {
|
|
1309
|
-
sub = claim_element(nodes, "SUB", { class: true, style: true }, false);
|
|
1310
|
-
var sub_nodes = children(sub);
|
|
1311
|
-
|
|
1312
|
-
t = claim_text(sub_nodes, ctx.text);
|
|
1313
|
-
sub_nodes.forEach(detach);
|
|
1314
|
-
this.h();
|
|
1315
|
-
},
|
|
1316
|
-
|
|
1317
|
-
h() {
|
|
1318
|
-
attr(sub, "class", ctx.className);
|
|
1319
|
-
attr(sub, "style", ctx.style);
|
|
1320
|
-
},
|
|
1321
|
-
|
|
1322
|
-
m(target, anchor) {
|
|
1323
|
-
insert(target, sub, anchor);
|
|
1324
|
-
append(sub, t);
|
|
1325
|
-
},
|
|
1326
|
-
|
|
1327
|
-
p(changed, ctx) {
|
|
1328
|
-
if (changed.text) {
|
|
1329
|
-
set_data(t, ctx.text);
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
if (changed.className) {
|
|
1333
|
-
attr(sub, "class", ctx.className);
|
|
1334
|
-
}
|
|
1335
|
-
|
|
1336
|
-
if (changed.style) {
|
|
1337
|
-
attr(sub, "style", ctx.style);
|
|
1338
|
-
}
|
|
1339
|
-
},
|
|
1340
|
-
|
|
1341
|
-
d(detaching) {
|
|
1342
|
-
if (detaching) {
|
|
1343
|
-
detach(sub);
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
};
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
|
-
// (47:25)
|
|
1350
|
-
function create_if_block_8$1(ctx) {
|
|
1351
|
-
var ins, t;
|
|
1352
|
-
|
|
1353
|
-
return {
|
|
1354
|
-
c() {
|
|
1355
|
-
ins = element("ins");
|
|
1356
|
-
t = text(ctx.text);
|
|
1357
|
-
this.h();
|
|
1358
|
-
},
|
|
1359
|
-
|
|
1360
|
-
l(nodes) {
|
|
1361
|
-
ins = claim_element(nodes, "INS", { class: true, style: true }, false);
|
|
1362
|
-
var ins_nodes = children(ins);
|
|
1363
|
-
|
|
1364
|
-
t = claim_text(ins_nodes, ctx.text);
|
|
1365
|
-
ins_nodes.forEach(detach);
|
|
1366
|
-
this.h();
|
|
1367
|
-
},
|
|
1368
|
-
|
|
1369
|
-
h() {
|
|
1370
|
-
attr(ins, "class", ctx.className);
|
|
1371
|
-
attr(ins, "style", ctx.style);
|
|
1372
|
-
},
|
|
1373
|
-
|
|
1374
|
-
m(target, anchor) {
|
|
1375
|
-
insert(target, ins, anchor);
|
|
1376
|
-
append(ins, t);
|
|
1377
|
-
},
|
|
1378
|
-
|
|
1379
|
-
p(changed, ctx) {
|
|
1380
|
-
if (changed.text) {
|
|
1381
|
-
set_data(t, ctx.text);
|
|
1382
|
-
}
|
|
1383
|
-
|
|
1384
|
-
if (changed.className) {
|
|
1385
|
-
attr(ins, "class", ctx.className);
|
|
1386
|
-
}
|
|
1387
|
-
|
|
1388
|
-
if (changed.style) {
|
|
1389
|
-
attr(ins, "style", ctx.style);
|
|
1390
|
-
}
|
|
1391
|
-
},
|
|
1392
|
-
|
|
1393
|
-
d(detaching) {
|
|
1394
|
-
if (detaching) {
|
|
1395
|
-
detach(ins);
|
|
1396
|
-
}
|
|
1397
|
-
}
|
|
1398
|
-
};
|
|
1399
|
-
}
|
|
1400
|
-
|
|
1401
|
-
// (45:25)
|
|
1402
|
-
function create_if_block_7$1(ctx) {
|
|
1403
|
-
var del, t;
|
|
1404
|
-
|
|
1405
|
-
return {
|
|
1406
|
-
c() {
|
|
1407
|
-
del = element("del");
|
|
1408
|
-
t = text(ctx.text);
|
|
1409
|
-
this.h();
|
|
1410
|
-
},
|
|
1411
|
-
|
|
1412
|
-
l(nodes) {
|
|
1413
|
-
del = claim_element(nodes, "DEL", { class: true, style: true }, false);
|
|
1414
|
-
var del_nodes = children(del);
|
|
1415
|
-
|
|
1416
|
-
t = claim_text(del_nodes, ctx.text);
|
|
1417
|
-
del_nodes.forEach(detach);
|
|
1418
|
-
this.h();
|
|
1419
|
-
},
|
|
1420
|
-
|
|
1421
|
-
h() {
|
|
1422
|
-
attr(del, "class", ctx.className);
|
|
1423
|
-
attr(del, "style", ctx.style);
|
|
1424
|
-
},
|
|
1425
|
-
|
|
1426
|
-
m(target, anchor) {
|
|
1427
|
-
insert(target, del, anchor);
|
|
1428
|
-
append(del, t);
|
|
1429
|
-
},
|
|
1430
|
-
|
|
1431
|
-
p(changed, ctx) {
|
|
1432
|
-
if (changed.text) {
|
|
1433
|
-
set_data(t, ctx.text);
|
|
1434
|
-
}
|
|
1435
|
-
|
|
1436
|
-
if (changed.className) {
|
|
1437
|
-
attr(del, "class", ctx.className);
|
|
1438
|
-
}
|
|
1439
|
-
|
|
1440
|
-
if (changed.style) {
|
|
1441
|
-
attr(del, "style", ctx.style);
|
|
1442
|
-
}
|
|
1443
|
-
},
|
|
1444
|
-
|
|
1445
|
-
d(detaching) {
|
|
1446
|
-
if (detaching) {
|
|
1447
|
-
detach(del);
|
|
1448
|
-
}
|
|
1449
|
-
}
|
|
1450
|
-
};
|
|
1451
|
-
}
|
|
1452
|
-
|
|
1453
|
-
// (43:27)
|
|
1454
|
-
function create_if_block_6$1(ctx) {
|
|
1455
|
-
var small, t;
|
|
1456
|
-
|
|
1457
|
-
return {
|
|
1458
|
-
c() {
|
|
1459
|
-
small = element("small");
|
|
1460
|
-
t = text(ctx.text);
|
|
1461
|
-
this.h();
|
|
1462
|
-
},
|
|
1463
|
-
|
|
1464
|
-
l(nodes) {
|
|
1465
|
-
small = claim_element(nodes, "SMALL", { class: true, style: true }, false);
|
|
1466
|
-
var small_nodes = children(small);
|
|
1467
|
-
|
|
1468
|
-
t = claim_text(small_nodes, ctx.text);
|
|
1469
|
-
small_nodes.forEach(detach);
|
|
1470
|
-
this.h();
|
|
1471
|
-
},
|
|
1472
|
-
|
|
1473
|
-
h() {
|
|
1474
|
-
attr(small, "class", ctx.className);
|
|
1475
|
-
attr(small, "style", ctx.style);
|
|
1476
|
-
},
|
|
1477
|
-
|
|
1478
|
-
m(target, anchor) {
|
|
1479
|
-
insert(target, small, anchor);
|
|
1480
|
-
append(small, t);
|
|
1481
|
-
},
|
|
1482
|
-
|
|
1483
|
-
p(changed, ctx) {
|
|
1484
|
-
if (changed.text) {
|
|
1485
|
-
set_data(t, ctx.text);
|
|
1486
|
-
}
|
|
1487
|
-
|
|
1488
|
-
if (changed.className) {
|
|
1489
|
-
attr(small, "class", ctx.className);
|
|
1490
|
-
}
|
|
1491
|
-
|
|
1492
|
-
if (changed.style) {
|
|
1493
|
-
attr(small, "style", ctx.style);
|
|
1494
|
-
}
|
|
1495
|
-
},
|
|
1496
|
-
|
|
1497
|
-
d(detaching) {
|
|
1498
|
-
if (detaching) {
|
|
1499
|
-
detach(small);
|
|
1500
|
-
}
|
|
1501
|
-
}
|
|
1502
|
-
};
|
|
1503
|
-
}
|
|
1504
|
-
|
|
1505
|
-
// (41:26)
|
|
1506
|
-
function create_if_block_5$1(ctx) {
|
|
1507
|
-
var mark, t;
|
|
1508
|
-
|
|
1509
|
-
return {
|
|
1510
|
-
c() {
|
|
1511
|
-
mark = element("mark");
|
|
1512
|
-
t = text(ctx.text);
|
|
1513
|
-
this.h();
|
|
1514
|
-
},
|
|
1515
|
-
|
|
1516
|
-
l(nodes) {
|
|
1517
|
-
mark = claim_element(nodes, "MARK", { class: true, style: true }, false);
|
|
1518
|
-
var mark_nodes = children(mark);
|
|
1519
|
-
|
|
1520
|
-
t = claim_text(mark_nodes, ctx.text);
|
|
1521
|
-
mark_nodes.forEach(detach);
|
|
1522
|
-
this.h();
|
|
1523
|
-
},
|
|
1524
|
-
|
|
1525
|
-
h() {
|
|
1526
|
-
attr(mark, "class", ctx.className);
|
|
1527
|
-
attr(mark, "style", ctx.style);
|
|
1528
|
-
},
|
|
1529
|
-
|
|
1530
|
-
m(target, anchor) {
|
|
1531
|
-
insert(target, mark, anchor);
|
|
1532
|
-
append(mark, t);
|
|
1533
|
-
},
|
|
1534
|
-
|
|
1535
|
-
p(changed, ctx) {
|
|
1536
|
-
if (changed.text) {
|
|
1537
|
-
set_data(t, ctx.text);
|
|
1538
|
-
}
|
|
1539
|
-
|
|
1540
|
-
if (changed.className) {
|
|
1541
|
-
attr(mark, "class", ctx.className);
|
|
1542
|
-
}
|
|
1543
|
-
|
|
1544
|
-
if (changed.style) {
|
|
1545
|
-
attr(mark, "style", ctx.style);
|
|
1546
|
-
}
|
|
1547
|
-
},
|
|
1548
|
-
|
|
1549
|
-
d(detaching) {
|
|
1550
|
-
if (detaching) {
|
|
1551
|
-
detach(mark);
|
|
1552
|
-
}
|
|
1553
|
-
}
|
|
1554
|
-
};
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
|
-
// (39:24)
|
|
1558
|
-
function create_if_block_4$1(ctx) {
|
|
1559
|
-
var em, t;
|
|
1560
|
-
|
|
1561
|
-
return {
|
|
1562
|
-
c() {
|
|
1563
|
-
em = element("em");
|
|
1564
|
-
t = text(ctx.text);
|
|
1565
|
-
this.h();
|
|
1566
|
-
},
|
|
1567
|
-
|
|
1568
|
-
l(nodes) {
|
|
1569
|
-
em = claim_element(nodes, "EM", { class: true, style: true }, false);
|
|
1570
|
-
var em_nodes = children(em);
|
|
1571
|
-
|
|
1572
|
-
t = claim_text(em_nodes, ctx.text);
|
|
1573
|
-
em_nodes.forEach(detach);
|
|
1574
|
-
this.h();
|
|
1575
|
-
},
|
|
1576
|
-
|
|
1577
|
-
h() {
|
|
1578
|
-
attr(em, "class", ctx.className);
|
|
1579
|
-
attr(em, "style", ctx.style);
|
|
1580
|
-
},
|
|
1581
|
-
|
|
1582
|
-
m(target, anchor) {
|
|
1583
|
-
insert(target, em, anchor);
|
|
1584
|
-
append(em, t);
|
|
1585
|
-
},
|
|
1586
|
-
|
|
1587
|
-
p(changed, ctx) {
|
|
1588
|
-
if (changed.text) {
|
|
1589
|
-
set_data(t, ctx.text);
|
|
1590
|
-
}
|
|
1591
|
-
|
|
1592
|
-
if (changed.className) {
|
|
1593
|
-
attr(em, "class", ctx.className);
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1596
|
-
if (changed.style) {
|
|
1597
|
-
attr(em, "style", ctx.style);
|
|
1598
|
-
}
|
|
1599
|
-
},
|
|
1600
|
-
|
|
1601
|
-
d(detaching) {
|
|
1602
|
-
if (detaching) {
|
|
1603
|
-
detach(em);
|
|
1604
|
-
}
|
|
1605
|
-
}
|
|
1606
|
-
};
|
|
1607
|
-
}
|
|
1608
|
-
|
|
1609
|
-
// (37:23)
|
|
1610
|
-
function create_if_block_3$1(ctx) {
|
|
1611
|
-
var i, t;
|
|
1612
|
-
|
|
1613
|
-
return {
|
|
1614
|
-
c() {
|
|
1615
|
-
i = element("i");
|
|
1616
|
-
t = text(ctx.text);
|
|
1617
|
-
this.h();
|
|
1618
|
-
},
|
|
1619
|
-
|
|
1620
|
-
l(nodes) {
|
|
1621
|
-
i = claim_element(nodes, "I", { class: true, style: true }, false);
|
|
1622
|
-
var i_nodes = children(i);
|
|
1623
|
-
|
|
1624
|
-
t = claim_text(i_nodes, ctx.text);
|
|
1625
|
-
i_nodes.forEach(detach);
|
|
1626
|
-
this.h();
|
|
1627
|
-
},
|
|
1628
|
-
|
|
1629
|
-
h() {
|
|
1630
|
-
attr(i, "class", ctx.className);
|
|
1631
|
-
attr(i, "style", ctx.style);
|
|
1632
|
-
},
|
|
1633
|
-
|
|
1634
|
-
m(target, anchor) {
|
|
1635
|
-
insert(target, i, anchor);
|
|
1636
|
-
append(i, t);
|
|
1637
|
-
},
|
|
1638
|
-
|
|
1639
|
-
p(changed, ctx) {
|
|
1640
|
-
if (changed.text) {
|
|
1641
|
-
set_data(t, ctx.text);
|
|
1642
|
-
}
|
|
1643
|
-
|
|
1644
|
-
if (changed.className) {
|
|
1645
|
-
attr(i, "class", ctx.className);
|
|
1646
|
-
}
|
|
1647
|
-
|
|
1648
|
-
if (changed.style) {
|
|
1649
|
-
attr(i, "style", ctx.style);
|
|
1650
|
-
}
|
|
1651
|
-
},
|
|
1652
|
-
|
|
1653
|
-
d(detaching) {
|
|
1654
|
-
if (detaching) {
|
|
1655
|
-
detach(i);
|
|
1656
|
-
}
|
|
1657
|
-
}
|
|
1658
|
-
};
|
|
1659
|
-
}
|
|
1660
|
-
|
|
1661
|
-
// (35:28)
|
|
1662
|
-
function create_if_block_2$1(ctx) {
|
|
1663
|
-
var strong, t;
|
|
1664
|
-
|
|
1665
|
-
return {
|
|
1666
|
-
c() {
|
|
1667
|
-
strong = element("strong");
|
|
1668
|
-
t = text(ctx.text);
|
|
1669
|
-
this.h();
|
|
1670
|
-
},
|
|
1671
|
-
|
|
1672
|
-
l(nodes) {
|
|
1673
|
-
strong = claim_element(nodes, "STRONG", { class: true, style: true }, false);
|
|
1674
|
-
var strong_nodes = children(strong);
|
|
1675
|
-
|
|
1676
|
-
t = claim_text(strong_nodes, ctx.text);
|
|
1677
|
-
strong_nodes.forEach(detach);
|
|
1678
|
-
this.h();
|
|
1679
|
-
},
|
|
1680
|
-
|
|
1681
|
-
h() {
|
|
1682
|
-
attr(strong, "class", ctx.className);
|
|
1683
|
-
attr(strong, "style", ctx.style);
|
|
1684
|
-
},
|
|
1685
|
-
|
|
1686
|
-
m(target, anchor) {
|
|
1687
|
-
insert(target, strong, anchor);
|
|
1688
|
-
append(strong, t);
|
|
1689
|
-
},
|
|
1690
|
-
|
|
1691
|
-
p(changed, ctx) {
|
|
1692
|
-
if (changed.text) {
|
|
1693
|
-
set_data(t, ctx.text);
|
|
1694
|
-
}
|
|
1695
|
-
|
|
1696
|
-
if (changed.className) {
|
|
1697
|
-
attr(strong, "class", ctx.className);
|
|
1698
|
-
}
|
|
1699
|
-
|
|
1700
|
-
if (changed.style) {
|
|
1701
|
-
attr(strong, "style", ctx.style);
|
|
1702
|
-
}
|
|
1703
|
-
},
|
|
1704
|
-
|
|
1705
|
-
d(detaching) {
|
|
1706
|
-
if (detaching) {
|
|
1707
|
-
detach(strong);
|
|
1708
|
-
}
|
|
1709
|
-
}
|
|
1710
|
-
};
|
|
1711
|
-
}
|
|
1712
|
-
|
|
1713
|
-
// (33:23)
|
|
1714
|
-
function create_if_block_1$1(ctx) {
|
|
1715
|
-
var b, t;
|
|
1716
|
-
|
|
1717
|
-
return {
|
|
1718
|
-
c() {
|
|
1719
|
-
b = element("b");
|
|
1720
|
-
t = text(ctx.text);
|
|
1721
|
-
this.h();
|
|
1722
|
-
},
|
|
1723
|
-
|
|
1724
|
-
l(nodes) {
|
|
1725
|
-
b = claim_element(nodes, "B", { class: true, style: true }, false);
|
|
1726
|
-
var b_nodes = children(b);
|
|
1727
|
-
|
|
1728
|
-
t = claim_text(b_nodes, ctx.text);
|
|
1729
|
-
b_nodes.forEach(detach);
|
|
1730
|
-
this.h();
|
|
1731
|
-
},
|
|
1732
|
-
|
|
1733
|
-
h() {
|
|
1734
|
-
attr(b, "class", ctx.className);
|
|
1735
|
-
attr(b, "style", ctx.style);
|
|
1736
|
-
},
|
|
1737
|
-
|
|
1738
|
-
m(target, anchor) {
|
|
1739
|
-
insert(target, b, anchor);
|
|
1740
|
-
append(b, t);
|
|
1741
|
-
},
|
|
1742
|
-
|
|
1743
|
-
p(changed, ctx) {
|
|
1744
|
-
if (changed.text) {
|
|
1745
|
-
set_data(t, ctx.text);
|
|
1746
|
-
}
|
|
1747
|
-
|
|
1748
|
-
if (changed.className) {
|
|
1749
|
-
attr(b, "class", ctx.className);
|
|
1750
|
-
}
|
|
1751
|
-
|
|
1752
|
-
if (changed.style) {
|
|
1753
|
-
attr(b, "style", ctx.style);
|
|
1754
|
-
}
|
|
1755
|
-
},
|
|
1756
|
-
|
|
1757
|
-
d(detaching) {
|
|
1758
|
-
if (detaching) {
|
|
1759
|
-
detach(b);
|
|
1760
|
-
}
|
|
1761
|
-
}
|
|
1762
|
-
};
|
|
1763
|
-
}
|
|
1764
|
-
|
|
1765
|
-
// (31:0) {#if isTag('none')}
|
|
1766
|
-
function create_if_block$1(ctx) {
|
|
1767
|
-
var span, t;
|
|
1768
|
-
|
|
1769
|
-
return {
|
|
1770
|
-
c() {
|
|
1771
|
-
span = element("span");
|
|
1772
|
-
t = text(ctx.text);
|
|
1773
|
-
},
|
|
1774
|
-
|
|
1775
|
-
l(nodes) {
|
|
1776
|
-
span = claim_element(nodes, "SPAN", {}, false);
|
|
1777
|
-
var span_nodes = children(span);
|
|
1778
|
-
|
|
1779
|
-
t = claim_text(span_nodes, ctx.text);
|
|
1780
|
-
span_nodes.forEach(detach);
|
|
1781
|
-
},
|
|
1782
|
-
|
|
1783
|
-
m(target, anchor) {
|
|
1784
|
-
insert(target, span, anchor);
|
|
1785
|
-
append(span, t);
|
|
1786
|
-
},
|
|
1787
|
-
|
|
1788
|
-
p(changed, ctx) {
|
|
1789
|
-
if (changed.text) {
|
|
1790
|
-
set_data(t, ctx.text);
|
|
1791
|
-
}
|
|
1792
|
-
},
|
|
1793
|
-
|
|
1794
|
-
d(detaching) {
|
|
1795
|
-
if (detaching) {
|
|
1796
|
-
detach(span);
|
|
1797
|
-
}
|
|
1798
|
-
}
|
|
1799
|
-
};
|
|
1800
|
-
}
|
|
1801
|
-
|
|
1802
|
-
function create_fragment$1(ctx) {
|
|
1803
|
-
var if_block_anchor;
|
|
1804
|
-
|
|
1805
|
-
function select_block_type(changed, ctx) {
|
|
1806
|
-
if (ctx.isTag('none')) return create_if_block$1;
|
|
1807
|
-
if (ctx.isTag('<b>')) return create_if_block_1$1;
|
|
1808
|
-
if (ctx.isTag('<strong>')) return create_if_block_2$1;
|
|
1809
|
-
if (ctx.isTag('<i>')) return create_if_block_3$1;
|
|
1810
|
-
if (ctx.isTag('<em>')) return create_if_block_4$1;
|
|
1811
|
-
if (ctx.isTag('<mark>')) return create_if_block_5$1;
|
|
1812
|
-
if (ctx.isTag('<small>')) return create_if_block_6$1;
|
|
1813
|
-
if (ctx.isTag('<del>')) return create_if_block_7$1;
|
|
1814
|
-
if (ctx.isTag('<ins>')) return create_if_block_8$1;
|
|
1815
|
-
if (ctx.isTag('<sub>')) return create_if_block_9$1;
|
|
1816
|
-
if (ctx.isTag('<sup>')) return create_if_block_10$1;
|
|
1817
|
-
return create_else_block;
|
|
1818
|
-
}
|
|
1819
|
-
|
|
1820
|
-
var current_block_type = select_block_type(null, ctx);
|
|
1821
|
-
var if_block = current_block_type(ctx);
|
|
1822
|
-
|
|
1823
|
-
return {
|
|
1824
|
-
c() {
|
|
1825
|
-
if_block.c();
|
|
1826
|
-
if_block_anchor = empty();
|
|
1827
|
-
},
|
|
1828
|
-
|
|
1829
|
-
l(nodes) {
|
|
1830
|
-
if_block.l(nodes);
|
|
1831
|
-
if_block_anchor = empty();
|
|
1832
|
-
},
|
|
1833
|
-
|
|
1834
|
-
m(target, anchor) {
|
|
1835
|
-
if_block.m(target, anchor);
|
|
1836
|
-
insert(target, if_block_anchor, anchor);
|
|
1837
|
-
},
|
|
1838
|
-
|
|
1839
|
-
p(changed, ctx) {
|
|
1840
|
-
if_block.p(changed, ctx);
|
|
1841
|
-
},
|
|
1842
|
-
|
|
1843
|
-
i: noop,
|
|
1844
|
-
o: noop,
|
|
1845
|
-
|
|
1846
|
-
d(detaching) {
|
|
1847
|
-
if_block.d(detaching);
|
|
1848
|
-
|
|
1849
|
-
if (detaching) {
|
|
1850
|
-
detach(if_block_anchor);
|
|
1851
|
-
}
|
|
1852
|
-
}
|
|
1853
|
-
};
|
|
1854
|
-
}
|
|
1855
|
-
|
|
1856
|
-
function instance$1($$self, $$props, $$invalidate) {
|
|
1857
|
-
let { text = "", className = "", formattingTag = "", font = "", textAlign = "", verticalAlign = "", color = "", _bb } = $$props;
|
|
1858
|
-
|
|
1859
|
-
let style = "";
|
|
1860
|
-
|
|
1861
|
-
const isTag = tag => (formattingTag || "").indexOf(tag) > -1;
|
|
1862
|
-
|
|
1863
|
-
$$self.$set = $$props => {
|
|
1864
|
-
if ('text' in $$props) $$invalidate('text', text = $$props.text);
|
|
1865
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
1866
|
-
if ('formattingTag' in $$props) $$invalidate('formattingTag', formattingTag = $$props.formattingTag);
|
|
1867
|
-
if ('font' in $$props) $$invalidate('font', font = $$props.font);
|
|
1868
|
-
if ('textAlign' in $$props) $$invalidate('textAlign', textAlign = $$props.textAlign);
|
|
1869
|
-
if ('verticalAlign' in $$props) $$invalidate('verticalAlign', verticalAlign = $$props.verticalAlign);
|
|
1870
|
-
if ('color' in $$props) $$invalidate('color', color = $$props.color);
|
|
1871
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
1872
|
-
};
|
|
1873
|
-
|
|
1874
|
-
$$self.$$.update = ($$dirty = { font: 1, verticalAlign: 1, color: 1, textAlign: 1 }) => {
|
|
1875
|
-
if ($$dirty.font || $$dirty.verticalAlign || $$dirty.color || $$dirty.textAlign) { {
|
|
1876
|
-
$$invalidate('style', style = buildStyle({
|
|
1877
|
-
font,
|
|
1878
|
-
verticalAlign,
|
|
1879
|
-
color,
|
|
1880
|
-
"text-align": textAlign,
|
|
1881
|
-
"vertical-align": verticalAlign,
|
|
1882
|
-
}));
|
|
1883
|
-
} }
|
|
1884
|
-
};
|
|
1885
|
-
|
|
1886
|
-
return {
|
|
1887
|
-
text,
|
|
1888
|
-
className,
|
|
1889
|
-
formattingTag,
|
|
1890
|
-
font,
|
|
1891
|
-
textAlign,
|
|
1892
|
-
verticalAlign,
|
|
1893
|
-
color,
|
|
1894
|
-
_bb,
|
|
1895
|
-
style,
|
|
1896
|
-
isTag
|
|
1897
|
-
};
|
|
1898
|
-
}
|
|
1899
|
-
|
|
1900
|
-
class Text extends SvelteComponent {
|
|
1901
|
-
constructor(options) {
|
|
1902
|
-
super();
|
|
1903
|
-
init(this, options, instance$1, create_fragment$1, safe_not_equal, ["text", "className", "formattingTag", "font", "textAlign", "verticalAlign", "color", "_bb"]);
|
|
1904
|
-
}
|
|
1905
|
-
}
|
|
1906
|
-
|
|
1907
|
-
/* src\Heading.svelte generated by Svelte v3.12.1 */
|
|
1908
|
-
|
|
1909
|
-
// (21:24)
|
|
1910
|
-
function create_if_block_5$2(ctx) {
|
|
1911
|
-
var h6;
|
|
1912
|
-
|
|
1913
|
-
return {
|
|
1914
|
-
c() {
|
|
1915
|
-
h6 = element("h6");
|
|
1916
|
-
this.h();
|
|
1917
|
-
},
|
|
1918
|
-
|
|
1919
|
-
l(nodes) {
|
|
1920
|
-
h6 = claim_element(nodes, "H6", { class: true }, false);
|
|
1921
|
-
var h6_nodes = children(h6);
|
|
1922
|
-
|
|
1923
|
-
h6_nodes.forEach(detach);
|
|
1924
|
-
this.h();
|
|
1925
|
-
},
|
|
1926
|
-
|
|
1927
|
-
h() {
|
|
1928
|
-
attr(h6, "class", ctx.className);
|
|
1929
|
-
},
|
|
1930
|
-
|
|
1931
|
-
m(target, anchor) {
|
|
1932
|
-
insert(target, h6, anchor);
|
|
1933
|
-
ctx.h6_binding(h6);
|
|
1934
|
-
},
|
|
1935
|
-
|
|
1936
|
-
p(changed, ctx) {
|
|
1937
|
-
if (changed.className) {
|
|
1938
|
-
attr(h6, "class", ctx.className);
|
|
1939
|
-
}
|
|
1940
|
-
},
|
|
1941
|
-
|
|
1942
|
-
d(detaching) {
|
|
1943
|
-
if (detaching) {
|
|
1944
|
-
detach(h6);
|
|
1945
|
-
}
|
|
1946
|
-
|
|
1947
|
-
ctx.h6_binding(null);
|
|
1948
|
-
}
|
|
1949
|
-
};
|
|
1950
|
-
}
|
|
1951
|
-
|
|
1952
|
-
// (19:24)
|
|
1953
|
-
function create_if_block_4$2(ctx) {
|
|
1954
|
-
var h5;
|
|
1955
|
-
|
|
1956
|
-
return {
|
|
1957
|
-
c() {
|
|
1958
|
-
h5 = element("h5");
|
|
1959
|
-
this.h();
|
|
1960
|
-
},
|
|
1961
|
-
|
|
1962
|
-
l(nodes) {
|
|
1963
|
-
h5 = claim_element(nodes, "H5", { class: true }, false);
|
|
1964
|
-
var h5_nodes = children(h5);
|
|
1965
|
-
|
|
1966
|
-
h5_nodes.forEach(detach);
|
|
1967
|
-
this.h();
|
|
1968
|
-
},
|
|
1969
|
-
|
|
1970
|
-
h() {
|
|
1971
|
-
attr(h5, "class", ctx.className);
|
|
1972
|
-
},
|
|
1973
|
-
|
|
1974
|
-
m(target, anchor) {
|
|
1975
|
-
insert(target, h5, anchor);
|
|
1976
|
-
ctx.h5_binding(h5);
|
|
1977
|
-
},
|
|
1978
|
-
|
|
1979
|
-
p(changed, ctx) {
|
|
1980
|
-
if (changed.className) {
|
|
1981
|
-
attr(h5, "class", ctx.className);
|
|
1982
|
-
}
|
|
1983
|
-
},
|
|
1984
|
-
|
|
1985
|
-
d(detaching) {
|
|
1986
|
-
if (detaching) {
|
|
1987
|
-
detach(h5);
|
|
1988
|
-
}
|
|
1989
|
-
|
|
1990
|
-
ctx.h5_binding(null);
|
|
1991
|
-
}
|
|
1992
|
-
};
|
|
1993
|
-
}
|
|
1994
|
-
|
|
1995
|
-
// (17:24)
|
|
1996
|
-
function create_if_block_3$2(ctx) {
|
|
1997
|
-
var h4;
|
|
1998
|
-
|
|
1999
|
-
return {
|
|
2000
|
-
c() {
|
|
2001
|
-
h4 = element("h4");
|
|
2002
|
-
this.h();
|
|
2003
|
-
},
|
|
2004
|
-
|
|
2005
|
-
l(nodes) {
|
|
2006
|
-
h4 = claim_element(nodes, "H4", { class: true }, false);
|
|
2007
|
-
var h4_nodes = children(h4);
|
|
2008
|
-
|
|
2009
|
-
h4_nodes.forEach(detach);
|
|
2010
|
-
this.h();
|
|
2011
|
-
},
|
|
2012
|
-
|
|
2013
|
-
h() {
|
|
2014
|
-
attr(h4, "class", ctx.className);
|
|
2015
|
-
},
|
|
2016
|
-
|
|
2017
|
-
m(target, anchor) {
|
|
2018
|
-
insert(target, h4, anchor);
|
|
2019
|
-
ctx.h4_binding(h4);
|
|
2020
|
-
},
|
|
2021
|
-
|
|
2022
|
-
p(changed, ctx) {
|
|
2023
|
-
if (changed.className) {
|
|
2024
|
-
attr(h4, "class", ctx.className);
|
|
2025
|
-
}
|
|
2026
|
-
},
|
|
2027
|
-
|
|
2028
|
-
d(detaching) {
|
|
2029
|
-
if (detaching) {
|
|
2030
|
-
detach(h4);
|
|
2031
|
-
}
|
|
2032
|
-
|
|
2033
|
-
ctx.h4_binding(null);
|
|
2034
|
-
}
|
|
2035
|
-
};
|
|
2036
|
-
}
|
|
2037
|
-
|
|
2038
|
-
// (15:24)
|
|
2039
|
-
function create_if_block_2$2(ctx) {
|
|
2040
|
-
var h3;
|
|
2041
|
-
|
|
2042
|
-
return {
|
|
2043
|
-
c() {
|
|
2044
|
-
h3 = element("h3");
|
|
2045
|
-
this.h();
|
|
2046
|
-
},
|
|
2047
|
-
|
|
2048
|
-
l(nodes) {
|
|
2049
|
-
h3 = claim_element(nodes, "H3", { class: true }, false);
|
|
2050
|
-
var h3_nodes = children(h3);
|
|
2051
|
-
|
|
2052
|
-
h3_nodes.forEach(detach);
|
|
2053
|
-
this.h();
|
|
2054
|
-
},
|
|
2055
|
-
|
|
2056
|
-
h() {
|
|
2057
|
-
attr(h3, "class", ctx.className);
|
|
2058
|
-
},
|
|
2059
|
-
|
|
2060
|
-
m(target, anchor) {
|
|
2061
|
-
insert(target, h3, anchor);
|
|
2062
|
-
ctx.h3_binding(h3);
|
|
2063
|
-
},
|
|
2064
|
-
|
|
2065
|
-
p(changed, ctx) {
|
|
2066
|
-
if (changed.className) {
|
|
2067
|
-
attr(h3, "class", ctx.className);
|
|
2068
|
-
}
|
|
2069
|
-
},
|
|
2070
|
-
|
|
2071
|
-
d(detaching) {
|
|
2072
|
-
if (detaching) {
|
|
2073
|
-
detach(h3);
|
|
2074
|
-
}
|
|
2075
|
-
|
|
2076
|
-
ctx.h3_binding(null);
|
|
2077
|
-
}
|
|
2078
|
-
};
|
|
2079
|
-
}
|
|
2080
|
-
|
|
2081
|
-
// (13:24)
|
|
2082
|
-
function create_if_block_1$2(ctx) {
|
|
2083
|
-
var h2;
|
|
2084
|
-
|
|
2085
|
-
return {
|
|
2086
|
-
c() {
|
|
2087
|
-
h2 = element("h2");
|
|
2088
|
-
this.h();
|
|
2089
|
-
},
|
|
2090
|
-
|
|
2091
|
-
l(nodes) {
|
|
2092
|
-
h2 = claim_element(nodes, "H2", { class: true }, false);
|
|
2093
|
-
var h2_nodes = children(h2);
|
|
2094
|
-
|
|
2095
|
-
h2_nodes.forEach(detach);
|
|
2096
|
-
this.h();
|
|
2097
|
-
},
|
|
2098
|
-
|
|
2099
|
-
h() {
|
|
2100
|
-
attr(h2, "class", ctx.className);
|
|
2101
|
-
},
|
|
2102
|
-
|
|
2103
|
-
m(target, anchor) {
|
|
2104
|
-
insert(target, h2, anchor);
|
|
2105
|
-
ctx.h2_binding(h2);
|
|
2106
|
-
},
|
|
2107
|
-
|
|
2108
|
-
p(changed, ctx) {
|
|
2109
|
-
if (changed.className) {
|
|
2110
|
-
attr(h2, "class", ctx.className);
|
|
2111
|
-
}
|
|
2112
|
-
},
|
|
2113
|
-
|
|
2114
|
-
d(detaching) {
|
|
2115
|
-
if (detaching) {
|
|
2116
|
-
detach(h2);
|
|
2117
|
-
}
|
|
2118
|
-
|
|
2119
|
-
ctx.h2_binding(null);
|
|
2120
|
-
}
|
|
2121
|
-
};
|
|
2122
|
-
}
|
|
2123
|
-
|
|
2124
|
-
// (11:0) {#if type === 'h1'}
|
|
2125
|
-
function create_if_block$2(ctx) {
|
|
2126
|
-
var h1;
|
|
2127
|
-
|
|
2128
|
-
return {
|
|
2129
|
-
c() {
|
|
2130
|
-
h1 = element("h1");
|
|
2131
|
-
this.h();
|
|
2132
|
-
},
|
|
2133
|
-
|
|
2134
|
-
l(nodes) {
|
|
2135
|
-
h1 = claim_element(nodes, "H1", { class: true }, false);
|
|
2136
|
-
var h1_nodes = children(h1);
|
|
2137
|
-
|
|
2138
|
-
h1_nodes.forEach(detach);
|
|
2139
|
-
this.h();
|
|
2140
|
-
},
|
|
2141
|
-
|
|
2142
|
-
h() {
|
|
2143
|
-
attr(h1, "class", ctx.className);
|
|
2144
|
-
},
|
|
2145
|
-
|
|
2146
|
-
m(target, anchor) {
|
|
2147
|
-
insert(target, h1, anchor);
|
|
2148
|
-
ctx.h1_binding(h1);
|
|
2149
|
-
},
|
|
2150
|
-
|
|
2151
|
-
p(changed, ctx) {
|
|
2152
|
-
if (changed.className) {
|
|
2153
|
-
attr(h1, "class", ctx.className);
|
|
2154
|
-
}
|
|
2155
|
-
},
|
|
2156
|
-
|
|
2157
|
-
d(detaching) {
|
|
2158
|
-
if (detaching) {
|
|
2159
|
-
detach(h1);
|
|
2160
|
-
}
|
|
2161
|
-
|
|
2162
|
-
ctx.h1_binding(null);
|
|
2163
|
-
}
|
|
2164
|
-
};
|
|
2165
|
-
}
|
|
2166
|
-
|
|
2167
|
-
function create_fragment$2(ctx) {
|
|
2168
|
-
var if_block_anchor;
|
|
2169
|
-
|
|
2170
|
-
function select_block_type(changed, ctx) {
|
|
2171
|
-
if (ctx.type === 'h1') return create_if_block$2;
|
|
2172
|
-
if (ctx.type === 'h2') return create_if_block_1$2;
|
|
2173
|
-
if (ctx.type === 'h3') return create_if_block_2$2;
|
|
2174
|
-
if (ctx.type === 'h4') return create_if_block_3$2;
|
|
2175
|
-
if (ctx.type === 'h5') return create_if_block_4$2;
|
|
2176
|
-
if (ctx.type === 'h6') return create_if_block_5$2;
|
|
2177
|
-
}
|
|
2178
|
-
|
|
2179
|
-
var current_block_type = select_block_type(null, ctx);
|
|
2180
|
-
var if_block = current_block_type && current_block_type(ctx);
|
|
2181
|
-
|
|
2182
|
-
return {
|
|
2183
|
-
c() {
|
|
2184
|
-
if (if_block) if_block.c();
|
|
2185
|
-
if_block_anchor = empty();
|
|
2186
|
-
},
|
|
2187
|
-
|
|
2188
|
-
l(nodes) {
|
|
2189
|
-
if (if_block) if_block.l(nodes);
|
|
2190
|
-
if_block_anchor = empty();
|
|
2191
|
-
},
|
|
2192
|
-
|
|
2193
|
-
m(target, anchor) {
|
|
2194
|
-
if (if_block) if_block.m(target, anchor);
|
|
2195
|
-
insert(target, if_block_anchor, anchor);
|
|
2196
|
-
},
|
|
2197
|
-
|
|
2198
|
-
p(changed, ctx) {
|
|
2199
|
-
if (current_block_type === (current_block_type = select_block_type(changed, ctx)) && if_block) {
|
|
2200
|
-
if_block.p(changed, ctx);
|
|
2201
|
-
} else {
|
|
2202
|
-
if (if_block) if_block.d(1);
|
|
2203
|
-
if_block = current_block_type && current_block_type(ctx);
|
|
2204
|
-
if (if_block) {
|
|
2205
|
-
if_block.c();
|
|
2206
|
-
if_block.m(if_block_anchor.parentNode, if_block_anchor);
|
|
2207
|
-
}
|
|
2208
|
-
}
|
|
2209
|
-
},
|
|
2210
|
-
|
|
2211
|
-
i: noop,
|
|
2212
|
-
o: noop,
|
|
2213
|
-
|
|
2214
|
-
d(detaching) {
|
|
2215
|
-
if (if_block) if_block.d(detaching);
|
|
2216
|
-
|
|
2217
|
-
if (detaching) {
|
|
2218
|
-
detach(if_block_anchor);
|
|
2219
|
-
}
|
|
2220
|
-
}
|
|
2221
|
-
};
|
|
2222
|
-
}
|
|
2223
|
-
|
|
2224
|
-
function instance$2($$self, $$props, $$invalidate) {
|
|
2225
|
-
let { className = "", type, _bb } = $$props;
|
|
2226
|
-
|
|
2227
|
-
let containerElement;
|
|
2228
|
-
|
|
2229
|
-
function h1_binding($$value) {
|
|
2230
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2231
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
2232
|
-
});
|
|
2233
|
-
}
|
|
2234
|
-
|
|
2235
|
-
function h2_binding($$value) {
|
|
2236
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2237
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
2238
|
-
});
|
|
2239
|
-
}
|
|
2240
|
-
|
|
2241
|
-
function h3_binding($$value) {
|
|
2242
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2243
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
2244
|
-
});
|
|
2245
|
-
}
|
|
2246
|
-
|
|
2247
|
-
function h4_binding($$value) {
|
|
2248
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2249
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
2250
|
-
});
|
|
2251
|
-
}
|
|
2252
|
-
|
|
2253
|
-
function h5_binding($$value) {
|
|
2254
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2255
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
2256
|
-
});
|
|
2257
|
-
}
|
|
2258
|
-
|
|
2259
|
-
function h6_binding($$value) {
|
|
2260
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2261
|
-
$$invalidate('containerElement', containerElement = $$value);
|
|
2262
|
-
});
|
|
2263
|
-
}
|
|
2264
|
-
|
|
2265
|
-
$$self.$set = $$props => {
|
|
2266
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
2267
|
-
if ('type' in $$props) $$invalidate('type', type = $$props.type);
|
|
2268
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
2269
|
-
};
|
|
2270
|
-
|
|
2271
|
-
$$self.$$.update = ($$dirty = { containerElement: 1, _bb: 1 }) => {
|
|
2272
|
-
if ($$dirty.containerElement || $$dirty._bb) { containerElement && _bb.attachChildren(containerElement); }
|
|
2273
|
-
};
|
|
2274
|
-
|
|
2275
|
-
return {
|
|
2276
|
-
className,
|
|
2277
|
-
type,
|
|
2278
|
-
_bb,
|
|
2279
|
-
containerElement,
|
|
2280
|
-
h1_binding,
|
|
2281
|
-
h2_binding,
|
|
2282
|
-
h3_binding,
|
|
2283
|
-
h4_binding,
|
|
2284
|
-
h5_binding,
|
|
2285
|
-
h6_binding
|
|
2286
|
-
};
|
|
2287
|
-
}
|
|
2288
|
-
|
|
2289
|
-
class Heading extends SvelteComponent {
|
|
2290
|
-
constructor(options) {
|
|
2291
|
-
super();
|
|
2292
|
-
init(this, options, instance$2, create_fragment$2, safe_not_equal, ["className", "type", "_bb"]);
|
|
2293
|
-
}
|
|
2294
|
-
}
|
|
2295
|
-
|
|
2296
|
-
/* src\Input.svelte generated by Svelte v3.12.1 */
|
|
2297
|
-
|
|
2298
|
-
function create_fragment$3(ctx) {
|
|
2299
|
-
var input, dispose;
|
|
2300
|
-
|
|
2301
|
-
return {
|
|
2302
|
-
c() {
|
|
2303
|
-
input = element("input");
|
|
2304
|
-
this.h();
|
|
2305
|
-
},
|
|
2306
|
-
|
|
2307
|
-
l(nodes) {
|
|
2308
|
-
input = claim_element(nodes, "INPUT", { class: true, type: true, value: true }, false);
|
|
2309
|
-
var input_nodes = children(input);
|
|
2310
|
-
|
|
2311
|
-
input_nodes.forEach(detach);
|
|
2312
|
-
this.h();
|
|
2313
|
-
},
|
|
2314
|
-
|
|
2315
|
-
h() {
|
|
2316
|
-
attr(input, "class", ctx.className);
|
|
2317
|
-
attr(input, "type", ctx.type);
|
|
2318
|
-
input.value = ctx.value;
|
|
2319
|
-
dispose = listen(input, "change", ctx.onchange);
|
|
2320
|
-
},
|
|
2321
|
-
|
|
2322
|
-
m(target, anchor) {
|
|
2323
|
-
insert(target, input, anchor);
|
|
2324
|
-
},
|
|
2325
|
-
|
|
2326
|
-
p(changed, ctx) {
|
|
2327
|
-
if (changed.className) {
|
|
2328
|
-
attr(input, "class", ctx.className);
|
|
2329
|
-
}
|
|
2330
|
-
|
|
2331
|
-
if (changed.type) {
|
|
2332
|
-
attr(input, "type", ctx.type);
|
|
2333
|
-
}
|
|
2334
|
-
|
|
2335
|
-
if (changed.value) {
|
|
2336
|
-
input.value = ctx.value;
|
|
2337
|
-
}
|
|
2338
|
-
},
|
|
2339
|
-
|
|
2340
|
-
i: noop,
|
|
2341
|
-
o: noop,
|
|
2342
|
-
|
|
2343
|
-
d(detaching) {
|
|
2344
|
-
if (detaching) {
|
|
2345
|
-
detach(input);
|
|
2346
|
-
}
|
|
2347
|
-
|
|
2348
|
-
dispose();
|
|
2349
|
-
}
|
|
2350
|
-
};
|
|
2351
|
-
}
|
|
2352
|
-
|
|
2353
|
-
function instance$3($$self, $$props, $$invalidate) {
|
|
2354
|
-
let { value = "", className = "", type = "text", _bb } = $$props;
|
|
2355
|
-
|
|
2356
|
-
const onchange = ev => {
|
|
2357
|
-
if (_bb) {
|
|
2358
|
-
_bb.setStateFromBinding(_bb.props.value, ev.target.value);
|
|
2359
|
-
}
|
|
2360
|
-
};
|
|
2361
|
-
|
|
2362
|
-
$$self.$set = $$props => {
|
|
2363
|
-
if ('value' in $$props) $$invalidate('value', value = $$props.value);
|
|
2364
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
2365
|
-
if ('type' in $$props) $$invalidate('type', type = $$props.type);
|
|
2366
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
2367
|
-
};
|
|
2368
|
-
|
|
2369
|
-
return { value, className, type, _bb, onchange };
|
|
2370
|
-
}
|
|
2371
|
-
|
|
2372
|
-
class Input extends SvelteComponent {
|
|
2373
|
-
constructor(options) {
|
|
2374
|
-
super();
|
|
2375
|
-
init(this, options, instance$3, create_fragment$3, safe_not_equal, ["value", "className", "type", "_bb"]);
|
|
2376
|
-
}
|
|
2377
|
-
}
|
|
2378
|
-
|
|
2379
|
-
/* src\Select.svelte generated by Svelte v3.12.1 */
|
|
2380
|
-
|
|
2381
|
-
function create_fragment$4(ctx) {
|
|
2382
|
-
var select, select_value_value, dispose;
|
|
2383
|
-
|
|
2384
|
-
return {
|
|
2385
|
-
c() {
|
|
2386
|
-
select = element("select");
|
|
2387
|
-
this.h();
|
|
2388
|
-
},
|
|
2389
|
-
|
|
2390
|
-
l(nodes) {
|
|
2391
|
-
select = claim_element(nodes, "SELECT", { class: true, value: true }, false);
|
|
2392
|
-
var select_nodes = children(select);
|
|
2393
|
-
|
|
2394
|
-
select_nodes.forEach(detach);
|
|
2395
|
-
this.h();
|
|
2396
|
-
},
|
|
2397
|
-
|
|
2398
|
-
h() {
|
|
2399
|
-
attr(select, "class", ctx.className);
|
|
2400
|
-
dispose = listen(select, "change", ctx.onchange);
|
|
2401
|
-
},
|
|
2402
|
-
|
|
2403
|
-
m(target, anchor) {
|
|
2404
|
-
insert(target, select, anchor);
|
|
2405
|
-
ctx.select_binding(select);
|
|
2406
|
-
|
|
2407
|
-
select_value_value = ctx.value;
|
|
2408
|
-
for (var i = 0; i < select.options.length; i += 1) {
|
|
2409
|
-
var option = select.options[i];
|
|
2410
|
-
|
|
2411
|
-
if (option.__value === select_value_value) {
|
|
2412
|
-
option.selected = true;
|
|
2413
|
-
break;
|
|
2414
|
-
}
|
|
2415
|
-
}
|
|
2416
|
-
},
|
|
2417
|
-
|
|
2418
|
-
p(changed, ctx) {
|
|
2419
|
-
if (changed.className) {
|
|
2420
|
-
attr(select, "class", ctx.className);
|
|
2421
|
-
}
|
|
2422
|
-
|
|
2423
|
-
if ((changed.value) && select_value_value !== (select_value_value = ctx.value)) {
|
|
2424
|
-
for (var i = 0; i < select.options.length; i += 1) {
|
|
2425
|
-
var option = select.options[i];
|
|
2426
|
-
|
|
2427
|
-
if (option.__value === select_value_value) {
|
|
2428
|
-
option.selected = true;
|
|
2429
|
-
break;
|
|
2430
|
-
}
|
|
2431
|
-
}
|
|
2432
|
-
}
|
|
2433
|
-
},
|
|
2434
|
-
|
|
2435
|
-
i: noop,
|
|
2436
|
-
o: noop,
|
|
2437
|
-
|
|
2438
|
-
d(detaching) {
|
|
2439
|
-
if (detaching) {
|
|
2440
|
-
detach(select);
|
|
2441
|
-
}
|
|
2442
|
-
|
|
2443
|
-
ctx.select_binding(null);
|
|
2444
|
-
dispose();
|
|
2445
|
-
}
|
|
2446
|
-
};
|
|
2447
|
-
}
|
|
2448
|
-
|
|
2449
|
-
function instance$4($$self, $$props, $$invalidate) {
|
|
2450
|
-
let { value = "", className = "", _bb } = $$props;
|
|
2451
|
-
let selectElement;
|
|
2452
|
-
|
|
2453
|
-
const onchange = ev => {
|
|
2454
|
-
if (_bb) {
|
|
2455
|
-
_bb.setStateFromBinding(_bb.props.value, ev.target.value);
|
|
2456
|
-
}
|
|
2457
|
-
};
|
|
2458
|
-
|
|
2459
|
-
function select_binding($$value) {
|
|
2460
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2461
|
-
$$invalidate('selectElement', selectElement = $$value);
|
|
2462
|
-
});
|
|
2463
|
-
}
|
|
2464
|
-
|
|
2465
|
-
$$self.$set = $$props => {
|
|
2466
|
-
if ('value' in $$props) $$invalidate('value', value = $$props.value);
|
|
2467
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
2468
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
2469
|
-
};
|
|
2470
|
-
|
|
2471
|
-
$$self.$$.update = ($$dirty = { selectElement: 1, _bb: 1 }) => {
|
|
2472
|
-
if ($$dirty.selectElement || $$dirty._bb) { selectElement && _bb.attachChildren(selectElement); }
|
|
2473
|
-
};
|
|
2474
|
-
|
|
2475
|
-
return {
|
|
2476
|
-
value,
|
|
2477
|
-
className,
|
|
2478
|
-
_bb,
|
|
2479
|
-
selectElement,
|
|
2480
|
-
onchange,
|
|
2481
|
-
select_binding
|
|
2482
|
-
};
|
|
2483
|
-
}
|
|
2484
|
-
|
|
2485
|
-
class Select extends SvelteComponent {
|
|
2486
|
-
constructor(options) {
|
|
2487
|
-
super();
|
|
2488
|
-
init(this, options, instance$4, create_fragment$4, safe_not_equal, ["value", "className", "_bb"]);
|
|
2489
|
-
}
|
|
2490
|
-
}
|
|
2491
|
-
|
|
2492
|
-
/* src\Option.svelte generated by Svelte v3.12.1 */
|
|
2493
|
-
|
|
2494
|
-
function create_fragment$5(ctx) {
|
|
2495
|
-
var option, t;
|
|
2496
|
-
|
|
2497
|
-
return {
|
|
2498
|
-
c() {
|
|
2499
|
-
option = element("option");
|
|
2500
|
-
t = text(ctx.actualText);
|
|
2501
|
-
this.h();
|
|
2502
|
-
},
|
|
2503
|
-
|
|
2504
|
-
l(nodes) {
|
|
2505
|
-
option = claim_element(nodes, "OPTION", { value: true }, false);
|
|
2506
|
-
var option_nodes = children(option);
|
|
2507
|
-
|
|
2508
|
-
t = claim_text(option_nodes, ctx.actualText);
|
|
2509
|
-
option_nodes.forEach(detach);
|
|
2510
|
-
this.h();
|
|
2511
|
-
},
|
|
2512
|
-
|
|
2513
|
-
h() {
|
|
2514
|
-
option.__value = ctx.actualValue;
|
|
2515
|
-
option.value = option.__value;
|
|
2516
|
-
},
|
|
2517
|
-
|
|
2518
|
-
m(target, anchor) {
|
|
2519
|
-
insert(target, option, anchor);
|
|
2520
|
-
append(option, t);
|
|
2521
|
-
},
|
|
2522
|
-
|
|
2523
|
-
p(changed, ctx) {
|
|
2524
|
-
if (changed.actualText) {
|
|
2525
|
-
set_data(t, ctx.actualText);
|
|
2526
|
-
}
|
|
2527
|
-
|
|
2528
|
-
if (changed.actualValue) {
|
|
2529
|
-
option.__value = ctx.actualValue;
|
|
2530
|
-
}
|
|
2531
|
-
|
|
2532
|
-
option.value = option.__value;
|
|
2533
|
-
},
|
|
2534
|
-
|
|
2535
|
-
i: noop,
|
|
2536
|
-
o: noop,
|
|
2537
|
-
|
|
2538
|
-
d(detaching) {
|
|
2539
|
-
if (detaching) {
|
|
2540
|
-
detach(option);
|
|
2541
|
-
}
|
|
2542
|
-
}
|
|
2543
|
-
};
|
|
2544
|
-
}
|
|
2545
|
-
|
|
2546
|
-
function instance$5($$self, $$props, $$invalidate) {
|
|
2547
|
-
let { value = "", text = "", _bb } = $$props;
|
|
2548
|
-
|
|
2549
|
-
let actualValue;
|
|
2550
|
-
let actualText;
|
|
2551
|
-
|
|
2552
|
-
$$self.$set = $$props => {
|
|
2553
|
-
if ('value' in $$props) $$invalidate('value', value = $$props.value);
|
|
2554
|
-
if ('text' in $$props) $$invalidate('text', text = $$props.text);
|
|
2555
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
2556
|
-
};
|
|
2557
|
-
|
|
2558
|
-
$$self.$$.update = ($$dirty = { value: 1, text: 1 }) => {
|
|
2559
|
-
if ($$dirty.value || $$dirty.text) { $$invalidate('actualValue', actualValue = value || text || ""); }
|
|
2560
|
-
if ($$dirty.text || $$dirty.value) { $$invalidate('actualText', actualText = text || value || ""); }
|
|
2561
|
-
};
|
|
2562
|
-
|
|
2563
|
-
return {
|
|
2564
|
-
value,
|
|
2565
|
-
text,
|
|
2566
|
-
_bb,
|
|
2567
|
-
actualValue,
|
|
2568
|
-
actualText
|
|
2569
|
-
};
|
|
2570
|
-
}
|
|
2571
|
-
|
|
2572
|
-
class Option extends SvelteComponent {
|
|
2573
|
-
constructor(options) {
|
|
2574
|
-
super();
|
|
2575
|
-
init(this, options, instance$5, create_fragment$5, safe_not_equal, ["value", "text", "_bb"]);
|
|
2576
|
-
}
|
|
2577
|
-
}
|
|
2578
|
-
|
|
2579
|
-
/* src\Button.svelte generated by Svelte v3.12.1 */
|
|
2580
|
-
|
|
2581
|
-
function add_css$1() {
|
|
2582
|
-
var style = element("style");
|
|
2583
|
-
style.id = 'svelte-vmpdcw-style';
|
|
2584
|
-
style.textContent = ".default.svelte-vmpdcw{font-family:inherit;font-size:inherit;padding:0.4em;margin:0 0 0.5em 0;box-sizing:border-box;border:1px solid #ccc;border-radius:2px;color:#333;background-color:#f4f4f4;outline:none}.default.svelte-vmpdcw:active{background-color:#ddd}.default.svelte-vmpdcw:focus{border-color:#666}.border.svelte-vmpdcw{border:var(--border)}.color.svelte-vmpdcw{color:var(--color)}.background.svelte-vmpdcw{background:var(--background)}.hoverBorder.svelte-vmpdcw:hover{border:var(--hoverBorder)}.hoverColor.svelte-vmpdcw:hover{color:var(--hoverColor)}.hoverBack.svelte-vmpdcw:hover{background:var(--hoverBackground)}";
|
|
2585
|
-
append(document.head, style);
|
|
2586
|
-
}
|
|
2587
|
-
|
|
2588
|
-
// (67:2) {#if !_bb.props._children || _bb.props._children.length === 0}
|
|
2589
|
-
function create_if_block$3(ctx) {
|
|
2590
|
-
var t;
|
|
2591
|
-
|
|
2592
|
-
return {
|
|
2593
|
-
c() {
|
|
2594
|
-
t = text(ctx.contentText);
|
|
2595
|
-
},
|
|
2596
|
-
|
|
2597
|
-
l(nodes) {
|
|
2598
|
-
t = claim_text(nodes, ctx.contentText);
|
|
2599
|
-
},
|
|
2600
|
-
|
|
2601
|
-
m(target, anchor) {
|
|
2602
|
-
insert(target, t, anchor);
|
|
2603
|
-
},
|
|
2604
|
-
|
|
2605
|
-
p(changed, ctx) {
|
|
2606
|
-
if (changed.contentText) {
|
|
2607
|
-
set_data(t, ctx.contentText);
|
|
2608
|
-
}
|
|
2609
|
-
},
|
|
2610
|
-
|
|
2611
|
-
d(detaching) {
|
|
2612
|
-
if (detaching) {
|
|
2613
|
-
detach(t);
|
|
2614
|
-
}
|
|
2615
|
-
}
|
|
2616
|
-
};
|
|
2617
|
-
}
|
|
2618
|
-
|
|
2619
|
-
function create_fragment$6(ctx) {
|
|
2620
|
-
var button, button_class_value, button_disabled_value, cssVars_action, dispose;
|
|
2621
|
-
|
|
2622
|
-
var if_block = (!ctx._bb.props._children || ctx._bb.props._children.length === 0) && create_if_block$3(ctx);
|
|
2623
|
-
|
|
2624
|
-
return {
|
|
2625
|
-
c() {
|
|
2626
|
-
button = element("button");
|
|
2627
|
-
if (if_block) if_block.c();
|
|
2628
|
-
this.h();
|
|
2629
|
-
},
|
|
2630
|
-
|
|
2631
|
-
l(nodes) {
|
|
2632
|
-
button = claim_element(nodes, "BUTTON", { class: true, disabled: true, style: true }, false);
|
|
2633
|
-
var button_nodes = children(button);
|
|
2634
|
-
|
|
2635
|
-
if (if_block) if_block.l(button_nodes);
|
|
2636
|
-
button_nodes.forEach(detach);
|
|
2637
|
-
this.h();
|
|
2638
|
-
},
|
|
2639
|
-
|
|
2640
|
-
h() {
|
|
2641
|
-
attr(button, "class", button_class_value = "" + ctx.className + "\r\n " + ctx.customClasses + " svelte-vmpdcw");
|
|
2642
|
-
button.disabled = button_disabled_value = ctx.disabled || false;
|
|
2643
|
-
attr(button, "style", ctx.buttonStyles);
|
|
2644
|
-
dispose = listen(button, "click", ctx.clickHandler);
|
|
2645
|
-
},
|
|
2646
|
-
|
|
2647
|
-
m(target, anchor) {
|
|
2648
|
-
insert(target, button, anchor);
|
|
2649
|
-
if (if_block) if_block.m(button, null);
|
|
2650
|
-
ctx.button_binding(button);
|
|
2651
|
-
cssVars_action = cssVars.call(null, button, ctx.cssVariables) || {};
|
|
2652
|
-
},
|
|
2653
|
-
|
|
2654
|
-
p(changed, ctx) {
|
|
2655
|
-
if (!ctx._bb.props._children || ctx._bb.props._children.length === 0) {
|
|
2656
|
-
if (if_block) {
|
|
2657
|
-
if_block.p(changed, ctx);
|
|
2658
|
-
} else {
|
|
2659
|
-
if_block = create_if_block$3(ctx);
|
|
2660
|
-
if_block.c();
|
|
2661
|
-
if_block.m(button, null);
|
|
2662
|
-
}
|
|
2663
|
-
} else if (if_block) {
|
|
2664
|
-
if_block.d(1);
|
|
2665
|
-
if_block = null;
|
|
2666
|
-
}
|
|
2667
|
-
|
|
2668
|
-
if ((changed.className || changed.customClasses) && button_class_value !== (button_class_value = "" + ctx.className + "\r\n " + ctx.customClasses + " svelte-vmpdcw")) {
|
|
2669
|
-
attr(button, "class", button_class_value);
|
|
2670
|
-
}
|
|
2671
|
-
|
|
2672
|
-
if ((changed.disabled) && button_disabled_value !== (button_disabled_value = ctx.disabled || false)) {
|
|
2673
|
-
button.disabled = button_disabled_value;
|
|
2674
|
-
}
|
|
2675
|
-
|
|
2676
|
-
if (changed.buttonStyles) {
|
|
2677
|
-
attr(button, "style", ctx.buttonStyles);
|
|
2678
|
-
}
|
|
2679
|
-
|
|
2680
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
2681
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
2682
|
-
}
|
|
2683
|
-
},
|
|
2684
|
-
|
|
2685
|
-
i: noop,
|
|
2686
|
-
o: noop,
|
|
2687
|
-
|
|
2688
|
-
d(detaching) {
|
|
2689
|
-
if (detaching) {
|
|
2690
|
-
detach(button);
|
|
2691
|
-
}
|
|
2692
|
-
|
|
2693
|
-
if (if_block) if_block.d();
|
|
2694
|
-
ctx.button_binding(null);
|
|
2695
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
2696
|
-
dispose();
|
|
2697
|
-
}
|
|
2698
|
-
};
|
|
2699
|
-
}
|
|
2700
|
-
|
|
2701
|
-
function instance$6($$self, $$props, $$invalidate) {
|
|
2702
|
-
|
|
2703
|
-
let { className = "default", disabled = false, contentText, onClick, background, color, border, padding, hoverColor, hoverBackground, hoverBorder, _bb } = $$props;
|
|
2704
|
-
let theButton;
|
|
2705
|
-
let cssVariables;
|
|
2706
|
-
let buttonStyles;
|
|
2707
|
-
|
|
2708
|
-
let customClasses = "";
|
|
2709
|
-
|
|
2710
|
-
const clickHandler = () => {
|
|
2711
|
-
_bb.call(onClick);
|
|
2712
|
-
};
|
|
2713
|
-
|
|
2714
|
-
function button_binding($$value) {
|
|
2715
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
2716
|
-
$$invalidate('theButton', theButton = $$value);
|
|
2717
|
-
});
|
|
2718
|
-
}
|
|
2719
|
-
|
|
2720
|
-
$$self.$set = $$props => {
|
|
2721
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
2722
|
-
if ('disabled' in $$props) $$invalidate('disabled', disabled = $$props.disabled);
|
|
2723
|
-
if ('contentText' in $$props) $$invalidate('contentText', contentText = $$props.contentText);
|
|
2724
|
-
if ('onClick' in $$props) $$invalidate('onClick', onClick = $$props.onClick);
|
|
2725
|
-
if ('background' in $$props) $$invalidate('background', background = $$props.background);
|
|
2726
|
-
if ('color' in $$props) $$invalidate('color', color = $$props.color);
|
|
2727
|
-
if ('border' in $$props) $$invalidate('border', border = $$props.border);
|
|
2728
|
-
if ('padding' in $$props) $$invalidate('padding', padding = $$props.padding);
|
|
2729
|
-
if ('hoverColor' in $$props) $$invalidate('hoverColor', hoverColor = $$props.hoverColor);
|
|
2730
|
-
if ('hoverBackground' in $$props) $$invalidate('hoverBackground', hoverBackground = $$props.hoverBackground);
|
|
2731
|
-
if ('hoverBorder' in $$props) $$invalidate('hoverBorder', hoverBorder = $$props.hoverBorder);
|
|
2732
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
2733
|
-
};
|
|
2734
|
-
|
|
2735
|
-
$$self.$$.update = ($$dirty = { _bb: 1, theButton: 1, hoverColor: 1, hoverBorder: 1, hoverBackground: 1, background: 1, color: 1, border: 1, padding: 1 }) => {
|
|
2736
|
-
if ($$dirty._bb || $$dirty.theButton) { if (_bb.props._children && _bb.props._children.length > 0)
|
|
2737
|
-
theButton && _bb.attachChildren(theButton); }
|
|
2738
|
-
if ($$dirty.hoverColor || $$dirty.hoverBorder || $$dirty.hoverBackground || $$dirty.background || $$dirty.color || $$dirty.border || $$dirty.padding) { {
|
|
2739
|
-
$$invalidate('cssVariables', cssVariables = {
|
|
2740
|
-
hoverColor,
|
|
2741
|
-
hoverBorder,
|
|
2742
|
-
hoverBackground,
|
|
2743
|
-
background,
|
|
2744
|
-
color,
|
|
2745
|
-
border,
|
|
2746
|
-
});
|
|
2747
|
-
|
|
2748
|
-
$$invalidate('buttonStyles', buttonStyles = buildStyle({
|
|
2749
|
-
padding,
|
|
2750
|
-
}));
|
|
2751
|
-
|
|
2752
|
-
$$invalidate('customClasses', customClasses = createClasses({
|
|
2753
|
-
hoverColor,
|
|
2754
|
-
hoverBorder,
|
|
2755
|
-
hoverBackground,
|
|
2756
|
-
background,
|
|
2757
|
-
border,
|
|
2758
|
-
color,
|
|
2759
|
-
}));
|
|
2760
|
-
} }
|
|
2761
|
-
};
|
|
2762
|
-
|
|
2763
|
-
return {
|
|
2764
|
-
className,
|
|
2765
|
-
disabled,
|
|
2766
|
-
contentText,
|
|
2767
|
-
onClick,
|
|
2768
|
-
background,
|
|
2769
|
-
color,
|
|
2770
|
-
border,
|
|
2771
|
-
padding,
|
|
2772
|
-
hoverColor,
|
|
2773
|
-
hoverBackground,
|
|
2774
|
-
hoverBorder,
|
|
2775
|
-
_bb,
|
|
2776
|
-
theButton,
|
|
2777
|
-
cssVariables,
|
|
2778
|
-
buttonStyles,
|
|
2779
|
-
customClasses,
|
|
2780
|
-
clickHandler,
|
|
2781
|
-
button_binding
|
|
2782
|
-
};
|
|
2783
|
-
}
|
|
2784
|
-
|
|
2785
|
-
class Button extends SvelteComponent {
|
|
2786
|
-
constructor(options) {
|
|
2787
|
-
super();
|
|
2788
|
-
if (!document.getElementById("svelte-vmpdcw-style")) add_css$1();
|
|
2789
|
-
init(this, options, instance$6, create_fragment$6, safe_not_equal, ["className", "disabled", "contentText", "onClick", "background", "color", "border", "padding", "hoverColor", "hoverBackground", "hoverBorder", "_bb"]);
|
|
2790
|
-
}
|
|
2791
|
-
}
|
|
2792
|
-
|
|
2793
|
-
/* src\Login.svelte generated by Svelte v3.12.1 */
|
|
2794
|
-
|
|
2795
|
-
function add_css$2() {
|
|
2796
|
-
var style = element("style");
|
|
2797
|
-
style.id = 'svelte-x36wrk-style';
|
|
2798
|
-
style.textContent = ".root.svelte-x36wrk{height:100%;display:grid;grid-template-columns:[left] 1fr [middle] auto [right] 1fr;grid-template-rows:[top] 1fr [center] auto [bottom] 1fr}.content.svelte-x36wrk{grid-column-start:middle;grid-row-start:center;width:400px}.logo-container.svelte-x36wrk{margin-bottom:20px}.logo-container.svelte-x36wrk>img.svelte-x36wrk{max-width:100%}.login-button-container.svelte-x36wrk{text-align:right;margin-top:20px}.incorrect-details-panel.svelte-x36wrk{margin-top:30px;padding:10px;border-style:solid;border-width:1px;border-color:maroon;border-radius:1px;text-align:center;color:maroon;background-color:mistyrose}.form-root.svelte-x36wrk{display:grid;grid-template-columns:[label] auto [control] 1fr}.label.svelte-x36wrk{grid-column-start:label;padding:5px 10px;vertical-align:middle}.control.svelte-x36wrk{grid-column-start:control;padding:5px 10px}.default-input.svelte-x36wrk{font-family:inherit;font-size:inherit;padding:0.4em;margin:0 0 0.5em 0;box-sizing:border-box;border:1px solid #ccc;border-radius:2px;width:100%}.default-button.svelte-x36wrk{font-family:inherit;font-size:inherit;padding:0.4em;margin:0 0 0.5em 0;box-sizing:border-box;border:1px solid #ccc;border-radius:2px;color:#333;background-color:#f4f4f4;outline:none}.default-button.svelte-x36wrk:active{background-color:#ddd}.default-button.svelte-x36wrk:focus{border-color:#666}";
|
|
2799
|
-
append(document.head, style);
|
|
2800
|
-
}
|
|
2801
|
-
|
|
2802
|
-
// (54:4) {#if _logo}
|
|
2803
|
-
function create_if_block_1$3(ctx) {
|
|
2804
|
-
var div, img;
|
|
2805
|
-
|
|
2806
|
-
return {
|
|
2807
|
-
c() {
|
|
2808
|
-
div = element("div");
|
|
2809
|
-
img = element("img");
|
|
2810
|
-
this.h();
|
|
2811
|
-
},
|
|
2812
|
-
|
|
2813
|
-
l(nodes) {
|
|
2814
|
-
div = claim_element(nodes, "DIV", { class: true }, false);
|
|
2815
|
-
var div_nodes = children(div);
|
|
2816
|
-
|
|
2817
|
-
img = claim_element(div_nodes, "IMG", { src: true, alt: true, class: true }, false);
|
|
2818
|
-
var img_nodes = children(img);
|
|
2819
|
-
|
|
2820
|
-
img_nodes.forEach(detach);
|
|
2821
|
-
div_nodes.forEach(detach);
|
|
2822
|
-
this.h();
|
|
2823
|
-
},
|
|
2824
|
-
|
|
2825
|
-
h() {
|
|
2826
|
-
attr(img, "src", ctx._logo);
|
|
2827
|
-
attr(img, "alt", "logo");
|
|
2828
|
-
attr(img, "class", "svelte-x36wrk");
|
|
2829
|
-
attr(div, "class", "logo-container svelte-x36wrk");
|
|
2830
|
-
},
|
|
2831
|
-
|
|
2832
|
-
m(target, anchor) {
|
|
2833
|
-
insert(target, div, anchor);
|
|
2834
|
-
append(div, img);
|
|
2835
|
-
},
|
|
2836
|
-
|
|
2837
|
-
p(changed, ctx) {
|
|
2838
|
-
if (changed._logo) {
|
|
2839
|
-
attr(img, "src", ctx._logo);
|
|
2840
|
-
}
|
|
2841
|
-
},
|
|
2842
|
-
|
|
2843
|
-
d(detaching) {
|
|
2844
|
-
if (detaching) {
|
|
2845
|
-
detach(div);
|
|
2846
|
-
}
|
|
2847
|
-
}
|
|
2848
|
-
};
|
|
2849
|
-
}
|
|
2850
|
-
|
|
2851
|
-
// (77:4) {#if incorrect}
|
|
2852
|
-
function create_if_block$4(ctx) {
|
|
2853
|
-
var div, t;
|
|
2854
|
-
|
|
2855
|
-
return {
|
|
2856
|
-
c() {
|
|
2857
|
-
div = element("div");
|
|
2858
|
-
t = text("Incorrect username or password");
|
|
2859
|
-
this.h();
|
|
2860
|
-
},
|
|
2861
|
-
|
|
2862
|
-
l(nodes) {
|
|
2863
|
-
div = claim_element(nodes, "DIV", { class: true }, false);
|
|
2864
|
-
var div_nodes = children(div);
|
|
2865
|
-
|
|
2866
|
-
t = claim_text(div_nodes, "Incorrect username or password");
|
|
2867
|
-
div_nodes.forEach(detach);
|
|
2868
|
-
this.h();
|
|
2869
|
-
},
|
|
2870
|
-
|
|
2871
|
-
h() {
|
|
2872
|
-
attr(div, "class", "incorrect-details-panel svelte-x36wrk");
|
|
2873
|
-
},
|
|
2874
|
-
|
|
2875
|
-
m(target, anchor) {
|
|
2876
|
-
insert(target, div, anchor);
|
|
2877
|
-
append(div, t);
|
|
2878
|
-
},
|
|
2879
|
-
|
|
2880
|
-
d(detaching) {
|
|
2881
|
-
if (detaching) {
|
|
2882
|
-
detach(div);
|
|
2883
|
-
}
|
|
2884
|
-
}
|
|
2885
|
-
};
|
|
2886
|
-
}
|
|
2887
|
-
|
|
2888
|
-
function create_fragment$7(ctx) {
|
|
2889
|
-
var div7, div6, t0, div4, div0, t1, t2, div1, input0, input0_class_value, t3, div2, t4, t5, div3, input1, input1_class_value, t6, div5, button, t7, button_class_value, t8, dispose;
|
|
2890
|
-
|
|
2891
|
-
var if_block0 = (ctx._logo) && create_if_block_1$3(ctx);
|
|
2892
|
-
|
|
2893
|
-
var if_block1 = (ctx.incorrect) && create_if_block$4();
|
|
2894
|
-
|
|
2895
|
-
return {
|
|
2896
|
-
c() {
|
|
2897
|
-
div7 = element("div");
|
|
2898
|
-
div6 = element("div");
|
|
2899
|
-
if (if_block0) if_block0.c();
|
|
2900
|
-
t0 = space();
|
|
2901
|
-
div4 = element("div");
|
|
2902
|
-
div0 = element("div");
|
|
2903
|
-
t1 = text(ctx.usernameLabel);
|
|
2904
|
-
t2 = space();
|
|
2905
|
-
div1 = element("div");
|
|
2906
|
-
input0 = element("input");
|
|
2907
|
-
t3 = space();
|
|
2908
|
-
div2 = element("div");
|
|
2909
|
-
t4 = text(ctx.passwordLabel);
|
|
2910
|
-
t5 = space();
|
|
2911
|
-
div3 = element("div");
|
|
2912
|
-
input1 = element("input");
|
|
2913
|
-
t6 = space();
|
|
2914
|
-
div5 = element("div");
|
|
2915
|
-
button = element("button");
|
|
2916
|
-
t7 = text(ctx.loginButtonLabel);
|
|
2917
|
-
t8 = space();
|
|
2918
|
-
if (if_block1) if_block1.c();
|
|
2919
|
-
this.h();
|
|
2920
|
-
},
|
|
2921
|
-
|
|
2922
|
-
l(nodes) {
|
|
2923
|
-
div7 = claim_element(nodes, "DIV", { class: true }, false);
|
|
2924
|
-
var div7_nodes = children(div7);
|
|
2925
|
-
|
|
2926
|
-
div6 = claim_element(div7_nodes, "DIV", { class: true }, false);
|
|
2927
|
-
var div6_nodes = children(div6);
|
|
2928
|
-
|
|
2929
|
-
if (if_block0) if_block0.l(div6_nodes);
|
|
2930
|
-
t0 = claim_space(div6_nodes);
|
|
2931
|
-
|
|
2932
|
-
div4 = claim_element(div6_nodes, "DIV", { class: true }, false);
|
|
2933
|
-
var div4_nodes = children(div4);
|
|
2934
|
-
|
|
2935
|
-
div0 = claim_element(div4_nodes, "DIV", { class: true }, false);
|
|
2936
|
-
var div0_nodes = children(div0);
|
|
2937
|
-
|
|
2938
|
-
t1 = claim_text(div0_nodes, ctx.usernameLabel);
|
|
2939
|
-
div0_nodes.forEach(detach);
|
|
2940
|
-
t2 = claim_space(div4_nodes);
|
|
2941
|
-
|
|
2942
|
-
div1 = claim_element(div4_nodes, "DIV", { class: true }, false);
|
|
2943
|
-
var div1_nodes = children(div1);
|
|
2944
|
-
|
|
2945
|
-
input0 = claim_element(div1_nodes, "INPUT", { type: true, class: true }, false);
|
|
2946
|
-
var input0_nodes = children(input0);
|
|
2947
|
-
|
|
2948
|
-
input0_nodes.forEach(detach);
|
|
2949
|
-
div1_nodes.forEach(detach);
|
|
2950
|
-
t3 = claim_space(div4_nodes);
|
|
2951
|
-
|
|
2952
|
-
div2 = claim_element(div4_nodes, "DIV", { class: true }, false);
|
|
2953
|
-
var div2_nodes = children(div2);
|
|
2954
|
-
|
|
2955
|
-
t4 = claim_text(div2_nodes, ctx.passwordLabel);
|
|
2956
|
-
div2_nodes.forEach(detach);
|
|
2957
|
-
t5 = claim_space(div4_nodes);
|
|
2958
|
-
|
|
2959
|
-
div3 = claim_element(div4_nodes, "DIV", { class: true }, false);
|
|
2960
|
-
var div3_nodes = children(div3);
|
|
2961
|
-
|
|
2962
|
-
input1 = claim_element(div3_nodes, "INPUT", { type: true, class: true }, false);
|
|
2963
|
-
var input1_nodes = children(input1);
|
|
2964
|
-
|
|
2965
|
-
input1_nodes.forEach(detach);
|
|
2966
|
-
div3_nodes.forEach(detach);
|
|
2967
|
-
div4_nodes.forEach(detach);
|
|
2968
|
-
t6 = claim_space(div6_nodes);
|
|
2969
|
-
|
|
2970
|
-
div5 = claim_element(div6_nodes, "DIV", { class: true }, false);
|
|
2971
|
-
var div5_nodes = children(div5);
|
|
2972
|
-
|
|
2973
|
-
button = claim_element(div5_nodes, "BUTTON", { disabled: true, class: true }, false);
|
|
2974
|
-
var button_nodes = children(button);
|
|
2975
|
-
|
|
2976
|
-
t7 = claim_text(button_nodes, ctx.loginButtonLabel);
|
|
2977
|
-
button_nodes.forEach(detach);
|
|
2978
|
-
div5_nodes.forEach(detach);
|
|
2979
|
-
t8 = claim_space(div6_nodes);
|
|
2980
|
-
if (if_block1) if_block1.l(div6_nodes);
|
|
2981
|
-
div6_nodes.forEach(detach);
|
|
2982
|
-
div7_nodes.forEach(detach);
|
|
2983
|
-
this.h();
|
|
2984
|
-
},
|
|
2985
|
-
|
|
2986
|
-
h() {
|
|
2987
|
-
attr(div0, "class", "label svelte-x36wrk");
|
|
2988
|
-
attr(input0, "type", "text");
|
|
2989
|
-
attr(input0, "class", input0_class_value = "" + null_to_empty(ctx._inputClass) + " svelte-x36wrk");
|
|
2990
|
-
attr(div1, "class", "control svelte-x36wrk");
|
|
2991
|
-
attr(div2, "class", "label svelte-x36wrk");
|
|
2992
|
-
attr(input1, "type", "password");
|
|
2993
|
-
attr(input1, "class", input1_class_value = "" + null_to_empty(ctx._inputClass) + " svelte-x36wrk");
|
|
2994
|
-
attr(div3, "class", "control svelte-x36wrk");
|
|
2995
|
-
attr(div4, "class", "form-root svelte-x36wrk");
|
|
2996
|
-
button.disabled = ctx.busy;
|
|
2997
|
-
attr(button, "class", button_class_value = "" + null_to_empty(ctx._buttonClass) + " svelte-x36wrk");
|
|
2998
|
-
attr(div5, "class", "login-button-container svelte-x36wrk");
|
|
2999
|
-
attr(div6, "class", "content svelte-x36wrk");
|
|
3000
|
-
attr(div7, "class", "root svelte-x36wrk");
|
|
3001
|
-
|
|
3002
|
-
dispose = [
|
|
3003
|
-
listen(input0, "input", ctx.input0_input_handler),
|
|
3004
|
-
listen(input1, "input", ctx.input1_input_handler),
|
|
3005
|
-
listen(button, "click", ctx.login)
|
|
3006
|
-
];
|
|
3007
|
-
},
|
|
3008
|
-
|
|
3009
|
-
m(target, anchor) {
|
|
3010
|
-
insert(target, div7, anchor);
|
|
3011
|
-
append(div7, div6);
|
|
3012
|
-
if (if_block0) if_block0.m(div6, null);
|
|
3013
|
-
append(div6, t0);
|
|
3014
|
-
append(div6, div4);
|
|
3015
|
-
append(div4, div0);
|
|
3016
|
-
append(div0, t1);
|
|
3017
|
-
append(div4, t2);
|
|
3018
|
-
append(div4, div1);
|
|
3019
|
-
append(div1, input0);
|
|
3020
|
-
|
|
3021
|
-
set_input_value(input0, ctx.username);
|
|
3022
|
-
|
|
3023
|
-
append(div4, t3);
|
|
3024
|
-
append(div4, div2);
|
|
3025
|
-
append(div2, t4);
|
|
3026
|
-
append(div4, t5);
|
|
3027
|
-
append(div4, div3);
|
|
3028
|
-
append(div3, input1);
|
|
3029
|
-
|
|
3030
|
-
set_input_value(input1, ctx.password);
|
|
3031
|
-
|
|
3032
|
-
append(div6, t6);
|
|
3033
|
-
append(div6, div5);
|
|
3034
|
-
append(div5, button);
|
|
3035
|
-
append(button, t7);
|
|
3036
|
-
append(div6, t8);
|
|
3037
|
-
if (if_block1) if_block1.m(div6, null);
|
|
3038
|
-
},
|
|
3039
|
-
|
|
3040
|
-
p(changed, ctx) {
|
|
3041
|
-
if (ctx._logo) {
|
|
3042
|
-
if (if_block0) {
|
|
3043
|
-
if_block0.p(changed, ctx);
|
|
3044
|
-
} else {
|
|
3045
|
-
if_block0 = create_if_block_1$3(ctx);
|
|
3046
|
-
if_block0.c();
|
|
3047
|
-
if_block0.m(div6, t0);
|
|
3048
|
-
}
|
|
3049
|
-
} else if (if_block0) {
|
|
3050
|
-
if_block0.d(1);
|
|
3051
|
-
if_block0 = null;
|
|
3052
|
-
}
|
|
3053
|
-
|
|
3054
|
-
if (changed.usernameLabel) {
|
|
3055
|
-
set_data(t1, ctx.usernameLabel);
|
|
3056
|
-
}
|
|
3057
|
-
|
|
3058
|
-
if (changed.username && (input0.value !== ctx.username)) set_input_value(input0, ctx.username);
|
|
3059
|
-
|
|
3060
|
-
if ((changed._inputClass) && input0_class_value !== (input0_class_value = "" + null_to_empty(ctx._inputClass) + " svelte-x36wrk")) {
|
|
3061
|
-
attr(input0, "class", input0_class_value);
|
|
3062
|
-
}
|
|
3063
|
-
|
|
3064
|
-
if (changed.passwordLabel) {
|
|
3065
|
-
set_data(t4, ctx.passwordLabel);
|
|
3066
|
-
}
|
|
3067
|
-
|
|
3068
|
-
if (changed.password && (input1.value !== ctx.password)) set_input_value(input1, ctx.password);
|
|
3069
|
-
|
|
3070
|
-
if ((changed._inputClass) && input1_class_value !== (input1_class_value = "" + null_to_empty(ctx._inputClass) + " svelte-x36wrk")) {
|
|
3071
|
-
attr(input1, "class", input1_class_value);
|
|
3072
|
-
}
|
|
3073
|
-
|
|
3074
|
-
if (changed.loginButtonLabel) {
|
|
3075
|
-
set_data(t7, ctx.loginButtonLabel);
|
|
3076
|
-
}
|
|
3077
|
-
|
|
3078
|
-
if (changed.busy) {
|
|
3079
|
-
button.disabled = ctx.busy;
|
|
3080
|
-
}
|
|
3081
|
-
|
|
3082
|
-
if ((changed._buttonClass) && button_class_value !== (button_class_value = "" + null_to_empty(ctx._buttonClass) + " svelte-x36wrk")) {
|
|
3083
|
-
attr(button, "class", button_class_value);
|
|
3084
|
-
}
|
|
3085
|
-
|
|
3086
|
-
if (ctx.incorrect) {
|
|
3087
|
-
if (!if_block1) {
|
|
3088
|
-
if_block1 = create_if_block$4();
|
|
3089
|
-
if_block1.c();
|
|
3090
|
-
if_block1.m(div6, null);
|
|
3091
|
-
}
|
|
3092
|
-
} else if (if_block1) {
|
|
3093
|
-
if_block1.d(1);
|
|
3094
|
-
if_block1 = null;
|
|
3095
|
-
}
|
|
3096
|
-
},
|
|
3097
|
-
|
|
3098
|
-
i: noop,
|
|
3099
|
-
o: noop,
|
|
3100
|
-
|
|
3101
|
-
d(detaching) {
|
|
3102
|
-
if (detaching) {
|
|
3103
|
-
detach(div7);
|
|
3104
|
-
}
|
|
3105
|
-
|
|
3106
|
-
if (if_block0) if_block0.d();
|
|
3107
|
-
if (if_block1) if_block1.d();
|
|
3108
|
-
run_all(dispose);
|
|
3109
|
-
}
|
|
3110
|
-
};
|
|
3111
|
-
}
|
|
3112
|
-
|
|
3113
|
-
function instance$7($$self, $$props, $$invalidate) {
|
|
3114
|
-
let { usernameLabel = "Username", passwordLabel = "Password", loginButtonLabel = "Login", loginRedirect = "", logo = "", buttonClass = "", inputClass = "", _bb } = $$props;
|
|
3115
|
-
|
|
3116
|
-
let username = "";
|
|
3117
|
-
let password = "";
|
|
3118
|
-
let busy = false;
|
|
3119
|
-
let incorrect = false;
|
|
3120
|
-
let _logo = "";
|
|
3121
|
-
let _buttonClass = "";
|
|
3122
|
-
let _inputClass = "";
|
|
3123
|
-
|
|
3124
|
-
const login = () => {
|
|
3125
|
-
$$invalidate('busy', busy = true);
|
|
3126
|
-
_bb.api
|
|
3127
|
-
.post("/api/authenticate", { username, password })
|
|
3128
|
-
.then(r => {
|
|
3129
|
-
$$invalidate('busy', busy = false);
|
|
3130
|
-
if (r.status === 200) {
|
|
3131
|
-
return r.json()
|
|
3132
|
-
} else {
|
|
3133
|
-
$$invalidate('incorrect', incorrect = true);
|
|
3134
|
-
return
|
|
3135
|
-
}
|
|
3136
|
-
})
|
|
3137
|
-
.then(user => {
|
|
3138
|
-
if (user) {
|
|
3139
|
-
localStorage.setItem("budibase:user", JSON.stringify(user));
|
|
3140
|
-
location.reload();
|
|
3141
|
-
}
|
|
3142
|
-
});
|
|
3143
|
-
};
|
|
3144
|
-
|
|
3145
|
-
function input0_input_handler() {
|
|
3146
|
-
username = this.value;
|
|
3147
|
-
$$invalidate('username', username);
|
|
3148
|
-
}
|
|
3149
|
-
|
|
3150
|
-
function input1_input_handler() {
|
|
3151
|
-
password = this.value;
|
|
3152
|
-
$$invalidate('password', password);
|
|
3153
|
-
}
|
|
3154
|
-
|
|
3155
|
-
$$self.$set = $$props => {
|
|
3156
|
-
if ('usernameLabel' in $$props) $$invalidate('usernameLabel', usernameLabel = $$props.usernameLabel);
|
|
3157
|
-
if ('passwordLabel' in $$props) $$invalidate('passwordLabel', passwordLabel = $$props.passwordLabel);
|
|
3158
|
-
if ('loginButtonLabel' in $$props) $$invalidate('loginButtonLabel', loginButtonLabel = $$props.loginButtonLabel);
|
|
3159
|
-
if ('loginRedirect' in $$props) $$invalidate('loginRedirect', loginRedirect = $$props.loginRedirect);
|
|
3160
|
-
if ('logo' in $$props) $$invalidate('logo', logo = $$props.logo);
|
|
3161
|
-
if ('buttonClass' in $$props) $$invalidate('buttonClass', buttonClass = $$props.buttonClass);
|
|
3162
|
-
if ('inputClass' in $$props) $$invalidate('inputClass', inputClass = $$props.inputClass);
|
|
3163
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
3164
|
-
};
|
|
3165
|
-
|
|
3166
|
-
$$self.$$.update = ($$dirty = { _bb: 1, logo: 1, buttonClass: 1, inputClass: 1 }) => {
|
|
3167
|
-
if ($$dirty._bb || $$dirty.logo || $$dirty.buttonClass || $$dirty.inputClass) { {
|
|
3168
|
-
$$invalidate('_logo', _logo = _bb.relativeUrl(logo));
|
|
3169
|
-
$$invalidate('_buttonClass', _buttonClass = buttonClass || "default-button");
|
|
3170
|
-
$$invalidate('_inputClass', _inputClass = inputClass || "default-input");
|
|
3171
|
-
} }
|
|
3172
|
-
};
|
|
3173
|
-
|
|
3174
|
-
return {
|
|
3175
|
-
usernameLabel,
|
|
3176
|
-
passwordLabel,
|
|
3177
|
-
loginButtonLabel,
|
|
3178
|
-
loginRedirect,
|
|
3179
|
-
logo,
|
|
3180
|
-
buttonClass,
|
|
3181
|
-
inputClass,
|
|
3182
|
-
_bb,
|
|
3183
|
-
username,
|
|
3184
|
-
password,
|
|
3185
|
-
busy,
|
|
3186
|
-
incorrect,
|
|
3187
|
-
_logo,
|
|
3188
|
-
_buttonClass,
|
|
3189
|
-
_inputClass,
|
|
3190
|
-
login,
|
|
3191
|
-
input0_input_handler,
|
|
3192
|
-
input1_input_handler
|
|
3193
|
-
};
|
|
3194
|
-
}
|
|
3195
|
-
|
|
3196
|
-
class Login extends SvelteComponent {
|
|
3197
|
-
constructor(options) {
|
|
3198
|
-
super();
|
|
3199
|
-
if (!document.getElementById("svelte-x36wrk-style")) add_css$2();
|
|
3200
|
-
init(this, options, instance$7, create_fragment$7, safe_not_equal, ["usernameLabel", "passwordLabel", "loginButtonLabel", "loginRedirect", "logo", "buttonClass", "inputClass", "_bb"]);
|
|
3201
|
-
}
|
|
3202
|
-
}
|
|
3203
|
-
|
|
3204
|
-
var saveRecordButton = ({ records }) =>
|
|
3205
|
-
records.map(r => ({
|
|
3206
|
-
name: `Save ${r.name} Button`,
|
|
3207
|
-
props: buttonProps(r),
|
|
3208
|
-
}));
|
|
3209
|
-
|
|
3210
|
-
const buttonProps = record => ({
|
|
3211
|
-
_component: "@budibase/standard-components/button",
|
|
3212
|
-
_children: [
|
|
3213
|
-
{
|
|
3214
|
-
_component: "@budibase/standard-components/text",
|
|
3215
|
-
text: `Save ${record.name}`,
|
|
3216
|
-
},
|
|
3217
|
-
],
|
|
3218
|
-
onClick: [
|
|
3219
|
-
{
|
|
3220
|
-
"##eventHandlerType": "Save Record",
|
|
3221
|
-
parameters: {
|
|
3222
|
-
statePath: `${record.name}`,
|
|
3223
|
-
},
|
|
3224
|
-
},
|
|
3225
|
-
],
|
|
3226
|
-
});
|
|
3227
|
-
|
|
3228
|
-
/* src\Link.svelte generated by Svelte v3.12.1 */
|
|
3229
|
-
|
|
3230
|
-
function add_css$3() {
|
|
3231
|
-
var style = element("style");
|
|
3232
|
-
style.id = 'svelte-vgj7gq-style';
|
|
3233
|
-
style.textContent = ".color.svelte-vgj7gq{color:var(--color)}.hoverColor.svelte-vgj7gq:hover{color:var(--color)}.textDecoration.svelte-vgj7gq{text-decoration:var(--textDecoration)}.fontSize.svelte-vgj7gq{font-size:var(--fontSize)}";
|
|
3234
|
-
append(document.head, style);
|
|
3235
|
-
}
|
|
3236
|
-
|
|
3237
|
-
function create_fragment$8(ctx) {
|
|
3238
|
-
var a, t, a_class_value, cssVars_action;
|
|
3239
|
-
|
|
3240
|
-
return {
|
|
3241
|
-
c() {
|
|
3242
|
-
a = element("a");
|
|
3243
|
-
t = text(ctx.text);
|
|
3244
|
-
this.h();
|
|
3245
|
-
},
|
|
3246
|
-
|
|
3247
|
-
l(nodes) {
|
|
3248
|
-
a = claim_element(nodes, "A", { href: true, class: true, target: true }, false);
|
|
3249
|
-
var a_nodes = children(a);
|
|
3250
|
-
|
|
3251
|
-
t = claim_text(a_nodes, ctx.text);
|
|
3252
|
-
a_nodes.forEach(detach);
|
|
3253
|
-
this.h();
|
|
3254
|
-
},
|
|
3255
|
-
|
|
3256
|
-
h() {
|
|
3257
|
-
attr(a, "href", ctx.url);
|
|
3258
|
-
attr(a, "class", a_class_value = "" + null_to_empty(ctx.classes) + " svelte-vgj7gq");
|
|
3259
|
-
attr(a, "target", ctx.target);
|
|
3260
|
-
},
|
|
3261
|
-
|
|
3262
|
-
m(target_1, anchor) {
|
|
3263
|
-
insert(target_1, a, anchor);
|
|
3264
|
-
append(a, t);
|
|
3265
|
-
ctx.a_binding(a);
|
|
3266
|
-
cssVars_action = cssVars.call(null, a, ctx.cssVariables) || {};
|
|
3267
|
-
},
|
|
3268
|
-
|
|
3269
|
-
p(changed, ctx) {
|
|
3270
|
-
if (changed.text) {
|
|
3271
|
-
set_data(t, ctx.text);
|
|
3272
|
-
}
|
|
3273
|
-
|
|
3274
|
-
if (changed.url) {
|
|
3275
|
-
attr(a, "href", ctx.url);
|
|
3276
|
-
}
|
|
3277
|
-
|
|
3278
|
-
if ((changed.classes) && a_class_value !== (a_class_value = "" + null_to_empty(ctx.classes) + " svelte-vgj7gq")) {
|
|
3279
|
-
attr(a, "class", a_class_value);
|
|
3280
|
-
}
|
|
3281
|
-
|
|
3282
|
-
if (changed.target) {
|
|
3283
|
-
attr(a, "target", ctx.target);
|
|
3284
|
-
}
|
|
3285
|
-
|
|
3286
|
-
if (typeof cssVars_action.update === 'function' && changed.cssVariables) {
|
|
3287
|
-
cssVars_action.update.call(null, ctx.cssVariables);
|
|
3288
|
-
}
|
|
3289
|
-
},
|
|
3290
|
-
|
|
3291
|
-
i: noop,
|
|
3292
|
-
o: noop,
|
|
3293
|
-
|
|
3294
|
-
d(detaching) {
|
|
3295
|
-
if (detaching) {
|
|
3296
|
-
detach(a);
|
|
3297
|
-
}
|
|
3298
|
-
|
|
3299
|
-
ctx.a_binding(null);
|
|
3300
|
-
if (cssVars_action && typeof cssVars_action.destroy === 'function') cssVars_action.destroy();
|
|
3301
|
-
}
|
|
3302
|
-
};
|
|
3303
|
-
}
|
|
3304
|
-
|
|
3305
|
-
function instance$8($$self, $$props, $$invalidate) {
|
|
3306
|
-
let { url = "", text = "", openInNewTab = false, color, hoverColor, underline = false, fontSize, _bb } = $$props;
|
|
3307
|
-
|
|
3308
|
-
let anchorElement;
|
|
3309
|
-
|
|
3310
|
-
function a_binding($$value) {
|
|
3311
|
-
binding_callbacks[$$value ? 'unshift' : 'push'](() => {
|
|
3312
|
-
$$invalidate('anchorElement', anchorElement = $$value);
|
|
3313
|
-
});
|
|
3314
|
-
}
|
|
3315
|
-
|
|
3316
|
-
$$self.$set = $$props => {
|
|
3317
|
-
if ('url' in $$props) $$invalidate('url', url = $$props.url);
|
|
3318
|
-
if ('text' in $$props) $$invalidate('text', text = $$props.text);
|
|
3319
|
-
if ('openInNewTab' in $$props) $$invalidate('openInNewTab', openInNewTab = $$props.openInNewTab);
|
|
3320
|
-
if ('color' in $$props) $$invalidate('color', color = $$props.color);
|
|
3321
|
-
if ('hoverColor' in $$props) $$invalidate('hoverColor', hoverColor = $$props.hoverColor);
|
|
3322
|
-
if ('underline' in $$props) $$invalidate('underline', underline = $$props.underline);
|
|
3323
|
-
if ('fontSize' in $$props) $$invalidate('fontSize', fontSize = $$props.fontSize);
|
|
3324
|
-
if ('_bb' in $$props) $$invalidate('_bb', _bb = $$props._bb);
|
|
3325
|
-
};
|
|
3326
|
-
|
|
3327
|
-
let target, cssVariables, classes;
|
|
3328
|
-
|
|
3329
|
-
$$self.$$.update = ($$dirty = { anchorElement: 1, text: 1, _bb: 1, openInNewTab: 1, hoverColor: 1, color: 1, underline: 1, fontSize: 1, cssVariables: 1 }) => {
|
|
3330
|
-
if ($$dirty.anchorElement || $$dirty.text || $$dirty._bb) { anchorElement && !text && _bb.attachChildren(anchorElement); }
|
|
3331
|
-
if ($$dirty.openInNewTab) { $$invalidate('target', target = openInNewTab ? "_blank" : "_self"); }
|
|
3332
|
-
if ($$dirty.hoverColor || $$dirty.color || $$dirty.underline || $$dirty.fontSize) { $$invalidate('cssVariables', cssVariables = {
|
|
3333
|
-
hoverColor,
|
|
3334
|
-
color,
|
|
3335
|
-
textDecoration: underline ? "underline" : "none",
|
|
3336
|
-
fontSize,
|
|
3337
|
-
}); }
|
|
3338
|
-
if ($$dirty.cssVariables) { $$invalidate('classes', classes = createClasses(cssVariables)); }
|
|
3339
|
-
};
|
|
3340
|
-
|
|
3341
|
-
return {
|
|
3342
|
-
url,
|
|
3343
|
-
text,
|
|
3344
|
-
openInNewTab,
|
|
3345
|
-
color,
|
|
3346
|
-
hoverColor,
|
|
3347
|
-
underline,
|
|
3348
|
-
fontSize,
|
|
3349
|
-
_bb,
|
|
3350
|
-
anchorElement,
|
|
3351
|
-
target,
|
|
3352
|
-
cssVariables,
|
|
3353
|
-
classes,
|
|
3354
|
-
a_binding
|
|
3355
|
-
};
|
|
3356
|
-
}
|
|
3357
|
-
|
|
3358
|
-
class Link extends SvelteComponent {
|
|
3359
|
-
constructor(options) {
|
|
3360
|
-
super();
|
|
3361
|
-
if (!document.getElementById("svelte-vgj7gq-style")) add_css$3();
|
|
3362
|
-
init(this, options, instance$8, create_fragment$8, safe_not_equal, ["url", "text", "openInNewTab", "color", "hoverColor", "underline", "fontSize", "_bb"]);
|
|
3363
|
-
}
|
|
3364
|
-
}
|
|
3365
|
-
|
|
3366
|
-
/* src\Image.svelte generated by Svelte v3.12.1 */
|
|
3367
|
-
|
|
3368
|
-
function create_fragment$9(ctx) {
|
|
3369
|
-
var img;
|
|
3370
|
-
|
|
3371
|
-
return {
|
|
3372
|
-
c() {
|
|
3373
|
-
img = element("img");
|
|
3374
|
-
this.h();
|
|
3375
|
-
},
|
|
3376
|
-
|
|
3377
|
-
l(nodes) {
|
|
3378
|
-
img = claim_element(nodes, "IMG", { class: true, style: true, src: true, alt: true }, false);
|
|
3379
|
-
var img_nodes = children(img);
|
|
3380
|
-
|
|
3381
|
-
img_nodes.forEach(detach);
|
|
3382
|
-
this.h();
|
|
3383
|
-
},
|
|
3384
|
-
|
|
3385
|
-
h() {
|
|
3386
|
-
attr(img, "class", ctx.className);
|
|
3387
|
-
attr(img, "style", ctx.style);
|
|
3388
|
-
attr(img, "src", ctx.url);
|
|
3389
|
-
attr(img, "alt", ctx.description);
|
|
3390
|
-
},
|
|
3391
|
-
|
|
3392
|
-
m(target, anchor) {
|
|
3393
|
-
insert(target, img, anchor);
|
|
3394
|
-
},
|
|
3395
|
-
|
|
3396
|
-
p(changed, ctx) {
|
|
3397
|
-
if (changed.className) {
|
|
3398
|
-
attr(img, "class", ctx.className);
|
|
3399
|
-
}
|
|
3400
|
-
|
|
3401
|
-
if (changed.style) {
|
|
3402
|
-
attr(img, "style", ctx.style);
|
|
3403
|
-
}
|
|
3404
|
-
|
|
3405
|
-
if (changed.url) {
|
|
3406
|
-
attr(img, "src", ctx.url);
|
|
3407
|
-
}
|
|
3408
|
-
|
|
3409
|
-
if (changed.description) {
|
|
3410
|
-
attr(img, "alt", ctx.description);
|
|
3411
|
-
}
|
|
3412
|
-
},
|
|
3413
|
-
|
|
3414
|
-
i: noop,
|
|
3415
|
-
o: noop,
|
|
3416
|
-
|
|
3417
|
-
d(detaching) {
|
|
3418
|
-
if (detaching) {
|
|
3419
|
-
detach(img);
|
|
3420
|
-
}
|
|
3421
|
-
}
|
|
3422
|
-
};
|
|
3423
|
-
}
|
|
3424
|
-
|
|
3425
|
-
function instance$9($$self, $$props, $$invalidate) {
|
|
3426
|
-
let { className = "", url = "", description = "", height, width } = $$props;
|
|
3427
|
-
|
|
3428
|
-
$$self.$set = $$props => {
|
|
3429
|
-
if ('className' in $$props) $$invalidate('className', className = $$props.className);
|
|
3430
|
-
if ('url' in $$props) $$invalidate('url', url = $$props.url);
|
|
3431
|
-
if ('description' in $$props) $$invalidate('description', description = $$props.description);
|
|
3432
|
-
if ('height' in $$props) $$invalidate('height', height = $$props.height);
|
|
3433
|
-
if ('width' in $$props) $$invalidate('width', width = $$props.width);
|
|
3434
|
-
};
|
|
3435
|
-
|
|
3436
|
-
let style;
|
|
3437
|
-
|
|
3438
|
-
$$self.$$.update = ($$dirty = { height: 1, width: 1 }) => {
|
|
3439
|
-
if ($$dirty.height || $$dirty.width) { $$invalidate('style', style = buildStyle({ height, width })); }
|
|
3440
|
-
};
|
|
3441
|
-
|
|
3442
|
-
return {
|
|
3443
|
-
className,
|
|
3444
|
-
url,
|
|
3445
|
-
description,
|
|
3446
|
-
height,
|
|
3447
|
-
width,
|
|
3448
|
-
style
|
|
3449
|
-
};
|
|
3450
|
-
}
|
|
3451
|
-
|
|
3452
|
-
class Image extends SvelteComponent {
|
|
3453
|
-
constructor(options) {
|
|
3454
|
-
super();
|
|
3455
|
-
init(this, options, instance$9, create_fragment$9, safe_not_equal, ["className", "url", "description", "height", "width"]);
|
|
3456
|
-
}
|
|
3457
|
-
}
|
|
3458
|
-
|
|
3459
|
-
export { Button as button, Container as container, Heading as heading, Image as image, Input as input, Link as link, Login as login, Option as option, saveRecordButton, Select as select, Text as text };
|
|
3460
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9zdmVsdGUvaW50ZXJuYWwvaW5kZXgubWpzIiwiLi4vc3JjL2Nzc1ZhcnMuanMiLCIuLi9zcmMvQ29udGFpbmVyLnN2ZWx0ZSIsIi4uL3NyYy9idWlsZFN0eWxlLmpzIiwiLi4vc3JjL1RleHQuc3ZlbHRlIiwiLi4vc3JjL0hlYWRpbmcuc3ZlbHRlIiwiLi4vc3JjL0lucHV0LnN2ZWx0ZSIsIi4uL3NyYy9TZWxlY3Quc3ZlbHRlIiwiLi4vc3JjL09wdGlvbi5zdmVsdGUiLCIuLi9zcmMvQnV0dG9uLnN2ZWx0ZSIsIi4uL3NyYy9Mb2dpbi5zdmVsdGUiLCIuLi9zcmMvVGVtcGxhdGVzL3NhdmVSZWNvcmRCdXR0b24uanMiLCIuLi9zcmMvTGluay5zdmVsdGUiLCIuLi9zcmMvSW1hZ2Uuc3ZlbHRlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG5vb3AoKSB7IH1cbmNvbnN0IGlkZW50aXR5ID0geCA9PiB4O1xuZnVuY3Rpb24gYXNzaWduKHRhciwgc3JjKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGZvciAoY29uc3QgayBpbiBzcmMpXG4gICAgICAgIHRhcltrXSA9IHNyY1trXTtcbiAgICByZXR1cm4gdGFyO1xufVxuZnVuY3Rpb24gaXNfcHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gYWRkX2xvY2F0aW9uKGVsZW1lbnQsIGZpbGUsIGxpbmUsIGNvbHVtbiwgY2hhcikge1xuICAgIGVsZW1lbnQuX19zdmVsdGVfbWV0YSA9IHtcbiAgICAgICAgbG9jOiB7IGZpbGUsIGxpbmUsIGNvbHVtbiwgY2hhciB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJ1bihmbikge1xuICAgIHJldHVybiBmbigpO1xufVxuZnVuY3Rpb24gYmxhbmtfb2JqZWN0KCkge1xuICAgIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuZnVuY3Rpb24gcnVuX2FsbChmbnMpIHtcbiAgICBmbnMuZm9yRWFjaChydW4pO1xufVxuZnVuY3Rpb24gaXNfZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gc2FmZV9ub3RfZXF1YWwoYSwgYikge1xuICAgIHJldHVybiBhICE9IGEgPyBiID09IGIgOiBhICE9PSBiIHx8ICgoYSAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHx8IHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKTtcbn1cbmZ1bmN0aW9uIG5vdF9lcXVhbChhLCBiKSB7XG4gICAgcmV0dXJuIGEgIT0gYSA/IGIgPT0gYiA6IGEgIT09IGI7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV9zdG9yZShzdG9yZSwgbmFtZSkge1xuICAgIGlmICghc3RvcmUgfHwgdHlwZW9mIHN0b3JlLnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25hbWV9JyBpcyBub3QgYSBzdG9yZSB3aXRoIGEgJ3N1YnNjcmliZScgbWV0aG9kYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3Vic2NyaWJlKHN0b3JlLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHVuc3ViID0gc3RvcmUuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdW5zdWIudW5zdWJzY3JpYmUgPyAoKSA9PiB1bnN1Yi51bnN1YnNjcmliZSgpIDogdW5zdWI7XG59XG5mdW5jdGlvbiBnZXRfc3RvcmVfdmFsdWUoc3RvcmUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgc3Vic2NyaWJlKHN0b3JlLCBfID0+IHZhbHVlID0gXykoKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjb21wb25lbnRfc3Vic2NyaWJlKGNvbXBvbmVudCwgc3RvcmUsIGNhbGxiYWNrKSB7XG4gICAgY29tcG9uZW50LiQkLm9uX2Rlc3Ryb3kucHVzaChzdWJzY3JpYmUoc3RvcmUsIGNhbGxiYWNrKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVfc2xvdChkZWZpbml0aW9uLCBjdHgsIGZuKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2xvdF9jdHggPSBnZXRfc2xvdF9jb250ZXh0KGRlZmluaXRpb24sIGN0eCwgZm4pO1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvblswXShzbG90X2N0eCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0X3Nsb3RfY29udGV4dChkZWZpbml0aW9uLCBjdHgsIGZuKSB7XG4gICAgcmV0dXJuIGRlZmluaXRpb25bMV1cbiAgICAgICAgPyBhc3NpZ24oe30sIGFzc2lnbihjdHguJCRzY29wZS5jdHgsIGRlZmluaXRpb25bMV0oZm4gPyBmbihjdHgpIDoge30pKSlcbiAgICAgICAgOiBjdHguJCRzY29wZS5jdHg7XG59XG5mdW5jdGlvbiBnZXRfc2xvdF9jaGFuZ2VzKGRlZmluaXRpb24sIGN0eCwgY2hhbmdlZCwgZm4pIHtcbiAgICByZXR1cm4gZGVmaW5pdGlvblsxXVxuICAgICAgICA/IGFzc2lnbih7fSwgYXNzaWduKGN0eC4kJHNjb3BlLmNoYW5nZWQgfHwge30sIGRlZmluaXRpb25bMV0oZm4gPyBmbihjaGFuZ2VkKSA6IHt9KSkpXG4gICAgICAgIDogY3R4LiQkc2NvcGUuY2hhbmdlZCB8fCB7fTtcbn1cbmZ1bmN0aW9uIGV4Y2x1ZGVfaW50ZXJuYWxfcHJvcHMocHJvcHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGsgaW4gcHJvcHMpXG4gICAgICAgIGlmIChrWzBdICE9PSAnJCcpXG4gICAgICAgICAgICByZXN1bHRba10gPSBwcm9wc1trXTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gb25jZShmbikge1xuICAgIGxldCByYW4gPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHJhbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmFuID0gdHJ1ZTtcbiAgICAgICAgZm4uY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbnVsbF90b19lbXB0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNldF9zdG9yZV92YWx1ZShzdG9yZSwgcmV0LCB2YWx1ZSA9IHJldCkge1xuICAgIHN0b3JlLnNldCh2YWx1ZSk7XG4gICAgcmV0dXJuIHJldDtcbn1cblxuY29uc3QgaXNfY2xpZW50ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5sZXQgbm93ID0gaXNfY2xpZW50XG4gICAgPyAoKSA9PiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KClcbiAgICA6ICgpID0+IERhdGUubm93KCk7XG5sZXQgcmFmID0gaXNfY2xpZW50ID8gY2IgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKSA6IG5vb3A7XG4vLyB1c2VkIGludGVybmFsbHkgZm9yIHRlc3RpbmdcbmZ1bmN0aW9uIHNldF9ub3coZm4pIHtcbiAgICBub3cgPSBmbjtcbn1cbmZ1bmN0aW9uIHNldF9yYWYoZm4pIHtcbiAgICByYWYgPSBmbjtcbn1cblxuY29uc3QgdGFza3MgPSBuZXcgU2V0KCk7XG5sZXQgcnVubmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gcnVuX3Rhc2tzKCkge1xuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB7XG4gICAgICAgIGlmICghdGFza1swXShub3coKSkpIHtcbiAgICAgICAgICAgIHRhc2tzLmRlbGV0ZSh0YXNrKTtcbiAgICAgICAgICAgIHRhc2tbMV0oKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJ1bm5pbmcgPSB0YXNrcy5zaXplID4gMDtcbiAgICBpZiAocnVubmluZylcbiAgICAgICAgcmFmKHJ1bl90YXNrcyk7XG59XG5mdW5jdGlvbiBjbGVhcl9sb29wcygpIHtcbiAgICAvLyBmb3IgdGVzdGluZy4uLlxuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB0YXNrcy5kZWxldGUodGFzaykpO1xuICAgIHJ1bm5pbmcgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGxvb3AoZm4pIHtcbiAgICBsZXQgdGFzaztcbiAgICBpZiAoIXJ1bm5pbmcpIHtcbiAgICAgICAgcnVubmluZyA9IHRydWU7XG4gICAgICAgIHJhZihydW5fdGFza3MpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9taXNlOiBuZXcgUHJvbWlzZShmdWxmaWwgPT4ge1xuICAgICAgICAgICAgdGFza3MuYWRkKHRhc2sgPSBbZm4sIGZ1bGZpbF0pO1xuICAgICAgICB9KSxcbiAgICAgICAgYWJvcnQoKSB7XG4gICAgICAgICAgICB0YXNrcy5kZWxldGUodGFzayk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhcHBlbmQodGFyZ2V0LCBub2RlKSB7XG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKG5vZGUpO1xufVxuZnVuY3Rpb24gaW5zZXJ0KHRhcmdldCwgbm9kZSwgYW5jaG9yKSB7XG4gICAgdGFyZ2V0Lmluc2VydEJlZm9yZShub2RlLCBhbmNob3IgfHwgbnVsbCk7XG59XG5mdW5jdGlvbiBkZXRhY2gobm9kZSkge1xuICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cbmZ1bmN0aW9uIGRlc3Ryb3lfZWFjaChpdGVyYXRpb25zLCBkZXRhY2hpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGl0ZXJhdGlvbnNbaV0pXG4gICAgICAgICAgICBpdGVyYXRpb25zW2ldLmQoZGV0YWNoaW5nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbGVtZW50KG5hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRfaXMobmFtZSwgaXMpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lLCB7IGlzIH0pO1xufVxuZnVuY3Rpb24gb2JqZWN0X3dpdGhvdXRfcHJvcGVydGllcyhvYmosIGV4Y2x1ZGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW9iamVjdC1saXRlcmFsLXR5cGUtYXNzZXJ0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZm9yIChjb25zdCBrIGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaylcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICYmIGV4Y2x1ZGUuaW5kZXhPZihrKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRhcmdldFtrXSA9IG9ialtrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gc3ZnX2VsZW1lbnQobmFtZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgbmFtZSk7XG59XG5mdW5jdGlvbiB0ZXh0KGRhdGEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YSk7XG59XG5mdW5jdGlvbiBzcGFjZSgpIHtcbiAgICByZXR1cm4gdGV4dCgnICcpO1xufVxuZnVuY3Rpb24gZW1wdHkoKSB7XG4gICAgcmV0dXJuIHRleHQoJycpO1xufVxuZnVuY3Rpb24gbGlzdGVuKG5vZGUsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKCkgPT4gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHByZXZlbnRfZGVmYXVsdChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0b3BfcHJvcGFnYXRpb24oZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gc2VsZihmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzKVxuICAgICAgICAgICAgZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGF0dHIobm9kZSwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIGVsc2VcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBzZXRfYXR0cmlidXRlcyhub2RlLCBhdHRyaWJ1dGVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XG4gICAgICAgICAgICBub2RlLnN0eWxlLmNzc1RleHQgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgICAgIG5vZGVba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF0dHIobm9kZSwga2V5LCBhdHRyaWJ1dGVzW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0X3N2Z19hdHRyaWJ1dGVzKG5vZGUsIGF0dHJpYnV0ZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGF0dHIobm9kZSwga2V5LCBhdHRyaWJ1dGVzW2tleV0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldF9jdXN0b21fZWxlbWVudF9kYXRhKG5vZGUsIHByb3AsIHZhbHVlKSB7XG4gICAgaWYgKHByb3AgaW4gbm9kZSkge1xuICAgICAgICBub2RlW3Byb3BdID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhdHRyKG5vZGUsIHByb3AsIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiB4bGlua19hdHRyKG5vZGUsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgYXR0cmlidXRlLCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRfYmluZGluZ19ncm91cF92YWx1ZShncm91cCkge1xuICAgIGNvbnN0IHZhbHVlID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoZ3JvdXBbaV0uY2hlY2tlZClcbiAgICAgICAgICAgIHZhbHVlLnB1c2goZ3JvdXBbaV0uX192YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHRvX251bWJlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJycgPyB1bmRlZmluZWQgOiArdmFsdWU7XG59XG5mdW5jdGlvbiB0aW1lX3Jhbmdlc190b19hcnJheShyYW5nZXMpIHtcbiAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGFycmF5LnB1c2goeyBzdGFydDogcmFuZ2VzLnN0YXJ0KGkpLCBlbmQ6IHJhbmdlcy5lbmQoaSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cbmZ1bmN0aW9uIGNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmNoaWxkTm9kZXMpO1xufVxuZnVuY3Rpb24gY2xhaW1fZWxlbWVudChub2RlcywgbmFtZSwgYXR0cmlidXRlcywgc3ZnKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IG5vZGUuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZXMuc3BsaWNlKGksIDEpWzBdOyAvLyBUT0RPIHN0cmlwIHVud2FudGVkIGF0dHJpYnV0ZXNcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3ZnID8gc3ZnX2VsZW1lbnQobmFtZSkgOiBlbGVtZW50KG5hbWUpO1xufVxuZnVuY3Rpb24gY2xhaW1fdGV4dChub2RlcywgZGF0YSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICAgICAgbm9kZS5kYXRhID0gJycgKyBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dChkYXRhKTtcbn1cbmZ1bmN0aW9uIGNsYWltX3NwYWNlKG5vZGVzKSB7XG4gICAgcmV0dXJuIGNsYWltX3RleHQobm9kZXMsICcgJyk7XG59XG5mdW5jdGlvbiBzZXRfZGF0YSh0ZXh0LCBkYXRhKSB7XG4gICAgZGF0YSA9ICcnICsgZGF0YTtcbiAgICBpZiAodGV4dC5kYXRhICE9PSBkYXRhKVxuICAgICAgICB0ZXh0LmRhdGEgPSBkYXRhO1xufVxuZnVuY3Rpb24gc2V0X2lucHV0X3ZhbHVlKGlucHV0LCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPSBudWxsIHx8IGlucHV0LnZhbHVlKSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0X2lucHV0X3R5cGUoaW5wdXQsIHR5cGUpIHtcbiAgICB0cnkge1xuICAgICAgICBpbnB1dC50eXBlID0gdHlwZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldF9zdHlsZShub2RlLCBrZXksIHZhbHVlLCBpbXBvcnRhbnQpIHtcbiAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUsIGltcG9ydGFudCA/ICdpbXBvcnRhbnQnIDogJycpO1xufVxuZnVuY3Rpb24gc2VsZWN0X29wdGlvbihzZWxlY3QsIHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3Qub3B0aW9uc1tpXTtcbiAgICAgICAgaWYgKG9wdGlvbi5fX3ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNlbGVjdF9vcHRpb25zKHNlbGVjdCwgdmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdC5vcHRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdC5vcHRpb25zW2ldO1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB+dmFsdWUuaW5kZXhPZihvcHRpb24uX192YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2VsZWN0X3ZhbHVlKHNlbGVjdCkge1xuICAgIGNvbnN0IHNlbGVjdGVkX29wdGlvbiA9IHNlbGVjdC5xdWVyeVNlbGVjdG9yKCc6Y2hlY2tlZCcpIHx8IHNlbGVjdC5vcHRpb25zWzBdO1xuICAgIHJldHVybiBzZWxlY3RlZF9vcHRpb24gJiYgc2VsZWN0ZWRfb3B0aW9uLl9fdmFsdWU7XG59XG5mdW5jdGlvbiBzZWxlY3RfbXVsdGlwbGVfdmFsdWUoc2VsZWN0KSB7XG4gICAgcmV0dXJuIFtdLm1hcC5jYWxsKHNlbGVjdC5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLCBvcHRpb24gPT4gb3B0aW9uLl9fdmFsdWUpO1xufVxuZnVuY3Rpb24gYWRkX3Jlc2l6ZV9saXN0ZW5lcihlbGVtZW50LCBmbikge1xuICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gICAgY29uc3Qgb2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb2JqZWN0Jyk7XG4gICAgb2JqZWN0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogLTE7Jyk7XG4gICAgb2JqZWN0LnR5cGUgPSAndGV4dC9odG1sJztcbiAgICBvYmplY3QudGFiSW5kZXggPSAtMTtcbiAgICBsZXQgd2luO1xuICAgIG9iamVjdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHdpbiA9IG9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmbik7XG4gICAgfTtcbiAgICBpZiAoL1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChvYmplY3QpO1xuICAgICAgICBvYmplY3QuZGF0YSA9ICdhYm91dDpibGFuayc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvYmplY3QuZGF0YSA9ICdhYm91dDpibGFuayc7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQob2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICB3aW4gJiYgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZuKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQob2JqZWN0KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiB0b2dnbGVfY2xhc3MoZWxlbWVudCwgbmFtZSwgdG9nZ2xlKSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3RbdG9nZ2xlID8gJ2FkZCcgOiAncmVtb3ZlJ10obmFtZSk7XG59XG5mdW5jdGlvbiBjdXN0b21fZXZlbnQodHlwZSwgZGV0YWlsKSB7XG4gICAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgIGUuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgZGV0YWlsKTtcbiAgICByZXR1cm4gZTtcbn1cbmNsYXNzIEh0bWxUYWcge1xuICAgIGNvbnN0cnVjdG9yKGh0bWwsIGFuY2hvciA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5lID0gZWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuYSA9IGFuY2hvcjtcbiAgICAgICAgdGhpcy51KGh0bWwpO1xuICAgIH1cbiAgICBtKHRhcmdldCwgYW5jaG9yID0gbnVsbCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaW5zZXJ0KHRhcmdldCwgdGhpcy5uW2ldLCBhbmNob3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudCA9IHRhcmdldDtcbiAgICB9XG4gICAgdShodG1sKSB7XG4gICAgICAgIHRoaXMuZS5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICB0aGlzLm4gPSBBcnJheS5mcm9tKHRoaXMuZS5jaGlsZE5vZGVzKTtcbiAgICB9XG4gICAgcChodG1sKSB7XG4gICAgICAgIHRoaXMuZCgpO1xuICAgICAgICB0aGlzLnUoaHRtbCk7XG4gICAgICAgIHRoaXMubSh0aGlzLnQsIHRoaXMuYSk7XG4gICAgfVxuICAgIGQoKSB7XG4gICAgICAgIHRoaXMubi5mb3JFYWNoKGRldGFjaCk7XG4gICAgfVxufVxuXG5sZXQgc3R5bGVzaGVldDtcbmxldCBhY3RpdmUgPSAwO1xubGV0IGN1cnJlbnRfcnVsZXMgPSB7fTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJrc2t5YXBwL3N0cmluZy1oYXNoL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5mdW5jdGlvbiBoYXNoKHN0cikge1xuICAgIGxldCBoYXNoID0gNTM4MTtcbiAgICBsZXQgaSA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSlcbiAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpIF4gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGhhc2ggPj4+IDA7XG59XG5mdW5jdGlvbiBjcmVhdGVfcnVsZShub2RlLCBhLCBiLCBkdXJhdGlvbiwgZGVsYXksIGVhc2UsIGZuLCB1aWQgPSAwKSB7XG4gICAgY29uc3Qgc3RlcCA9IDE2LjY2NiAvIGR1cmF0aW9uO1xuICAgIGxldCBrZXlmcmFtZXMgPSAne1xcbic7XG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPD0gMTsgcCArPSBzdGVwKSB7XG4gICAgICAgIGNvbnN0IHQgPSBhICsgKGIgLSBhKSAqIGVhc2UocCk7XG4gICAgICAgIGtleWZyYW1lcyArPSBwICogMTAwICsgYCV7JHtmbih0LCAxIC0gdCl9fVxcbmA7XG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBrZXlmcmFtZXMgKyBgMTAwJSB7JHtmbihiLCAxIC0gYil9fVxcbn1gO1xuICAgIGNvbnN0IG5hbWUgPSBgX19zdmVsdGVfJHtoYXNoKHJ1bGUpfV8ke3VpZH1gO1xuICAgIGlmICghY3VycmVudF9ydWxlc1tuYW1lXSkge1xuICAgICAgICBpZiAoIXN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICAgICAgc3R5bGVzaGVldCA9IHN0eWxlLnNoZWV0O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRfcnVsZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoYEBrZXlmcmFtZXMgJHtuYW1lfSAke3J1bGV9YCwgc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBhbmltYXRpb24gPSBub2RlLnN0eWxlLmFuaW1hdGlvbiB8fCAnJztcbiAgICBub2RlLnN0eWxlLmFuaW1hdGlvbiA9IGAke2FuaW1hdGlvbiA/IGAke2FuaW1hdGlvbn0sIGAgOiBgYH0ke25hbWV9ICR7ZHVyYXRpb259bXMgbGluZWFyICR7ZGVsYXl9bXMgMSBib3RoYDtcbiAgICBhY3RpdmUgKz0gMTtcbiAgICByZXR1cm4gbmFtZTtcbn1cbmZ1bmN0aW9uIGRlbGV0ZV9ydWxlKG5vZGUsIG5hbWUpIHtcbiAgICBub2RlLnN0eWxlLmFuaW1hdGlvbiA9IChub2RlLnN0eWxlLmFuaW1hdGlvbiB8fCAnJylcbiAgICAgICAgLnNwbGl0KCcsICcpXG4gICAgICAgIC5maWx0ZXIobmFtZVxuICAgICAgICA/IGFuaW0gPT4gYW5pbS5pbmRleE9mKG5hbWUpIDwgMCAvLyByZW1vdmUgc3BlY2lmaWMgYW5pbWF0aW9uXG4gICAgICAgIDogYW5pbSA9PiBhbmltLmluZGV4T2YoJ19fc3ZlbHRlJykgPT09IC0xIC8vIHJlbW92ZSBhbGwgU3ZlbHRlIGFuaW1hdGlvbnNcbiAgICApXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgIGlmIChuYW1lICYmICEtLWFjdGl2ZSlcbiAgICAgICAgY2xlYXJfcnVsZXMoKTtcbn1cbmZ1bmN0aW9uIGNsZWFyX3J1bGVzKCkge1xuICAgIHJhZigoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBpID0gc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmRlbGV0ZVJ1bGUoaSk7XG4gICAgICAgIGN1cnJlbnRfcnVsZXMgPSB7fTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2FuaW1hdGlvbihub2RlLCBmcm9tLCBmbiwgcGFyYW1zKSB7XG4gICAgaWYgKCFmcm9tKVxuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICBjb25zdCB0byA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGZyb20ubGVmdCA9PT0gdG8ubGVmdCAmJiBmcm9tLnJpZ2h0ID09PSB0by5yaWdodCAmJiBmcm9tLnRvcCA9PT0gdG8udG9wICYmIGZyb20uYm90dG9tID09PSB0by5ib3R0b20pXG4gICAgICAgIHJldHVybiBub29wO1xuICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIFxuICAgIC8vIEB0cy1pZ25vcmUgdG9kbzogc2hvdWxkIHRoaXMgYmUgc2VwYXJhdGVkIGZyb20gZGVzdHJ1Y3R1cmluZz8gT3Igc3RhcnQvZW5kIGFkZGVkIHRvIHB1YmxpYyBhcGkgYW5kIGRvY3VtZW50YXRpb24/XG4gICAgc3RhcnQ6IHN0YXJ0X3RpbWUgPSBub3coKSArIGRlbGF5LCBcbiAgICAvLyBAdHMtaWdub3JlIHRvZG86XG4gICAgZW5kID0gc3RhcnRfdGltZSArIGR1cmF0aW9uLCB0aWNrID0gbm9vcCwgY3NzIH0gPSBmbihub2RlLCB7IGZyb20sIHRvIH0sIHBhcmFtcyk7XG4gICAgbGV0IHJ1bm5pbmcgPSB0cnVlO1xuICAgIGxldCBzdGFydGVkID0gZmFsc2U7XG4gICAgbGV0IG5hbWU7XG4gICAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgIGlmIChjc3MpIHtcbiAgICAgICAgICAgIG5hbWUgPSBjcmVhdGVfcnVsZShub2RlLCAwLCAxLCBkdXJhdGlvbiwgZGVsYXksIGVhc2luZywgY3NzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlbGF5KSB7XG4gICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICBpZiAoY3NzKVxuICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSwgbmFtZSk7XG4gICAgICAgIHJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgbG9vcChub3cgPT4ge1xuICAgICAgICBpZiAoIXN0YXJ0ZWQgJiYgbm93ID49IHN0YXJ0X3RpbWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydGVkICYmIG5vdyA+PSBlbmQpIHtcbiAgICAgICAgICAgIHRpY2soMSwgMCk7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFydW5uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBub3cgLSBzdGFydF90aW1lO1xuICAgICAgICAgICAgY29uc3QgdCA9IDAgKyAxICogZWFzaW5nKHAgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICB0aWNrKHQsIDEgLSB0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBzdGFydCgpO1xuICAgIHRpY2soMCwgMSk7XG4gICAgcmV0dXJuIHN0b3A7XG59XG5mdW5jdGlvbiBmaXhfcG9zaXRpb24obm9kZSkge1xuICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICBpZiAoc3R5bGUucG9zaXRpb24gIT09ICdhYnNvbHV0ZScgJiYgc3R5bGUucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzdHlsZTtcbiAgICAgICAgY29uc3QgYSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBhZGRfdHJhbnNmb3JtKG5vZGUsIGEpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZF90cmFuc2Zvcm0obm9kZSwgYSkge1xuICAgIGNvbnN0IGIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChhLmxlZnQgIT09IGIubGVmdCB8fCBhLnRvcCAhPT0gYi50b3ApIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBzdHlsZS50cmFuc2Zvcm0gPT09ICdub25lJyA/ICcnIDogc3R5bGUudHJhbnNmb3JtO1xuICAgICAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGAke3RyYW5zZm9ybX0gdHJhbnNsYXRlKCR7YS5sZWZ0IC0gYi5sZWZ0fXB4LCAke2EudG9wIC0gYi50b3B9cHgpYDtcbiAgICB9XG59XG5cbmxldCBjdXJyZW50X2NvbXBvbmVudDtcbmZ1bmN0aW9uIHNldF9jdXJyZW50X2NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICBjdXJyZW50X2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIGdldF9jdXJyZW50X2NvbXBvbmVudCgpIHtcbiAgICBpZiAoIWN1cnJlbnRfY29tcG9uZW50KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIGNhbGxlZCBvdXRzaWRlIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbmApO1xuICAgIHJldHVybiBjdXJyZW50X2NvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIGJlZm9yZVVwZGF0ZShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmJlZm9yZV91cGRhdGUucHVzaChmbik7XG59XG5mdW5jdGlvbiBvbk1vdW50KGZuKSB7XG4gICAgZ2V0X2N1cnJlbnRfY29tcG9uZW50KCkuJCQub25fbW91bnQucHVzaChmbik7XG59XG5mdW5jdGlvbiBhZnRlclVwZGF0ZShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmFmdGVyX3VwZGF0ZS5wdXNoKGZuKTtcbn1cbmZ1bmN0aW9uIG9uRGVzdHJveShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLm9uX2Rlc3Ryb3kucHVzaChmbik7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudERpc3BhdGNoZXIoKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY3VycmVudF9jb21wb25lbnQ7XG4gICAgcmV0dXJuICh0eXBlLCBkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gY29tcG9uZW50LiQkLmNhbGxiYWNrc1t0eXBlXTtcbiAgICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgLy8gVE9ETyBhcmUgdGhlcmUgc2l0dWF0aW9ucyB3aGVyZSBldmVudHMgY291bGQgYmUgZGlzcGF0Y2hlZFxuICAgICAgICAgICAgLy8gaW4gYSBzZXJ2ZXIgKG5vbi1ET00pIGVudmlyb25tZW50P1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBjdXN0b21fZXZlbnQodHlwZSwgZGV0YWlsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5zbGljZSgpLmZvckVhY2goZm4gPT4ge1xuICAgICAgICAgICAgICAgIGZuLmNhbGwoY29tcG9uZW50LCBldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBzZXRDb250ZXh0KGtleSwgY29udGV4dCkge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmNvbnRleHQuc2V0KGtleSwgY29udGV4dCk7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0KGtleSkge1xuICAgIHJldHVybiBnZXRfY3VycmVudF9jb21wb25lbnQoKS4kJC5jb250ZXh0LmdldChrZXkpO1xufVxuLy8gVE9ETyBmaWd1cmUgb3V0IGlmIHdlIHN0aWxsIHdhbnQgdG8gc3VwcG9ydFxuLy8gc2hvcnRoYW5kIGV2ZW50cywgb3IgaWYgd2Ugd2FudCB0byBpbXBsZW1lbnRcbi8vIGEgcmVhbCBidWJibGluZyBtZWNoYW5pc21cbmZ1bmN0aW9uIGJ1YmJsZShjb21wb25lbnQsIGV2ZW50KSB7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gY29tcG9uZW50LiQkLmNhbGxiYWNrc1tldmVudC50eXBlXTtcbiAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgIGNhbGxiYWNrcy5zbGljZSgpLmZvckVhY2goZm4gPT4gZm4oZXZlbnQpKTtcbiAgICB9XG59XG5cbmNvbnN0IGRpcnR5X2NvbXBvbmVudHMgPSBbXTtcbmNvbnN0IGludHJvcyA9IHsgZW5hYmxlZDogZmFsc2UgfTtcbmNvbnN0IGJpbmRpbmdfY2FsbGJhY2tzID0gW107XG5jb25zdCByZW5kZXJfY2FsbGJhY2tzID0gW107XG5jb25zdCBmbHVzaF9jYWxsYmFja3MgPSBbXTtcbmNvbnN0IHJlc29sdmVkX3Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbmxldCB1cGRhdGVfc2NoZWR1bGVkID0gZmFsc2U7XG5mdW5jdGlvbiBzY2hlZHVsZV91cGRhdGUoKSB7XG4gICAgaWYgKCF1cGRhdGVfc2NoZWR1bGVkKSB7XG4gICAgICAgIHVwZGF0ZV9zY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICByZXNvbHZlZF9wcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRpY2soKSB7XG4gICAgc2NoZWR1bGVfdXBkYXRlKCk7XG4gICAgcmV0dXJuIHJlc29sdmVkX3Byb21pc2U7XG59XG5mdW5jdGlvbiBhZGRfcmVuZGVyX2NhbGxiYWNrKGZuKSB7XG4gICAgcmVuZGVyX2NhbGxiYWNrcy5wdXNoKGZuKTtcbn1cbmZ1bmN0aW9uIGFkZF9mbHVzaF9jYWxsYmFjayhmbikge1xuICAgIGZsdXNoX2NhbGxiYWNrcy5wdXNoKGZuKTtcbn1cbmZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGNvbnN0IHNlZW5fY2FsbGJhY2tzID0gbmV3IFNldCgpO1xuICAgIGRvIHtcbiAgICAgICAgLy8gZmlyc3QsIGNhbGwgYmVmb3JlVXBkYXRlIGZ1bmN0aW9uc1xuICAgICAgICAvLyBhbmQgdXBkYXRlIGNvbXBvbmVudHNcbiAgICAgICAgd2hpbGUgKGRpcnR5X2NvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBkaXJ0eV9jb21wb25lbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQoY29tcG9uZW50KTtcbiAgICAgICAgICAgIHVwZGF0ZShjb21wb25lbnQuJCQpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChiaW5kaW5nX2NhbGxiYWNrcy5sZW5ndGgpXG4gICAgICAgICAgICBiaW5kaW5nX2NhbGxiYWNrcy5wb3AoKSgpO1xuICAgICAgICAvLyB0aGVuLCBvbmNlIGNvbXBvbmVudHMgYXJlIHVwZGF0ZWQsIGNhbGxcbiAgICAgICAgLy8gYWZ0ZXJVcGRhdGUgZnVuY3Rpb25zLiBUaGlzIG1heSBjYXVzZVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHVwZGF0ZXMuLi5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJfY2FsbGJhY2tzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHJlbmRlcl9jYWxsYmFja3NbaV07XG4gICAgICAgICAgICBpZiAoIXNlZW5fY2FsbGJhY2tzLmhhcyhjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIC8vIC4uLnNvIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHNcbiAgICAgICAgICAgICAgICBzZWVuX2NhbGxiYWNrcy5hZGQoY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcl9jYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICB9IHdoaWxlIChkaXJ0eV9jb21wb25lbnRzLmxlbmd0aCk7XG4gICAgd2hpbGUgKGZsdXNoX2NhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgZmx1c2hfY2FsbGJhY2tzLnBvcCgpKCk7XG4gICAgfVxuICAgIHVwZGF0ZV9zY2hlZHVsZWQgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZSgkJCkge1xuICAgIGlmICgkJC5mcmFnbWVudCkge1xuICAgICAgICAkJC51cGRhdGUoJCQuZGlydHkpO1xuICAgICAgICBydW5fYWxsKCQkLmJlZm9yZV91cGRhdGUpO1xuICAgICAgICAkJC5mcmFnbWVudC5wKCQkLmRpcnR5LCAkJC5jdHgpO1xuICAgICAgICAkJC5kaXJ0eSA9IG51bGw7XG4gICAgICAgICQkLmFmdGVyX3VwZGF0ZS5mb3JFYWNoKGFkZF9yZW5kZXJfY2FsbGJhY2spO1xuICAgIH1cbn1cblxubGV0IHByb21pc2U7XG5mdW5jdGlvbiB3YWl0KCkge1xuICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2gobm9kZSwgZGlyZWN0aW9uLCBraW5kKSB7XG4gICAgbm9kZS5kaXNwYXRjaEV2ZW50KGN1c3RvbV9ldmVudChgJHtkaXJlY3Rpb24gPyAnaW50cm8nIDogJ291dHJvJ30ke2tpbmR9YCkpO1xufVxuY29uc3Qgb3V0cm9pbmcgPSBuZXcgU2V0KCk7XG5sZXQgb3V0cm9zO1xuZnVuY3Rpb24gZ3JvdXBfb3V0cm9zKCkge1xuICAgIG91dHJvcyA9IHtcbiAgICAgICAgcjogMCxcbiAgICAgICAgYzogW10sXG4gICAgICAgIHA6IG91dHJvcyAvLyBwYXJlbnQgZ3JvdXBcbiAgICB9O1xufVxuZnVuY3Rpb24gY2hlY2tfb3V0cm9zKCkge1xuICAgIGlmICghb3V0cm9zLnIpIHtcbiAgICAgICAgcnVuX2FsbChvdXRyb3MuYyk7XG4gICAgfVxuICAgIG91dHJvcyA9IG91dHJvcy5wO1xufVxuZnVuY3Rpb24gdHJhbnNpdGlvbl9pbihibG9jaywgbG9jYWwpIHtcbiAgICBpZiAoYmxvY2sgJiYgYmxvY2suaSkge1xuICAgICAgICBvdXRyb2luZy5kZWxldGUoYmxvY2spO1xuICAgICAgICBibG9jay5pKGxvY2FsKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uX291dChibG9jaywgbG9jYWwsIGRldGFjaCwgY2FsbGJhY2spIHtcbiAgICBpZiAoYmxvY2sgJiYgYmxvY2subykge1xuICAgICAgICBpZiAob3V0cm9pbmcuaGFzKGJsb2NrKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3V0cm9pbmcuYWRkKGJsb2NrKTtcbiAgICAgICAgb3V0cm9zLmMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBvdXRyb2luZy5kZWxldGUoYmxvY2spO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRldGFjaClcbiAgICAgICAgICAgICAgICAgICAgYmxvY2suZCgxKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYmxvY2subyhsb2NhbCk7XG4gICAgfVxufVxuY29uc3QgbnVsbF90cmFuc2l0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuZnVuY3Rpb24gY3JlYXRlX2luX3RyYW5zaXRpb24obm9kZSwgZm4sIHBhcmFtcykge1xuICAgIGxldCBjb25maWcgPSBmbihub2RlLCBwYXJhbXMpO1xuICAgIGxldCBydW5uaW5nID0gZmFsc2U7XG4gICAgbGV0IGFuaW1hdGlvbl9uYW1lO1xuICAgIGxldCB0YXNrO1xuICAgIGxldCB1aWQgPSAwO1xuICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICAgIGlmIChhbmltYXRpb25fbmFtZSlcbiAgICAgICAgICAgIGRlbGV0ZV9ydWxlKG5vZGUsIGFuaW1hdGlvbl9uYW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ28oKSB7XG4gICAgICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIHRpY2sgPSBub29wLCBjc3MgfSA9IGNvbmZpZyB8fCBudWxsX3RyYW5zaXRpb247XG4gICAgICAgIGlmIChjc3MpXG4gICAgICAgICAgICBhbmltYXRpb25fbmFtZSA9IGNyZWF0ZV9ydWxlKG5vZGUsIDAsIDEsIGR1cmF0aW9uLCBkZWxheSwgZWFzaW5nLCBjc3MsIHVpZCsrKTtcbiAgICAgICAgdGljaygwLCAxKTtcbiAgICAgICAgY29uc3Qgc3RhcnRfdGltZSA9IG5vdygpICsgZGVsYXk7XG4gICAgICAgIGNvbnN0IGVuZF90aW1lID0gc3RhcnRfdGltZSArIGR1cmF0aW9uO1xuICAgICAgICBpZiAodGFzaylcbiAgICAgICAgICAgIHRhc2suYWJvcnQoKTtcbiAgICAgICAgcnVubmluZyA9IHRydWU7XG4gICAgICAgIGFkZF9yZW5kZXJfY2FsbGJhY2soKCkgPT4gZGlzcGF0Y2gobm9kZSwgdHJ1ZSwgJ3N0YXJ0JykpO1xuICAgICAgICB0YXNrID0gbG9vcChub3cgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93ID49IGVuZF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2soMSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG5vZGUsIHRydWUsICdlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm93ID49IHN0YXJ0X3RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGVhc2luZygobm93IC0gc3RhcnRfdGltZSkgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRpY2sodCwgMSAtIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydW5uaW5nO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCgpIHtcbiAgICAgICAgICAgIGlmIChzdGFydGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlbGV0ZV9ydWxlKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGlzX2Z1bmN0aW9uKGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICBjb25maWcgPSBjb25maWcoKTtcbiAgICAgICAgICAgICAgICB3YWl0KCkudGhlbihnbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnbygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICAgICAgc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbmQoKSB7XG4gICAgICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICBydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlX291dF90cmFuc2l0aW9uKG5vZGUsIGZuLCBwYXJhbXMpIHtcbiAgICBsZXQgY29uZmlnID0gZm4obm9kZSwgcGFyYW1zKTtcbiAgICBsZXQgcnVubmluZyA9IHRydWU7XG4gICAgbGV0IGFuaW1hdGlvbl9uYW1lO1xuICAgIGNvbnN0IGdyb3VwID0gb3V0cm9zO1xuICAgIGdyb3VwLnIgKz0gMTtcbiAgICBmdW5jdGlvbiBnbygpIHtcbiAgICAgICAgY29uc3QgeyBkZWxheSA9IDAsIGR1cmF0aW9uID0gMzAwLCBlYXNpbmcgPSBpZGVudGl0eSwgdGljayA9IG5vb3AsIGNzcyB9ID0gY29uZmlnIHx8IG51bGxfdHJhbnNpdGlvbjtcbiAgICAgICAgaWYgKGNzcylcbiAgICAgICAgICAgIGFuaW1hdGlvbl9uYW1lID0gY3JlYXRlX3J1bGUobm9kZSwgMSwgMCwgZHVyYXRpb24sIGRlbGF5LCBlYXNpbmcsIGNzcyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0X3RpbWUgPSBub3coKSArIGRlbGF5O1xuICAgICAgICBjb25zdCBlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyBkdXJhdGlvbjtcbiAgICAgICAgYWRkX3JlbmRlcl9jYWxsYmFjaygoKSA9PiBkaXNwYXRjaChub2RlLCBmYWxzZSwgJ3N0YXJ0JykpO1xuICAgICAgICBsb29wKG5vdyA9PiB7XG4gICAgICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgICAgICAgIGlmIChub3cgPj0gZW5kX3RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGljaygwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gobm9kZSwgZmFsc2UsICdlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWdyb3VwLnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCByZXN1bHQgaW4gYGVuZCgpYCBiZWluZyBjYWxsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFuIHVwIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9hbGwoZ3JvdXAuYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm93ID49IHN0YXJ0X3RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGVhc2luZygobm93IC0gc3RhcnRfdGltZSkgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRpY2soMSAtIHQsIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydW5uaW5nO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzX2Z1bmN0aW9uKGNvbmZpZykpIHtcbiAgICAgICAgd2FpdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uZmlnID0gY29uZmlnKCk7XG4gICAgICAgICAgICBnbygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdvKCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVuZChyZXNldCkge1xuICAgICAgICAgICAgaWYgKHJlc2V0ICYmIGNvbmZpZy50aWNrKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLnRpY2soMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb25fbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSwgYW5pbWF0aW9uX25hbWUpO1xuICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVfYmlkaXJlY3Rpb25hbF90cmFuc2l0aW9uKG5vZGUsIGZuLCBwYXJhbXMsIGludHJvKSB7XG4gICAgbGV0IGNvbmZpZyA9IGZuKG5vZGUsIHBhcmFtcyk7XG4gICAgbGV0IHQgPSBpbnRybyA/IDAgOiAxO1xuICAgIGxldCBydW5uaW5nX3Byb2dyYW0gPSBudWxsO1xuICAgIGxldCBwZW5kaW5nX3Byb2dyYW0gPSBudWxsO1xuICAgIGxldCBhbmltYXRpb25fbmFtZSA9IG51bGw7XG4gICAgZnVuY3Rpb24gY2xlYXJfYW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAoYW5pbWF0aW9uX25hbWUpXG4gICAgICAgICAgICBkZWxldGVfcnVsZShub2RlLCBhbmltYXRpb25fbmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXQocHJvZ3JhbSwgZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZCA9IHByb2dyYW0uYiAtIHQ7XG4gICAgICAgIGR1cmF0aW9uICo9IE1hdGguYWJzKGQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYTogdCxcbiAgICAgICAgICAgIGI6IHByb2dyYW0uYixcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIHN0YXJ0OiBwcm9ncmFtLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBwcm9ncmFtLnN0YXJ0ICsgZHVyYXRpb24sXG4gICAgICAgICAgICBncm91cDogcHJvZ3JhbS5ncm91cFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnbyhiKSB7XG4gICAgICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIHRpY2sgPSBub29wLCBjc3MgfSA9IGNvbmZpZyB8fCBudWxsX3RyYW5zaXRpb247XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB7XG4gICAgICAgICAgICBzdGFydDogbm93KCkgKyBkZWxheSxcbiAgICAgICAgICAgIGJcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFiKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHRvZG86IGltcHJvdmUgdHlwaW5nc1xuICAgICAgICAgICAgcHJvZ3JhbS5ncm91cCA9IG91dHJvcztcbiAgICAgICAgICAgIG91dHJvcy5yICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bm5pbmdfcHJvZ3JhbSkge1xuICAgICAgICAgICAgcGVuZGluZ19wcm9ncmFtID0gcHJvZ3JhbTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gaW50cm8sIGFuZCB0aGVyZSdzIGEgZGVsYXksIHdlIG5lZWQgdG8gZG9cbiAgICAgICAgICAgIC8vIGFuIGluaXRpYWwgdGljayBhbmQvb3IgYXBwbHkgQ1NTIGFuaW1hdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgaWYgKGNzcykge1xuICAgICAgICAgICAgICAgIGNsZWFyX2FuaW1hdGlvbigpO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbl9uYW1lID0gY3JlYXRlX3J1bGUobm9kZSwgdCwgYiwgZHVyYXRpb24sIGRlbGF5LCBlYXNpbmcsIGNzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYilcbiAgICAgICAgICAgICAgICB0aWNrKDAsIDEpO1xuICAgICAgICAgICAgcnVubmluZ19wcm9ncmFtID0gaW5pdChwcm9ncmFtLCBkdXJhdGlvbik7XG4gICAgICAgICAgICBhZGRfcmVuZGVyX2NhbGxiYWNrKCgpID0+IGRpc3BhdGNoKG5vZGUsIGIsICdzdGFydCcpKTtcbiAgICAgICAgICAgIGxvb3Aobm93ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGVuZGluZ19wcm9ncmFtICYmIG5vdyA+IHBlbmRpbmdfcHJvZ3JhbS5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBydW5uaW5nX3Byb2dyYW0gPSBpbml0KHBlbmRpbmdfcHJvZ3JhbSwgZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChub2RlLCBydW5uaW5nX3Byb2dyYW0uYiwgJ3N0YXJ0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyX2FuaW1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uX25hbWUgPSBjcmVhdGVfcnVsZShub2RlLCB0LCBydW5uaW5nX3Byb2dyYW0uYiwgcnVubmluZ19wcm9ncmFtLmR1cmF0aW9uLCAwLCBlYXNpbmcsIGNvbmZpZy5jc3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydW5uaW5nX3Byb2dyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdyA+PSBydW5uaW5nX3Byb2dyYW0uZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrKHQgPSBydW5uaW5nX3Byb2dyYW0uYiwgMSAtIHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gobm9kZSwgcnVubmluZ19wcm9ncmFtLmIsICdlbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZ19wcm9ncmFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgZG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nX3Byb2dyYW0uYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRybyDigJQgd2UgY2FuIHRpZHkgdXAgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfYW5pbWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRybyDigJQgbmVlZHMgdG8gYmUgY29vcmRpbmF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEtLXJ1bm5pbmdfcHJvZ3JhbS5ncm91cC5yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2FsbChydW5uaW5nX3Byb2dyYW0uZ3JvdXAuYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ19wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub3cgPj0gcnVubmluZ19wcm9ncmFtLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gbm93IC0gcnVubmluZ19wcm9ncmFtLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHJ1bm5pbmdfcHJvZ3JhbS5hICsgcnVubmluZ19wcm9ncmFtLmQgKiBlYXNpbmcocCAvIHJ1bm5pbmdfcHJvZ3JhbS5kdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrKHQsIDEgLSB0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gISEocnVubmluZ19wcm9ncmFtIHx8IHBlbmRpbmdfcHJvZ3JhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBydW4oYikge1xuICAgICAgICAgICAgaWYgKGlzX2Z1bmN0aW9uKGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB3YWl0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gY29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIGdvKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ28oYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVuZCgpIHtcbiAgICAgICAgICAgIGNsZWFyX2FuaW1hdGlvbigpO1xuICAgICAgICAgICAgcnVubmluZ19wcm9ncmFtID0gcGVuZGluZ19wcm9ncmFtID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGhhbmRsZV9wcm9taXNlKHByb21pc2UsIGluZm8pIHtcbiAgICBjb25zdCB0b2tlbiA9IGluZm8udG9rZW4gPSB7fTtcbiAgICBmdW5jdGlvbiB1cGRhdGUodHlwZSwgaW5kZXgsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGluZm8udG9rZW4gIT09IHRva2VuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpbmZvLnJlc29sdmVkID0ga2V5ICYmIHsgW2tleV06IHZhbHVlIH07XG4gICAgICAgIGNvbnN0IGNoaWxkX2N0eCA9IGFzc2lnbihhc3NpZ24oe30sIGluZm8uY3R4KSwgaW5mby5yZXNvbHZlZCk7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gdHlwZSAmJiAoaW5mby5jdXJyZW50ID0gdHlwZSkoY2hpbGRfY3R4KTtcbiAgICAgICAgaWYgKGluZm8uYmxvY2spIHtcbiAgICAgICAgICAgIGlmIChpbmZvLmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGluZm8uYmxvY2tzLmZvckVhY2goKGJsb2NrLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSBpbmRleCAmJiBibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfb3V0cm9zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uX291dChibG9jaywgMSwgMSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYmxvY2tzW2ldID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfb3V0cm9zKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZm8uYmxvY2suZCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJsb2NrLmMoKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb25faW4oYmxvY2ssIDEpO1xuICAgICAgICAgICAgYmxvY2subShpbmZvLm1vdW50KCksIGluZm8uYW5jaG9yKTtcbiAgICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5ibG9jayA9IGJsb2NrO1xuICAgICAgICBpZiAoaW5mby5ibG9ja3MpXG4gICAgICAgICAgICBpbmZvLmJsb2Nrc1tpbmRleF0gPSBibG9jaztcbiAgICB9XG4gICAgaWYgKGlzX3Byb21pc2UocHJvbWlzZSkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudF9jb21wb25lbnQgPSBnZXRfY3VycmVudF9jb21wb25lbnQoKTtcbiAgICAgICAgcHJvbWlzZS50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChjdXJyZW50X2NvbXBvbmVudCk7XG4gICAgICAgICAgICB1cGRhdGUoaW5mby50aGVuLCAxLCBpbmZvLnZhbHVlLCB2YWx1ZSk7XG4gICAgICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQobnVsbCk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChjdXJyZW50X2NvbXBvbmVudCk7XG4gICAgICAgICAgICB1cGRhdGUoaW5mby5jYXRjaCwgMiwgaW5mby5lcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgd2UgcHJldmlvdXNseSBoYWQgYSB0aGVuL2NhdGNoIGJsb2NrLCBkZXN0cm95IGl0XG4gICAgICAgIGlmIChpbmZvLmN1cnJlbnQgIT09IGluZm8ucGVuZGluZykge1xuICAgICAgICAgICAgdXBkYXRlKGluZm8ucGVuZGluZywgMCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGluZm8uY3VycmVudCAhPT0gaW5mby50aGVuKSB7XG4gICAgICAgICAgICB1cGRhdGUoaW5mby50aGVuLCAxLCBpbmZvLnZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGluZm8ucmVzb2x2ZWQgPSB7IFtpbmZvLnZhbHVlXTogcHJvbWlzZSB9O1xuICAgIH1cbn1cblxuY29uc3QgZ2xvYmFscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCk7XG5cbmZ1bmN0aW9uIGRlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCkge1xuICAgIGJsb2NrLmQoMSk7XG4gICAgbG9va3VwLmRlbGV0ZShibG9jay5rZXkpO1xufVxuZnVuY3Rpb24gb3V0cm9fYW5kX2Rlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCkge1xuICAgIHRyYW5zaXRpb25fb3V0KGJsb2NrLCAxLCAxLCAoKSA9PiB7XG4gICAgICAgIGxvb2t1cC5kZWxldGUoYmxvY2sua2V5KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZpeF9hbmRfZGVzdHJveV9ibG9jayhibG9jaywgbG9va3VwKSB7XG4gICAgYmxvY2suZigpO1xuICAgIGRlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCk7XG59XG5mdW5jdGlvbiBmaXhfYW5kX291dHJvX2FuZF9kZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApIHtcbiAgICBibG9jay5mKCk7XG4gICAgb3V0cm9fYW5kX2Rlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCk7XG59XG5mdW5jdGlvbiB1cGRhdGVfa2V5ZWRfZWFjaChvbGRfYmxvY2tzLCBjaGFuZ2VkLCBnZXRfa2V5LCBkeW5hbWljLCBjdHgsIGxpc3QsIGxvb2t1cCwgbm9kZSwgZGVzdHJveSwgY3JlYXRlX2VhY2hfYmxvY2ssIG5leHQsIGdldF9jb250ZXh0KSB7XG4gICAgbGV0IG8gPSBvbGRfYmxvY2tzLmxlbmd0aDtcbiAgICBsZXQgbiA9IGxpc3QubGVuZ3RoO1xuICAgIGxldCBpID0gbztcbiAgICBjb25zdCBvbGRfaW5kZXhlcyA9IHt9O1xuICAgIHdoaWxlIChpLS0pXG4gICAgICAgIG9sZF9pbmRleGVzW29sZF9ibG9ja3NbaV0ua2V5XSA9IGk7XG4gICAgY29uc3QgbmV3X2Jsb2NrcyA9IFtdO1xuICAgIGNvbnN0IG5ld19sb29rdXAgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgZGVsdGFzID0gbmV3IE1hcCgpO1xuICAgIGkgPSBuO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRfY3R4ID0gZ2V0X2NvbnRleHQoY3R4LCBsaXN0LCBpKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZ2V0X2tleShjaGlsZF9jdHgpO1xuICAgICAgICBsZXQgYmxvY2sgPSBsb29rdXAuZ2V0KGtleSk7XG4gICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgIGJsb2NrID0gY3JlYXRlX2VhY2hfYmxvY2soa2V5LCBjaGlsZF9jdHgpO1xuICAgICAgICAgICAgYmxvY2suYygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgICAgIGJsb2NrLnAoY2hhbmdlZCwgY2hpbGRfY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdfbG9va3VwLnNldChrZXksIG5ld19ibG9ja3NbaV0gPSBibG9jayk7XG4gICAgICAgIGlmIChrZXkgaW4gb2xkX2luZGV4ZXMpXG4gICAgICAgICAgICBkZWx0YXMuc2V0KGtleSwgTWF0aC5hYnMoaSAtIG9sZF9pbmRleGVzW2tleV0pKTtcbiAgICB9XG4gICAgY29uc3Qgd2lsbF9tb3ZlID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IGRpZF9tb3ZlID0gbmV3IFNldCgpO1xuICAgIGZ1bmN0aW9uIGluc2VydChibG9jaykge1xuICAgICAgICB0cmFuc2l0aW9uX2luKGJsb2NrLCAxKTtcbiAgICAgICAgYmxvY2subShub2RlLCBuZXh0KTtcbiAgICAgICAgbG9va3VwLnNldChibG9jay5rZXksIGJsb2NrKTtcbiAgICAgICAgbmV4dCA9IGJsb2NrLmZpcnN0O1xuICAgICAgICBuLS07XG4gICAgfVxuICAgIHdoaWxlIChvICYmIG4pIHtcbiAgICAgICAgY29uc3QgbmV3X2Jsb2NrID0gbmV3X2Jsb2Nrc1tuIC0gMV07XG4gICAgICAgIGNvbnN0IG9sZF9ibG9jayA9IG9sZF9ibG9ja3NbbyAtIDFdO1xuICAgICAgICBjb25zdCBuZXdfa2V5ID0gbmV3X2Jsb2NrLmtleTtcbiAgICAgICAgY29uc3Qgb2xkX2tleSA9IG9sZF9ibG9jay5rZXk7XG4gICAgICAgIGlmIChuZXdfYmxvY2sgPT09IG9sZF9ibG9jaykge1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICAgICAgbmV4dCA9IG5ld19ibG9jay5maXJzdDtcbiAgICAgICAgICAgIG8tLTtcbiAgICAgICAgICAgIG4tLTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghbmV3X2xvb2t1cC5oYXMob2xkX2tleSkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvbGQgYmxvY2tcbiAgICAgICAgICAgIGRlc3Ryb3kob2xkX2Jsb2NrLCBsb29rdXApO1xuICAgICAgICAgICAgby0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFsb29rdXAuaGFzKG5ld19rZXkpIHx8IHdpbGxfbW92ZS5oYXMobmV3X2tleSkpIHtcbiAgICAgICAgICAgIGluc2VydChuZXdfYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRpZF9tb3ZlLmhhcyhvbGRfa2V5KSkge1xuICAgICAgICAgICAgby0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRlbHRhcy5nZXQobmV3X2tleSkgPiBkZWx0YXMuZ2V0KG9sZF9rZXkpKSB7XG4gICAgICAgICAgICBkaWRfbW92ZS5hZGQobmV3X2tleSk7XG4gICAgICAgICAgICBpbnNlcnQobmV3X2Jsb2NrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHdpbGxfbW92ZS5hZGQob2xkX2tleSk7XG4gICAgICAgICAgICBvLS07XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKG8tLSkge1xuICAgICAgICBjb25zdCBvbGRfYmxvY2sgPSBvbGRfYmxvY2tzW29dO1xuICAgICAgICBpZiAoIW5ld19sb29rdXAuaGFzKG9sZF9ibG9jay5rZXkpKVxuICAgICAgICAgICAgZGVzdHJveShvbGRfYmxvY2ssIGxvb2t1cCk7XG4gICAgfVxuICAgIHdoaWxlIChuKVxuICAgICAgICBpbnNlcnQobmV3X2Jsb2Nrc1tuIC0gMV0pO1xuICAgIHJldHVybiBuZXdfYmxvY2tzO1xufVxuZnVuY3Rpb24gbWVhc3VyZShibG9ja3MpIHtcbiAgICBjb25zdCByZWN0cyA9IHt9O1xuICAgIGxldCBpID0gYmxvY2tzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKVxuICAgICAgICByZWN0c1tibG9ja3NbaV0ua2V5XSA9IGJsb2Nrc1tpXS5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0X3NwcmVhZF91cGRhdGUobGV2ZWxzLCB1cGRhdGVzKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge307XG4gICAgY29uc3QgdG9fbnVsbF9vdXQgPSB7fTtcbiAgICBjb25zdCBhY2NvdW50ZWRfZm9yID0geyAkJHNjb3BlOiAxIH07XG4gICAgbGV0IGkgPSBsZXZlbHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY29uc3QgbyA9IGxldmVsc1tpXTtcbiAgICAgICAgY29uc3QgbiA9IHVwZGF0ZXNbaV07XG4gICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG4pKVxuICAgICAgICAgICAgICAgICAgICB0b19udWxsX291dFtrZXldID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY291bnRlZF9mb3Jba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVba2V5XSA9IG5ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudGVkX2ZvcltrZXldID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXZlbHNbaV0gPSBuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbykge1xuICAgICAgICAgICAgICAgIGFjY291bnRlZF9mb3Jba2V5XSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdG9fbnVsbF9vdXQpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHVwZGF0ZSkpXG4gICAgICAgICAgICB1cGRhdGVba2V5XSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGdldF9zcHJlYWRfb2JqZWN0KHNwcmVhZF9wcm9wcykge1xuICAgIHJldHVybiB0eXBlb2Ygc3ByZWFkX3Byb3BzID09PSAnb2JqZWN0JyAmJiBzcHJlYWRfcHJvcHMgIT09IG51bGwgPyBzcHJlYWRfcHJvcHMgOiB7fTtcbn1cblxuY29uc3QgaW52YWxpZF9hdHRyaWJ1dGVfbmFtZV9jaGFyYWN0ZXIgPSAvW1xccydcIj4vPVxcdXtGREQwfS1cXHV7RkRFRn1cXHV7RkZGRX1cXHV7RkZGRn1cXHV7MUZGRkV9XFx1ezFGRkZGfVxcdXsyRkZGRX1cXHV7MkZGRkZ9XFx1ezNGRkZFfVxcdXszRkZGRn1cXHV7NEZGRkV9XFx1ezRGRkZGfVxcdXs1RkZGRX1cXHV7NUZGRkZ9XFx1ezZGRkZFfVxcdXs2RkZGRn1cXHV7N0ZGRkV9XFx1ezdGRkZGfVxcdXs4RkZGRX1cXHV7OEZGRkZ9XFx1ezlGRkZFfVxcdXs5RkZGRn1cXHV7QUZGRkV9XFx1e0FGRkZGfVxcdXtCRkZGRX1cXHV7QkZGRkZ9XFx1e0NGRkZFfVxcdXtDRkZGRn1cXHV7REZGRkV9XFx1e0RGRkZGfVxcdXtFRkZGRX1cXHV7RUZGRkZ9XFx1e0ZGRkZFfVxcdXtGRkZGRn1cXHV7MTBGRkZFfVxcdXsxMEZGRkZ9XS91O1xuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jbm9uY2hhcmFjdGVyXG5mdW5jdGlvbiBzcHJlYWQoYXJncykge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKTtcbiAgICBsZXQgc3RyID0gJyc7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgaWYgKGludmFsaWRfYXR0cmlidXRlX25hbWVfY2hhcmFjdGVyLnRlc3QobmFtZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHN0ciArPSBcIiBcIiArIG5hbWU7XG4gICAgICAgIGNvbnN0IGVzY2FwZWQgPSBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAucmVwbGFjZSgvXCIvZywgJyYjMzQ7JylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmIzM5OycpO1xuICAgICAgICBzdHIgKz0gXCIgXCIgKyBuYW1lICsgXCI9XCIgKyBKU09OLnN0cmluZ2lmeShlc2NhcGVkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RyO1xufVxuY29uc3QgZXNjYXBlZCA9IHtcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7JyxcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0Oydcbn07XG5mdW5jdGlvbiBlc2NhcGUoaHRtbCkge1xuICAgIHJldHVybiBTdHJpbmcoaHRtbCkucmVwbGFjZSgvW1wiJyY8Pl0vZywgbWF0Y2ggPT4gZXNjYXBlZFttYXRjaF0pO1xufVxuZnVuY3Rpb24gZWFjaChpdGVtcywgZm4pIHtcbiAgICBsZXQgc3RyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBzdHIgKz0gZm4oaXRlbXNbaV0sIGkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuY29uc3QgbWlzc2luZ19jb21wb25lbnQgPSB7XG4gICAgJCRyZW5kZXI6ICgpID0+ICcnXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVfY29tcG9uZW50KGNvbXBvbmVudCwgbmFtZSkge1xuICAgIGlmICghY29tcG9uZW50IHx8ICFjb21wb25lbnQuJCRyZW5kZXIpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzdmVsdGU6Y29tcG9uZW50JylcbiAgICAgICAgICAgIG5hbWUgKz0gJyB0aGlzPXsuLi59JztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGA8JHtuYW1lfT4gaXMgbm90IGEgdmFsaWQgU1NSIGNvbXBvbmVudC4gWW91IG1heSBuZWVkIHRvIHJldmlldyB5b3VyIGJ1aWxkIGNvbmZpZyB0byBlbnN1cmUgdGhhdCBkZXBlbmRlbmNpZXMgYXJlIGNvbXBpbGVkLCByYXRoZXIgdGhhbiBpbXBvcnRlZCBhcyBwcmUtY29tcGlsZWQgbW9kdWxlc2ApO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZnVuY3Rpb24gZGVidWcoZmlsZSwgbGluZSwgY29sdW1uLCB2YWx1ZXMpIHtcbiAgICBjb25zb2xlLmxvZyhge0BkZWJ1Z30gJHtmaWxlID8gZmlsZSArICcgJyA6ICcnfSgke2xpbmV9OiR7Y29sdW1ufSlgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2codmFsdWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgcmV0dXJuICcnO1xufVxubGV0IG9uX2Rlc3Ryb3k7XG5mdW5jdGlvbiBjcmVhdGVfc3NyX2NvbXBvbmVudChmbikge1xuICAgIGZ1bmN0aW9uICQkcmVuZGVyKHJlc3VsdCwgcHJvcHMsIGJpbmRpbmdzLCBzbG90cykge1xuICAgICAgICBjb25zdCBwYXJlbnRfY29tcG9uZW50ID0gY3VycmVudF9jb21wb25lbnQ7XG4gICAgICAgIGNvbnN0ICQkID0ge1xuICAgICAgICAgICAgb25fZGVzdHJveSxcbiAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBNYXAocGFyZW50X2NvbXBvbmVudCA/IHBhcmVudF9jb21wb25lbnQuJCQuY29udGV4dCA6IFtdKSxcbiAgICAgICAgICAgIC8vIHRoZXNlIHdpbGwgYmUgaW1tZWRpYXRlbHkgZGlzY2FyZGVkXG4gICAgICAgICAgICBvbl9tb3VudDogW10sXG4gICAgICAgICAgICBiZWZvcmVfdXBkYXRlOiBbXSxcbiAgICAgICAgICAgIGFmdGVyX3VwZGF0ZTogW10sXG4gICAgICAgICAgICBjYWxsYmFja3M6IGJsYW5rX29iamVjdCgpXG4gICAgICAgIH07XG4gICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudCh7ICQkIH0pO1xuICAgICAgICBjb25zdCBodG1sID0gZm4ocmVzdWx0LCBwcm9wcywgYmluZGluZ3MsIHNsb3RzKTtcbiAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KHBhcmVudF9jb21wb25lbnQpO1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVuZGVyOiAocHJvcHMgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgICAgICBvbl9kZXN0cm95ID0gW107XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7IGhlYWQ6ICcnLCBjc3M6IG5ldyBTZXQoKSB9O1xuICAgICAgICAgICAgY29uc3QgaHRtbCA9ICQkcmVuZGVyKHJlc3VsdCwgcHJvcHMsIHt9LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJ1bl9hbGwob25fZGVzdHJveSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgICAgICAgY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IEFycmF5LmZyb20ocmVzdWx0LmNzcykubWFwKGNzcyA9PiBjc3MuY29kZSkuam9pbignXFxuJyksXG4gICAgICAgICAgICAgICAgICAgIG1hcDogbnVsbCAvLyBUT0RPXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoZWFkOiByZXN1bHQuaGVhZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgJCRyZW5kZXJcbiAgICB9O1xufVxuZnVuY3Rpb24gYWRkX2F0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IChib29sZWFuICYmICF2YWx1ZSkpXG4gICAgICAgIHJldHVybiAnJztcbiAgICByZXR1cm4gYCAke25hbWV9JHt2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogYD0ke3R5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShlc2NhcGUodmFsdWUpKSA6IGBcIiR7dmFsdWV9XCJgfWB9YDtcbn1cbmZ1bmN0aW9uIGFkZF9jbGFzc2VzKGNsYXNzZXMpIHtcbiAgICByZXR1cm4gY2xhc3NlcyA/IGAgY2xhc3M9XCIke2NsYXNzZXN9XCJgIDogYGA7XG59XG5cbmZ1bmN0aW9uIGJpbmQoY29tcG9uZW50LCBuYW1lLCBjYWxsYmFjaykge1xuICAgIGlmIChjb21wb25lbnQuJCQucHJvcHMuaW5kZXhPZihuYW1lKSA9PT0gLTEpXG4gICAgICAgIHJldHVybjtcbiAgICBjb21wb25lbnQuJCQuYm91bmRbbmFtZV0gPSBjYWxsYmFjaztcbiAgICBjYWxsYmFjayhjb21wb25lbnQuJCQuY3R4W25hbWVdKTtcbn1cbmZ1bmN0aW9uIG1vdW50X2NvbXBvbmVudChjb21wb25lbnQsIHRhcmdldCwgYW5jaG9yKSB7XG4gICAgY29uc3QgeyBmcmFnbWVudCwgb25fbW91bnQsIG9uX2Rlc3Ryb3ksIGFmdGVyX3VwZGF0ZSB9ID0gY29tcG9uZW50LiQkO1xuICAgIGZyYWdtZW50Lm0odGFyZ2V0LCBhbmNob3IpO1xuICAgIC8vIG9uTW91bnQgaGFwcGVucyBiZWZvcmUgdGhlIGluaXRpYWwgYWZ0ZXJVcGRhdGVcbiAgICBhZGRfcmVuZGVyX2NhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3X29uX2Rlc3Ryb3kgPSBvbl9tb3VudC5tYXAocnVuKS5maWx0ZXIoaXNfZnVuY3Rpb24pO1xuICAgICAgICBpZiAob25fZGVzdHJveSkge1xuICAgICAgICAgICAgb25fZGVzdHJveS5wdXNoKC4uLm5ld19vbl9kZXN0cm95KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEVkZ2UgY2FzZSAtIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGltbWVkaWF0ZWx5LFxuICAgICAgICAgICAgLy8gbW9zdCBsaWtlbHkgYXMgYSByZXN1bHQgb2YgYSBiaW5kaW5nIGluaXRpYWxpc2luZ1xuICAgICAgICAgICAgcnVuX2FsbChuZXdfb25fZGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50LiQkLm9uX21vdW50ID0gW107XG4gICAgfSk7XG4gICAgYWZ0ZXJfdXBkYXRlLmZvckVhY2goYWRkX3JlbmRlcl9jYWxsYmFjayk7XG59XG5mdW5jdGlvbiBkZXN0cm95X2NvbXBvbmVudChjb21wb25lbnQsIGRldGFjaGluZykge1xuICAgIGlmIChjb21wb25lbnQuJCQuZnJhZ21lbnQpIHtcbiAgICAgICAgcnVuX2FsbChjb21wb25lbnQuJCQub25fZGVzdHJveSk7XG4gICAgICAgIGNvbXBvbmVudC4kJC5mcmFnbWVudC5kKGRldGFjaGluZyk7XG4gICAgICAgIC8vIFRPRE8gbnVsbCBvdXQgb3RoZXIgcmVmcywgaW5jbHVkaW5nIGNvbXBvbmVudC4kJCAoYnV0IG5lZWQgdG9cbiAgICAgICAgLy8gcHJlc2VydmUgZmluYWwgc3RhdGU/KVxuICAgICAgICBjb21wb25lbnQuJCQub25fZGVzdHJveSA9IGNvbXBvbmVudC4kJC5mcmFnbWVudCA9IG51bGw7XG4gICAgICAgIGNvbXBvbmVudC4kJC5jdHggPSB7fTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlX2RpcnR5KGNvbXBvbmVudCwga2V5KSB7XG4gICAgaWYgKCFjb21wb25lbnQuJCQuZGlydHkpIHtcbiAgICAgICAgZGlydHlfY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgIHNjaGVkdWxlX3VwZGF0ZSgpO1xuICAgICAgICBjb21wb25lbnQuJCQuZGlydHkgPSBibGFua19vYmplY3QoKTtcbiAgICB9XG4gICAgY29tcG9uZW50LiQkLmRpcnR5W2tleV0gPSB0cnVlO1xufVxuZnVuY3Rpb24gaW5pdChjb21wb25lbnQsIG9wdGlvbnMsIGluc3RhbmNlLCBjcmVhdGVfZnJhZ21lbnQsIG5vdF9lcXVhbCwgcHJvcF9uYW1lcykge1xuICAgIGNvbnN0IHBhcmVudF9jb21wb25lbnQgPSBjdXJyZW50X2NvbXBvbmVudDtcbiAgICBzZXRfY3VycmVudF9jb21wb25lbnQoY29tcG9uZW50KTtcbiAgICBjb25zdCBwcm9wcyA9IG9wdGlvbnMucHJvcHMgfHwge307XG4gICAgY29uc3QgJCQgPSBjb21wb25lbnQuJCQgPSB7XG4gICAgICAgIGZyYWdtZW50OiBudWxsLFxuICAgICAgICBjdHg6IG51bGwsXG4gICAgICAgIC8vIHN0YXRlXG4gICAgICAgIHByb3BzOiBwcm9wX25hbWVzLFxuICAgICAgICB1cGRhdGU6IG5vb3AsXG4gICAgICAgIG5vdF9lcXVhbCxcbiAgICAgICAgYm91bmQ6IGJsYW5rX29iamVjdCgpLFxuICAgICAgICAvLyBsaWZlY3ljbGVcbiAgICAgICAgb25fbW91bnQ6IFtdLFxuICAgICAgICBvbl9kZXN0cm95OiBbXSxcbiAgICAgICAgYmVmb3JlX3VwZGF0ZTogW10sXG4gICAgICAgIGFmdGVyX3VwZGF0ZTogW10sXG4gICAgICAgIGNvbnRleHQ6IG5ldyBNYXAocGFyZW50X2NvbXBvbmVudCA/IHBhcmVudF9jb21wb25lbnQuJCQuY29udGV4dCA6IFtdKSxcbiAgICAgICAgLy8gZXZlcnl0aGluZyBlbHNlXG4gICAgICAgIGNhbGxiYWNrczogYmxhbmtfb2JqZWN0KCksXG4gICAgICAgIGRpcnR5OiBudWxsXG4gICAgfTtcbiAgICBsZXQgcmVhZHkgPSBmYWxzZTtcbiAgICAkJC5jdHggPSBpbnN0YW5jZVxuICAgICAgICA/IGluc3RhbmNlKGNvbXBvbmVudCwgcHJvcHMsIChrZXksIHJldCwgdmFsdWUgPSByZXQpID0+IHtcbiAgICAgICAgICAgIGlmICgkJC5jdHggJiYgbm90X2VxdWFsKCQkLmN0eFtrZXldLCAkJC5jdHhba2V5XSA9IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICgkJC5ib3VuZFtrZXldKVxuICAgICAgICAgICAgICAgICAgICAkJC5ib3VuZFtrZXldKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVhZHkpXG4gICAgICAgICAgICAgICAgICAgIG1ha2VfZGlydHkoY29tcG9uZW50LCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSlcbiAgICAgICAgOiBwcm9wcztcbiAgICAkJC51cGRhdGUoKTtcbiAgICByZWFkeSA9IHRydWU7XG4gICAgcnVuX2FsbCgkJC5iZWZvcmVfdXBkYXRlKTtcbiAgICAkJC5mcmFnbWVudCA9IGNyZWF0ZV9mcmFnbWVudCgkJC5jdHgpO1xuICAgIGlmIChvcHRpb25zLnRhcmdldCkge1xuICAgICAgICBpZiAob3B0aW9ucy5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgJCQuZnJhZ21lbnQubChjaGlsZHJlbihvcHRpb25zLnRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICQkLmZyYWdtZW50LmMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbnRybylcbiAgICAgICAgICAgIHRyYW5zaXRpb25faW4oY29tcG9uZW50LiQkLmZyYWdtZW50KTtcbiAgICAgICAgbW91bnRfY29tcG9uZW50KGNvbXBvbmVudCwgb3B0aW9ucy50YXJnZXQsIG9wdGlvbnMuYW5jaG9yKTtcbiAgICAgICAgZmx1c2goKTtcbiAgICB9XG4gICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KHBhcmVudF9jb21wb25lbnQpO1xufVxubGV0IFN2ZWx0ZUVsZW1lbnQ7XG5pZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIFN2ZWx0ZUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHRvZG86IGltcHJvdmUgdHlwaW5nc1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy4kJC5zbG90dGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB0b2RvOiBpbXByb3ZlIHR5cGluZ3NcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHRoaXMuJCQuc2xvdHRlZFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ciwgX29sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpc1thdHRyXSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgICRkZXN0cm95KCkge1xuICAgICAgICAgICAgZGVzdHJveV9jb21wb25lbnQodGhpcywgMSk7XG4gICAgICAgICAgICB0aGlzLiRkZXN0cm95ID0gbm9vcDtcbiAgICAgICAgfVxuICAgICAgICAkb24odHlwZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFRPRE8gc2hvdWxkIHRoaXMgZGVsZWdhdGUgdG8gYWRkRXZlbnRMaXN0ZW5lcj9cbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9ICh0aGlzLiQkLmNhbGxiYWNrc1t0eXBlXSB8fCAodGhpcy4kJC5jYWxsYmFja3NbdHlwZV0gPSBbXSkpO1xuICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGNhbGxiYWNrcy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgJHNldCgpIHtcbiAgICAgICAgICAgIC8vIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2UsIGlmIGl0IGhhcyBwcm9wc1xuICAgICAgICB9XG4gICAgfTtcbn1cbmNsYXNzIFN2ZWx0ZUNvbXBvbmVudCB7XG4gICAgJGRlc3Ryb3koKSB7XG4gICAgICAgIGRlc3Ryb3lfY29tcG9uZW50KHRoaXMsIDEpO1xuICAgICAgICB0aGlzLiRkZXN0cm95ID0gbm9vcDtcbiAgICB9XG4gICAgJG9uKHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9ICh0aGlzLiQkLmNhbGxiYWNrc1t0eXBlXSB8fCAodGhpcy4kJC5jYWxsYmFja3NbdHlwZV0gPSBbXSkpO1xuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNhbGxiYWNrcy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgICRzZXQoKSB7XG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2UsIGlmIGl0IGhhcyBwcm9wc1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hfZGV2KHR5cGUsIGRldGFpbCkge1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tX2V2ZW50KHR5cGUsIGRldGFpbCkpO1xufVxuZnVuY3Rpb24gYXBwZW5kX2Rldih0YXJnZXQsIG5vZGUpIHtcbiAgICBkaXNwYXRjaF9kZXYoXCJTdmVsdGVET01JbnNlcnRcIiwgeyB0YXJnZXQsIG5vZGUgfSk7XG4gICAgYXBwZW5kKHRhcmdldCwgbm9kZSk7XG59XG5mdW5jdGlvbiBpbnNlcnRfZGV2KHRhcmdldCwgbm9kZSwgYW5jaG9yKSB7XG4gICAgZGlzcGF0Y2hfZGV2KFwiU3ZlbHRlRE9NSW5zZXJ0XCIsIHsgdGFyZ2V0LCBub2RlLCBhbmNob3IgfSk7XG4gICAgaW5zZXJ0KHRhcmdldCwgbm9kZSwgYW5jaG9yKTtcbn1cbmZ1bmN0aW9uIGRldGFjaF9kZXYobm9kZSkge1xuICAgIGRpc3BhdGNoX2RldihcIlN2ZWx0ZURPTVJlbW92ZVwiLCB7IG5vZGUgfSk7XG4gICAgZGV0YWNoKG5vZGUpO1xufVxuZnVuY3Rpb24gZGV0YWNoX2JldHdlZW5fZGV2KGJlZm9yZSwgYWZ0ZXIpIHtcbiAgICB3aGlsZSAoYmVmb3JlLm5leHRTaWJsaW5nICYmIGJlZm9yZS5uZXh0U2libGluZyAhPT0gYWZ0ZXIpIHtcbiAgICAgICAgZGV0YWNoX2RldihiZWZvcmUubmV4dFNpYmxpbmcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRldGFjaF9iZWZvcmVfZGV2KGFmdGVyKSB7XG4gICAgd2hpbGUgKGFmdGVyLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBkZXRhY2hfZGV2KGFmdGVyLnByZXZpb3VzU2libGluZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGV0YWNoX2FmdGVyX2RldihiZWZvcmUpIHtcbiAgICB3aGlsZSAoYmVmb3JlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIGRldGFjaF9kZXYoYmVmb3JlLm5leHRTaWJsaW5nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBsaXN0ZW5fZGV2KG5vZGUsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zLCBoYXNfcHJldmVudF9kZWZhdWx0LCBoYXNfc3RvcF9wcm9wYWdhdGlvbikge1xuICAgIGNvbnN0IG1vZGlmaWVycyA9IG9wdGlvbnMgPT09IHRydWUgPyBbXCJjYXB0dXJlXCJdIDogb3B0aW9ucyA/IEFycmF5LmZyb20oT2JqZWN0LmtleXMob3B0aW9ucykpIDogW107XG4gICAgaWYgKGhhc19wcmV2ZW50X2RlZmF1bHQpXG4gICAgICAgIG1vZGlmaWVycy5wdXNoKCdwcmV2ZW50RGVmYXVsdCcpO1xuICAgIGlmIChoYXNfc3RvcF9wcm9wYWdhdGlvbilcbiAgICAgICAgbW9kaWZpZXJzLnB1c2goJ3N0b3BQcm9wYWdhdGlvbicpO1xuICAgIGRpc3BhdGNoX2RldihcIlN2ZWx0ZURPTUFkZEV2ZW50TGlzdGVuZXJcIiwgeyBub2RlLCBldmVudCwgaGFuZGxlciwgbW9kaWZpZXJzIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBsaXN0ZW4obm9kZSwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoX2RldihcIlN2ZWx0ZURPTVJlbW92ZUV2ZW50TGlzdGVuZXJcIiwgeyBub2RlLCBldmVudCwgaGFuZGxlciwgbW9kaWZpZXJzIH0pO1xuICAgICAgICBkaXNwb3NlKCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGF0dHJfZGV2KG5vZGUsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICBhdHRyKG5vZGUsIGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICBkaXNwYXRjaF9kZXYoXCJTdmVsdGVET01SZW1vdmVBdHRyaWJ1dGVcIiwgeyBub2RlLCBhdHRyaWJ1dGUgfSk7XG4gICAgZWxzZVxuICAgICAgICBkaXNwYXRjaF9kZXYoXCJTdmVsdGVET01TZXRBdHRyaWJ1dGVcIiwgeyBub2RlLCBhdHRyaWJ1dGUsIHZhbHVlIH0pO1xufVxuZnVuY3Rpb24gcHJvcF9kZXYobm9kZSwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgbm9kZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICBkaXNwYXRjaF9kZXYoXCJTdmVsdGVET01TZXRQcm9wZXJ0eVwiLCB7IG5vZGUsIHByb3BlcnR5LCB2YWx1ZSB9KTtcbn1cbmZ1bmN0aW9uIGRhdGFzZXRfZGV2KG5vZGUsIHByb3BlcnR5LCB2YWx1ZSkge1xuICAgIG5vZGUuZGF0YXNldFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICBkaXNwYXRjaF9kZXYoXCJTdmVsdGVET01TZXREYXRhc2V0XCIsIHsgbm9kZSwgcHJvcGVydHksIHZhbHVlIH0pO1xufVxuZnVuY3Rpb24gc2V0X2RhdGFfZGV2KHRleHQsIGRhdGEpIHtcbiAgICBkYXRhID0gJycgKyBkYXRhO1xuICAgIGlmICh0ZXh0LmRhdGEgPT09IGRhdGEpXG4gICAgICAgIHJldHVybjtcbiAgICBkaXNwYXRjaF9kZXYoXCJTdmVsdGVET01TZXREYXRhXCIsIHsgbm9kZTogdGV4dCwgZGF0YSB9KTtcbiAgICB0ZXh0LmRhdGEgPSBkYXRhO1xufVxuY2xhc3MgU3ZlbHRlQ29tcG9uZW50RGV2IGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucyB8fCAoIW9wdGlvbnMudGFyZ2V0ICYmICFvcHRpb25zLiQkaW5saW5lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAndGFyZ2V0JyBpcyBhIHJlcXVpcmVkIG9wdGlvbmApO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgICRkZXN0cm95KCkge1xuICAgICAgICBzdXBlci4kZGVzdHJveSgpO1xuICAgICAgICB0aGlzLiRkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb21wb25lbnQgd2FzIGFscmVhZHkgZGVzdHJveWVkYCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgSHRtbFRhZywgU3ZlbHRlQ29tcG9uZW50LCBTdmVsdGVDb21wb25lbnREZXYsIFN2ZWx0ZUVsZW1lbnQsIGFkZF9hdHRyaWJ1dGUsIGFkZF9jbGFzc2VzLCBhZGRfZmx1c2hfY2FsbGJhY2ssIGFkZF9sb2NhdGlvbiwgYWRkX3JlbmRlcl9jYWxsYmFjaywgYWRkX3Jlc2l6ZV9saXN0ZW5lciwgYWRkX3RyYW5zZm9ybSwgYWZ0ZXJVcGRhdGUsIGFwcGVuZCwgYXBwZW5kX2RldiwgYXNzaWduLCBhdHRyLCBhdHRyX2RldiwgYmVmb3JlVXBkYXRlLCBiaW5kLCBiaW5kaW5nX2NhbGxiYWNrcywgYmxhbmtfb2JqZWN0LCBidWJibGUsIGNoZWNrX291dHJvcywgY2hpbGRyZW4sIGNsYWltX2VsZW1lbnQsIGNsYWltX3NwYWNlLCBjbGFpbV90ZXh0LCBjbGVhcl9sb29wcywgY29tcG9uZW50X3N1YnNjcmliZSwgY3JlYXRlRXZlbnREaXNwYXRjaGVyLCBjcmVhdGVfYW5pbWF0aW9uLCBjcmVhdGVfYmlkaXJlY3Rpb25hbF90cmFuc2l0aW9uLCBjcmVhdGVfaW5fdHJhbnNpdGlvbiwgY3JlYXRlX291dF90cmFuc2l0aW9uLCBjcmVhdGVfc2xvdCwgY3JlYXRlX3Nzcl9jb21wb25lbnQsIGN1cnJlbnRfY29tcG9uZW50LCBjdXN0b21fZXZlbnQsIGRhdGFzZXRfZGV2LCBkZWJ1ZywgZGVzdHJveV9ibG9jaywgZGVzdHJveV9jb21wb25lbnQsIGRlc3Ryb3lfZWFjaCwgZGV0YWNoLCBkZXRhY2hfYWZ0ZXJfZGV2LCBkZXRhY2hfYmVmb3JlX2RldiwgZGV0YWNoX2JldHdlZW5fZGV2LCBkZXRhY2hfZGV2LCBkaXJ0eV9jb21wb25lbnRzLCBkaXNwYXRjaF9kZXYsIGVhY2gsIGVsZW1lbnQsIGVsZW1lbnRfaXMsIGVtcHR5LCBlc2NhcGUsIGVzY2FwZWQsIGV4Y2x1ZGVfaW50ZXJuYWxfcHJvcHMsIGZpeF9hbmRfZGVzdHJveV9ibG9jaywgZml4X2FuZF9vdXRyb19hbmRfZGVzdHJveV9ibG9jaywgZml4X3Bvc2l0aW9uLCBmbHVzaCwgZ2V0Q29udGV4dCwgZ2V0X2JpbmRpbmdfZ3JvdXBfdmFsdWUsIGdldF9jdXJyZW50X2NvbXBvbmVudCwgZ2V0X3Nsb3RfY2hhbmdlcywgZ2V0X3Nsb3RfY29udGV4dCwgZ2V0X3NwcmVhZF9vYmplY3QsIGdldF9zcHJlYWRfdXBkYXRlLCBnZXRfc3RvcmVfdmFsdWUsIGdsb2JhbHMsIGdyb3VwX291dHJvcywgaGFuZGxlX3Byb21pc2UsIGlkZW50aXR5LCBpbml0LCBpbnNlcnQsIGluc2VydF9kZXYsIGludHJvcywgaW52YWxpZF9hdHRyaWJ1dGVfbmFtZV9jaGFyYWN0ZXIsIGlzX2NsaWVudCwgaXNfZnVuY3Rpb24sIGlzX3Byb21pc2UsIGxpc3RlbiwgbGlzdGVuX2RldiwgbG9vcCwgbWVhc3VyZSwgbWlzc2luZ19jb21wb25lbnQsIG1vdW50X2NvbXBvbmVudCwgbm9vcCwgbm90X2VxdWFsLCBub3csIG51bGxfdG9fZW1wdHksIG9iamVjdF93aXRob3V0X3Byb3BlcnRpZXMsIG9uRGVzdHJveSwgb25Nb3VudCwgb25jZSwgb3V0cm9fYW5kX2Rlc3Ryb3lfYmxvY2ssIHByZXZlbnRfZGVmYXVsdCwgcHJvcF9kZXYsIHJhZiwgcnVuLCBydW5fYWxsLCBzYWZlX25vdF9lcXVhbCwgc2NoZWR1bGVfdXBkYXRlLCBzZWxlY3RfbXVsdGlwbGVfdmFsdWUsIHNlbGVjdF9vcHRpb24sIHNlbGVjdF9vcHRpb25zLCBzZWxlY3RfdmFsdWUsIHNlbGYsIHNldENvbnRleHQsIHNldF9hdHRyaWJ1dGVzLCBzZXRfY3VycmVudF9jb21wb25lbnQsIHNldF9jdXN0b21fZWxlbWVudF9kYXRhLCBzZXRfZGF0YSwgc2V0X2RhdGFfZGV2LCBzZXRfaW5wdXRfdHlwZSwgc2V0X2lucHV0X3ZhbHVlLCBzZXRfbm93LCBzZXRfcmFmLCBzZXRfc3RvcmVfdmFsdWUsIHNldF9zdHlsZSwgc2V0X3N2Z19hdHRyaWJ1dGVzLCBzcGFjZSwgc3ByZWFkLCBzdG9wX3Byb3BhZ2F0aW9uLCBzdWJzY3JpYmUsIHN2Z19lbGVtZW50LCB0ZXh0LCB0aWNrLCB0aW1lX3Jhbmdlc190b19hcnJheSwgdG9fbnVtYmVyLCB0b2dnbGVfY2xhc3MsIHRyYW5zaXRpb25faW4sIHRyYW5zaXRpb25fb3V0LCB1cGRhdGVfa2V5ZWRfZWFjaCwgdmFsaWRhdGVfY29tcG9uZW50LCB2YWxpZGF0ZV9zdG9yZSwgeGxpbmtfYXR0ciB9O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2thaXNlcm1hbm4vc3ZlbHRlLWNzcy12YXJzXHJcblxyXG5leHBvcnQgY29uc3QgY3NzVmFycyA9IChub2RlLCBwcm9wcykgPT4ge1xyXG4gIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkoYC0tJHtrZXl9YCwgdmFsdWUpXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHVwZGF0ZShuZXdfcHJvcHMpIHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMobmV3X3Byb3BzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KGAtLSR7a2V5fWAsIHZhbHVlKVxyXG4gICAgICAgIGRlbGV0ZSBwcm9wc1trZXldXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChuYW1lID0+IG5vZGUuc3R5bGUucmVtb3ZlUHJvcGVydHkoYC0tJHtuYW1lfWApKVxyXG4gICAgICBwcm9wcyA9IG5ld19wcm9wc1xyXG4gICAgfSxcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDbGFzc2VzID0gY2xhc3NlcyA9PiB7XHJcbiAgbGV0IGFsbCA9IFwiXCJcclxuICBmb3IgKGxldCBjbHMgaW4gY2xhc3Nlcykge1xyXG4gICAgaWYgKGNsYXNzZXNbY2xzXSkge1xyXG4gICAgICBhbGwgPSBhbGwgKyBcIiBcIiArIGNsc1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gYWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNzc1ZhcnNcclxuIiwiPHNjcmlwdD5cclxuICBpbXBvcnQgeyBjc3NWYXJzLCBjcmVhdGVDbGFzc2VzIH0gZnJvbSBcIi4vY3NzVmFyc1wiXHJcblxyXG4gIGV4cG9ydCBsZXQgY2xhc3NOYW1lID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgb25Mb2FkXHJcbiAgZXhwb3J0IGxldCB0eXBlXHJcbiAgZXhwb3J0IGxldCBiYWNrZ3JvdW5kQ29sb3JcclxuICBleHBvcnQgbGV0IGNvbG9yXHJcbiAgZXhwb3J0IGxldCBib3JkZXJXaWR0aFxyXG4gIGV4cG9ydCBsZXQgYm9yZGVyQ29sb3JcclxuICBleHBvcnQgbGV0IGJvcmRlclN0eWxlXHJcbiAgZXhwb3J0IGxldCBfYmJcclxuXHJcbiAgbGV0IGNvbnRhaW5lckVsZW1lbnRcclxuICBsZXQgaGFzTG9hZGVkXHJcbiAgbGV0IGN1cnJlbnRDaGlsZHJlblxyXG5cclxuICAkOiBjc3NWYXJpYWJsZXMgPSB7XHJcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICBjb2xvcixcclxuICAgIGJvcmRlcldpZHRoLFxyXG4gICAgYm9yZGVyQ29sb3IsXHJcbiAgICBib3JkZXJTdHlsZSxcclxuICB9XHJcbiAgJDogY2xhc3NlcyA9IGAke2NyZWF0ZUNsYXNzZXMoY3NzVmFyaWFibGVzKX0gJHtjbGFzc05hbWV9YFxyXG5cclxuICAkOiB7XHJcbiAgICBpZiAoY29udGFpbmVyRWxlbWVudCkge1xyXG4gICAgICBfYmIuYXR0YWNoQ2hpbGRyZW4oY29udGFpbmVyRWxlbWVudClcclxuICAgICAgaWYgKCFoYXNMb2FkZWQpIHtcclxuICAgICAgICBfYmIuY2FsbChvbkxvYWQpXHJcbiAgICAgICAgaGFzTG9hZGVkID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG48L3NjcmlwdD5cclxuXHJcbnsjaWYgdHlwZSA9PT0gJ2Rpdid9XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9e2NsYXNzZXN9XHJcbiAgICBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9XHJcbiAgICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfSAvPlxyXG57OmVsc2UgaWYgdHlwZSA9PT0gJ2hlYWRlcid9XHJcbiAgPGhlYWRlclxyXG4gICAgY2xhc3M9e2NsYXNzZXN9XHJcbiAgICBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9XHJcbiAgICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfSAvPlxyXG57OmVsc2UgaWYgdHlwZSA9PT0gJ21haW4nfVxyXG4gIDxtYWluXHJcbiAgICBjbGFzcz17Y2xhc3Nlc31cclxuICAgIGJpbmQ6dGhpcz17Y29udGFpbmVyRWxlbWVudH1cclxuICAgIHVzZTpjc3NWYXJzPXtjc3NWYXJpYWJsZXN9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnZm9vdGVyJ31cclxuICA8Zm9vdGVyXHJcbiAgICBjbGFzcz17Y2xhc3Nlc31cclxuICAgIGJpbmQ6dGhpcz17Y29udGFpbmVyRWxlbWVudH1cclxuICAgIHVzZTpjc3NWYXJzPXtjc3NWYXJpYWJsZXN9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnYXNpZGUnfVxyXG4gIDxhc2lkZVxyXG4gICAgY2xhc3M9e2NsYXNzZXN9XHJcbiAgICBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9XHJcbiAgICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfSAvPlxyXG57OmVsc2UgaWYgdHlwZSA9PT0gJ3N1bW1hcnknfVxyXG4gIDxzdW1tYXJ5XHJcbiAgICBjbGFzcz17Y2xhc3Nlc31cclxuICAgIGJpbmQ6dGhpcz17Y29udGFpbmVyRWxlbWVudH1cclxuICAgIHVzZTpjc3NWYXJzPXtjc3NWYXJpYWJsZXN9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnZGV0YWlscyd9XHJcbiAgPGRldGFpbHNcclxuICAgIGNsYXNzPXtjbGFzc2VzfVxyXG4gICAgYmluZDp0aGlzPXtjb250YWluZXJFbGVtZW50fVxyXG4gICAgdXNlOmNzc1ZhcnM9e2Nzc1ZhcmlhYmxlc30gLz5cclxuezplbHNlIGlmIHR5cGUgPT09ICdhcnRpY2xlJ31cclxuICA8YXJ0aWNsZVxyXG4gICAgY2xhc3M9e2NsYXNzZXN9XHJcbiAgICBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9XHJcbiAgICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfSAvPlxyXG57OmVsc2UgaWYgdHlwZSA9PT0gJ25hdid9XHJcbiAgPG5hdlxyXG4gICAgY2xhc3M9e2NsYXNzZXN9XHJcbiAgICBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9XHJcbiAgICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfSAvPlxyXG57OmVsc2UgaWYgdHlwZSA9PT0gJ21hcmsnfVxyXG4gIDxtYXJrXHJcbiAgICBjbGFzcz17Y2xhc3Nlc31cclxuICAgIGJpbmQ6dGhpcz17Y29udGFpbmVyRWxlbWVudH1cclxuICAgIHVzZTpjc3NWYXJzPXtjc3NWYXJpYWJsZXN9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnZmlndXJlJ31cclxuICA8ZmlndXJlXHJcbiAgICBjbGFzcz17Y2xhc3Nlc31cclxuICAgIGJpbmQ6dGhpcz17Y29udGFpbmVyRWxlbWVudH1cclxuICAgIHVzZTpjc3NWYXJzPXtjc3NWYXJpYWJsZXN9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnZmlnY2FwdGlvbid9XHJcbiAgPGZpZ2NhcHRpb25cclxuICAgIGNsYXNzPXtjbGFzc2VzfVxyXG4gICAgYmluZDp0aGlzPXtjb250YWluZXJFbGVtZW50fVxyXG4gICAgdXNlOmNzc1ZhcnM9e2Nzc1ZhcmlhYmxlc30gLz5cclxuezplbHNlIGlmIHR5cGUgPT09ICdwYXJhZ3JhcGgnfVxyXG4gIDxwIGNsYXNzPXtjbGFzc2VzfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IHVzZTpjc3NWYXJzPXtjc3NWYXJpYWJsZXN9IC8+XHJcbnsvaWZ9XHJcblxyXG48c3R5bGU+XHJcbiAgLmJhY2tncm91bmRDb2xvciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kQ29sb3IpO1xyXG4gIH1cclxuXHJcbiAgLmNvbG9yIHtcclxuICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XHJcbiAgfVxyXG5cclxuICAuYm9yZGVyQ29sb3Ige1xyXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXJDb2xvcik7XHJcbiAgfVxyXG5cclxuICAuYm9yZGVyV2lkdGgge1xyXG4gICAgYm9yZGVyLXdpZHRoOiB2YXIoLS1ib3JkZXJXaWR0aCk7XHJcbiAgfVxyXG5cclxuICAuYm9yZGVyU3R5bGUge1xyXG4gICAgYm9yZGVyLXN0eWxlOiB2YXIoLS1ib3JkZXJTdHlsZSk7XHJcbiAgfVxyXG48L3N0eWxlPlxyXG4iLCJleHBvcnQgY29uc3QgYnVpbGRTdHlsZSA9IHN0eWxlcyA9PiB7XHJcbiAgbGV0IHN0ciA9IFwiXCJcclxuICBmb3IgKGxldCBzIGluIHN0eWxlcykge1xyXG4gICAgaWYgKHN0eWxlc1tzXSkge1xyXG4gICAgICBzdHIgKz0gYCR7c306ICR7c3R5bGVzW3NdfTsgYFxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gc3RyXHJcbn1cclxuIiwiPHNjcmlwdD5cclxuICBpbXBvcnQgeyBidWlsZFN0eWxlIH0gZnJvbSBcIi4vYnVpbGRTdHlsZVwiXHJcblxyXG4gIGV4cG9ydCBsZXQgdGV4dCA9IFwiXCJcclxuICBleHBvcnQgbGV0IGNsYXNzTmFtZSA9IFwiXCJcclxuXHJcbiAgZXhwb3J0IGxldCBmb3JtYXR0aW5nVGFnID0gXCJcIlxyXG5cclxuICBleHBvcnQgbGV0IGZvbnQgPSBcIlwiXHJcbiAgZXhwb3J0IGxldCB0ZXh0QWxpZ24gPSBcIlwiXHJcbiAgZXhwb3J0IGxldCB2ZXJ0aWNhbEFsaWduID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgY29sb3IgPSBcIlwiXHJcblxyXG4gIGV4cG9ydCBsZXQgX2JiXHJcblxyXG4gIGxldCBzdHlsZSA9IFwiXCJcclxuXHJcbiAgY29uc3QgaXNUYWcgPSB0YWcgPT4gKGZvcm1hdHRpbmdUYWcgfHwgXCJcIikuaW5kZXhPZih0YWcpID4gLTFcclxuXHJcbiAgJDoge1xyXG4gICAgc3R5bGUgPSBidWlsZFN0eWxlKHtcclxuICAgICAgZm9udCxcclxuICAgICAgdmVydGljYWxBbGlnbixcclxuICAgICAgY29sb3IsXHJcbiAgICAgIFwidGV4dC1hbGlnblwiOiB0ZXh0QWxpZ24sXHJcbiAgICAgIFwidmVydGljYWwtYWxpZ25cIjogdmVydGljYWxBbGlnbixcclxuICAgIH0pXHJcbiAgfVxyXG48L3NjcmlwdD5cclxuXHJcbnsjaWYgaXNUYWcoJ25vbmUnKX1cclxuICA8c3Bhbj57dGV4dH08L3NwYW4+XHJcbns6ZWxzZSBpZiBpc1RhZygnPGI+Jyl9XHJcbiAgPGIgY2xhc3M9e2NsYXNzTmFtZX0ge3N0eWxlfT57dGV4dH08L2I+XHJcbns6ZWxzZSBpZiBpc1RhZygnPHN0cm9uZz4nKX1cclxuICA8c3Ryb25nIGNsYXNzPXtjbGFzc05hbWV9IHtzdHlsZX0+e3RleHR9PC9zdHJvbmc+XHJcbns6ZWxzZSBpZiBpc1RhZygnPGk+Jyl9XHJcbiAgPGkgY2xhc3M9e2NsYXNzTmFtZX0ge3N0eWxlfT57dGV4dH08L2k+XHJcbns6ZWxzZSBpZiBpc1RhZygnPGVtPicpfVxyXG4gIDxlbSBjbGFzcz17Y2xhc3NOYW1lfSB7c3R5bGV9Pnt0ZXh0fTwvZW0+XHJcbns6ZWxzZSBpZiBpc1RhZygnPG1hcms+Jyl9XHJcbiAgPG1hcmsgY2xhc3M9e2NsYXNzTmFtZX0ge3N0eWxlfT57dGV4dH08L21hcms+XHJcbns6ZWxzZSBpZiBpc1RhZygnPHNtYWxsPicpfVxyXG4gIDxzbWFsbCBjbGFzcz17Y2xhc3NOYW1lfSB7c3R5bGV9Pnt0ZXh0fTwvc21hbGw+XHJcbns6ZWxzZSBpZiBpc1RhZygnPGRlbD4nKX1cclxuICA8ZGVsIGNsYXNzPXtjbGFzc05hbWV9IHtzdHlsZX0+e3RleHR9PC9kZWw+XHJcbns6ZWxzZSBpZiBpc1RhZygnPGlucz4nKX1cclxuICA8aW5zIGNsYXNzPXtjbGFzc05hbWV9IHtzdHlsZX0+e3RleHR9PC9pbnM+XHJcbns6ZWxzZSBpZiBpc1RhZygnPHN1Yj4nKX1cclxuICA8c3ViIGNsYXNzPXtjbGFzc05hbWV9IHtzdHlsZX0+e3RleHR9PC9zdWI+XHJcbns6ZWxzZSBpZiBpc1RhZygnPHN1cD4nKX1cclxuICA8c3VwIGNsYXNzPXtjbGFzc05hbWV9IHtzdHlsZX0+e3RleHR9PC9zdXA+XHJcbns6ZWxzZX17dGV4dH17L2lmfVxyXG4iLCI8c2NyaXB0PlxyXG4gIGV4cG9ydCBsZXQgY2xhc3NOYW1lID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgdHlwZVxyXG4gIGV4cG9ydCBsZXQgX2JiXHJcblxyXG4gIGxldCBjb250YWluZXJFbGVtZW50XHJcblxyXG4gICQ6IGNvbnRhaW5lckVsZW1lbnQgJiYgX2JiLmF0dGFjaENoaWxkcmVuKGNvbnRhaW5lckVsZW1lbnQpXHJcbjwvc2NyaXB0PlxyXG5cclxueyNpZiB0eXBlID09PSAnaDEnfVxyXG4gIDxoMSBjbGFzcz17Y2xhc3NOYW1lfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnaDInfVxyXG4gIDxoMiBjbGFzcz17Y2xhc3NOYW1lfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnaDMnfVxyXG4gIDxoMyBjbGFzcz17Y2xhc3NOYW1lfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnaDQnfVxyXG4gIDxoNCBjbGFzcz17Y2xhc3NOYW1lfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnaDUnfVxyXG4gIDxoNSBjbGFzcz17Y2xhc3NOYW1lfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IC8+XHJcbns6ZWxzZSBpZiB0eXBlID09PSAnaDYnfVxyXG4gIDxoNiBjbGFzcz17Y2xhc3NOYW1lfSBiaW5kOnRoaXM9e2NvbnRhaW5lckVsZW1lbnR9IC8+XHJcbnsvaWZ9XHJcbiIsIjxzY3JpcHQ+XHJcbiAgZXhwb3J0IGxldCB2YWx1ZSA9IFwiXCJcclxuICBleHBvcnQgbGV0IGNsYXNzTmFtZSA9IFwiXCJcclxuICBleHBvcnQgbGV0IHR5cGUgPSBcInRleHRcIlxyXG5cclxuICBleHBvcnQgbGV0IF9iYlxyXG5cclxuICBsZXQgYWN0dWFsVmFsdWUgPSBcIlwiXHJcblxyXG4gIGNvbnN0IG9uY2hhbmdlID0gZXYgPT4ge1xyXG4gICAgaWYgKF9iYikge1xyXG4gICAgICBfYmIuc2V0U3RhdGVGcm9tQmluZGluZyhfYmIucHJvcHMudmFsdWUsIGV2LnRhcmdldC52YWx1ZSlcclxuICAgIH1cclxuICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPGlucHV0IGNsYXNzPXtjbGFzc05hbWV9IHt0eXBlfSB7dmFsdWV9IG9uOmNoYW5nZT17b25jaGFuZ2V9IC8+XHJcbiIsIjxzY3JpcHQ+XHJcbiAgZXhwb3J0IGxldCB2YWx1ZSA9IFwiXCJcclxuICBleHBvcnQgbGV0IGNsYXNzTmFtZSA9IFwiXCJcclxuXHJcbiAgZXhwb3J0IGxldCBfYmJcclxuXHJcbiAgbGV0IGFjdHVhbFZhbHVlID0gXCJcIlxyXG4gIGxldCBzZWxlY3RFbGVtZW50XHJcblxyXG4gICQ6IHNlbGVjdEVsZW1lbnQgJiYgX2JiLmF0dGFjaENoaWxkcmVuKHNlbGVjdEVsZW1lbnQpXHJcblxyXG4gIGNvbnN0IG9uY2hhbmdlID0gZXYgPT4ge1xyXG4gICAgaWYgKF9iYikge1xyXG4gICAgICBfYmIuc2V0U3RhdGVGcm9tQmluZGluZyhfYmIucHJvcHMudmFsdWUsIGV2LnRhcmdldC52YWx1ZSlcclxuICAgIH1cclxuICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNlbGVjdFxyXG4gIGNsYXNzPXtjbGFzc05hbWV9XHJcbiAge3ZhbHVlfVxyXG4gIG9uOmNoYW5nZT17b25jaGFuZ2V9XHJcbiAgYmluZDp0aGlzPXtzZWxlY3RFbGVtZW50fSAvPlxyXG4iLCI8c2NyaXB0PlxyXG4gIGV4cG9ydCBsZXQgdmFsdWUgPSBcIlwiXHJcbiAgZXhwb3J0IGxldCB0ZXh0ID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgX2JiXHJcblxyXG4gIGxldCBhY3R1YWxWYWx1ZVxyXG4gIGxldCBhY3R1YWxUZXh0XHJcblxyXG4gICQ6IGFjdHVhbFZhbHVlID0gdmFsdWUgfHwgdGV4dCB8fCBcIlwiXHJcbiAgJDogYWN0dWFsVGV4dCA9IHRleHQgfHwgdmFsdWUgfHwgXCJcIlxyXG48L3NjcmlwdD5cclxuXHJcbjxvcHRpb24gdmFsdWU9e2FjdHVhbFZhbHVlfT57YWN0dWFsVGV4dH08L29wdGlvbj5cclxuIiwiPHNjcmlwdD5cclxuICBpbXBvcnQgeyBjc3NWYXJzLCBjcmVhdGVDbGFzc2VzIH0gZnJvbSBcIi4vY3NzVmFyc1wiXHJcbiAgaW1wb3J0IHsgYnVpbGRTdHlsZSB9IGZyb20gXCIuL2J1aWxkU3R5bGVcIlxyXG4gIGV4cG9ydCBsZXQgY2xhc3NOYW1lID0gXCJkZWZhdWx0XCJcclxuICBleHBvcnQgbGV0IGRpc2FibGVkID0gZmFsc2VcclxuICBleHBvcnQgbGV0IGNvbnRlbnRUZXh0XHJcbiAgZXhwb3J0IGxldCBvbkNsaWNrXHJcbiAgZXhwb3J0IGxldCBiYWNrZ3JvdW5kXHJcbiAgZXhwb3J0IGxldCBjb2xvclxyXG4gIGV4cG9ydCBsZXQgYm9yZGVyXHJcbiAgZXhwb3J0IGxldCBwYWRkaW5nXHJcbiAgZXhwb3J0IGxldCBob3ZlckNvbG9yXHJcbiAgZXhwb3J0IGxldCBob3ZlckJhY2tncm91bmRcclxuICBleHBvcnQgbGV0IGhvdmVyQm9yZGVyXHJcblxyXG4gIGV4cG9ydCBsZXQgX2JiXHJcbiAgbGV0IHRoZUJ1dHRvblxyXG4gIGxldCBjc3NWYXJpYWJsZXNcclxuICBsZXQgYnV0dG9uU3R5bGVzXHJcblxyXG4gIGxldCBjdXN0b21Ib3ZlckNvbG9yQ2xhc3NcclxuICBsZXQgY3VzdG9tSG92ZXJCb3JkZXJDbGFzc1xyXG4gIGxldCBjdXN0b21Ib3ZlckJhY2tDbGFzc1xyXG5cclxuICBsZXQgY3VzdG9tQ2xhc3NlcyA9IFwiXCJcclxuXHJcbiAgJDogaWYgKF9iYi5wcm9wcy5fY2hpbGRyZW4gJiYgX2JiLnByb3BzLl9jaGlsZHJlbi5sZW5ndGggPiAwKVxyXG4gICAgdGhlQnV0dG9uICYmIF9iYi5hdHRhY2hDaGlsZHJlbih0aGVCdXR0b24pXHJcblxyXG4gICQ6IHtcclxuICAgIGNzc1ZhcmlhYmxlcyA9IHtcclxuICAgICAgaG92ZXJDb2xvcixcclxuICAgICAgaG92ZXJCb3JkZXIsXHJcbiAgICAgIGhvdmVyQmFja2dyb3VuZCxcclxuICAgICAgYmFja2dyb3VuZCxcclxuICAgICAgY29sb3IsXHJcbiAgICAgIGJvcmRlcixcclxuICAgIH1cclxuXHJcbiAgICBidXR0b25TdHlsZXMgPSBidWlsZFN0eWxlKHtcclxuICAgICAgcGFkZGluZyxcclxuICAgIH0pXHJcblxyXG4gICAgY3VzdG9tQ2xhc3NlcyA9IGNyZWF0ZUNsYXNzZXMoe1xyXG4gICAgICBob3ZlckNvbG9yLFxyXG4gICAgICBob3ZlckJvcmRlcixcclxuICAgICAgaG92ZXJCYWNrZ3JvdW5kLFxyXG4gICAgICBiYWNrZ3JvdW5kLFxyXG4gICAgICBib3JkZXIsXHJcbiAgICAgIGNvbG9yLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0IGNsaWNrSGFuZGxlciA9ICgpID0+IHtcclxuICAgIF9iYi5jYWxsKG9uQ2xpY2spXHJcbiAgfVxyXG48L3NjcmlwdD5cclxuXHJcbjxidXR0b25cclxuICBiaW5kOnRoaXM9e3RoZUJ1dHRvbn1cclxuICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfVxyXG4gIGNsYXNzPVwie2NsYXNzTmFtZX1cclxuICB7Y3VzdG9tQ2xhc3Nlc31cIlxyXG4gIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBmYWxzZX1cclxuICBvbjpjbGljaz17Y2xpY2tIYW5kbGVyfVxyXG4gIHN0eWxlPXtidXR0b25TdHlsZXN9PlxyXG4gIHsjaWYgIV9iYi5wcm9wcy5fY2hpbGRyZW4gfHwgX2JiLnByb3BzLl9jaGlsZHJlbi5sZW5ndGggPT09IDB9XHJcbiAgICB7Y29udGVudFRleHR9XHJcbiAgey9pZn1cclxuPC9idXR0b24+XHJcblxyXG48c3R5bGU+XHJcbiAgLmRlZmF1bHQge1xyXG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgICBwYWRkaW5nOiAwLjRlbTtcclxuICAgIG1hcmdpbjogMCAwIDAuNWVtIDA7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcclxuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgIGNvbG9yOiAjMzMzO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAuZGVmYXVsdDphY3RpdmUge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcclxuICB9XHJcblxyXG4gIC5kZWZhdWx0OmZvY3VzIHtcclxuICAgIGJvcmRlci1jb2xvcjogIzY2NjtcclxuICB9XHJcblxyXG4gIC5ib3JkZXIge1xyXG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xyXG4gIH1cclxuXHJcbiAgLmNvbG9yIHtcclxuICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XHJcbiAgfVxyXG5cclxuICAuYmFja2dyb3VuZCB7XHJcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTtcclxuICB9XHJcblxyXG4gIC5ob3ZlckJvcmRlcjpob3ZlciB7XHJcbiAgICBib3JkZXI6IHZhcigtLWhvdmVyQm9yZGVyKTtcclxuICB9XHJcblxyXG4gIC5ob3ZlckNvbG9yOmhvdmVyIHtcclxuICAgIGNvbG9yOiB2YXIoLS1ob3ZlckNvbG9yKTtcclxuICB9XHJcblxyXG4gIC5ob3ZlckJhY2s6aG92ZXIge1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0taG92ZXJCYWNrZ3JvdW5kKTtcclxuICB9XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQ+XHJcbiAgaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi9CdXR0b24uc3ZlbHRlXCJcclxuXHJcbiAgZXhwb3J0IGxldCB1c2VybmFtZUxhYmVsID0gXCJVc2VybmFtZVwiXHJcbiAgZXhwb3J0IGxldCBwYXNzd29yZExhYmVsID0gXCJQYXNzd29yZFwiXHJcbiAgZXhwb3J0IGxldCBsb2dpbkJ1dHRvbkxhYmVsID0gXCJMb2dpblwiXHJcbiAgZXhwb3J0IGxldCBsb2dpblJlZGlyZWN0ID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgbG9nbyA9IFwiXCJcclxuICBleHBvcnQgbGV0IGJ1dHRvbkNsYXNzID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgaW5wdXRDbGFzcyA9IFwiXCJcclxuXHJcbiAgZXhwb3J0IGxldCBfYmJcclxuXHJcbiAgbGV0IHVzZXJuYW1lID0gXCJcIlxyXG4gIGxldCBwYXNzd29yZCA9IFwiXCJcclxuICBsZXQgYnVzeSA9IGZhbHNlXHJcbiAgbGV0IGluY29ycmVjdCA9IGZhbHNlXHJcbiAgbGV0IF9sb2dvID0gXCJcIlxyXG4gIGxldCBfYnV0dG9uQ2xhc3MgPSBcIlwiXHJcbiAgbGV0IF9pbnB1dENsYXNzID0gXCJcIlxyXG5cclxuICAkOiB7XHJcbiAgICBfbG9nbyA9IF9iYi5yZWxhdGl2ZVVybChsb2dvKVxyXG4gICAgX2J1dHRvbkNsYXNzID0gYnV0dG9uQ2xhc3MgfHwgXCJkZWZhdWx0LWJ1dHRvblwiXHJcbiAgICBfaW5wdXRDbGFzcyA9IGlucHV0Q2xhc3MgfHwgXCJkZWZhdWx0LWlucHV0XCJcclxuICB9XHJcblxyXG4gIGNvbnN0IGxvZ2luID0gKCkgPT4ge1xyXG4gICAgYnVzeSA9IHRydWVcclxuICAgIF9iYi5hcGlcclxuICAgICAgLnBvc3QoXCIvYXBpL2F1dGhlbnRpY2F0ZVwiLCB7IHVzZXJuYW1lLCBwYXNzd29yZCB9KVxyXG4gICAgICAudGhlbihyID0+IHtcclxuICAgICAgICBidXN5ID0gZmFsc2VcclxuICAgICAgICBpZiAoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHIuanNvbigpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGluY29ycmVjdCA9IHRydWVcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiYnVkaWJhc2U6dXNlclwiLCBKU09OLnN0cmluZ2lmeSh1c2VyKSlcclxuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuPC9zY3JpcHQ+XHJcblxyXG48ZGl2IGNsYXNzPVwicm9vdFwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG5cclxuICAgIHsjaWYgX2xvZ299XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbWcgc3JjPXtfbG9nb30gYWx0PVwibG9nb1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgey9pZn1cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb290XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt1c2VybmFtZUxhYmVsfTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxyXG4gICAgICAgIDxpbnB1dCBiaW5kOnZhbHVlPXt1c2VybmFtZX0gdHlwZT1cInRleHRcIiBjbGFzcz17X2lucHV0Q2xhc3N9IC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57cGFzc3dvcmRMYWJlbH08L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cclxuICAgICAgICA8aW5wdXQgYmluZDp2YWx1ZT17cGFzc3dvcmR9IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPXtfaW5wdXRDbGFzc30gLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibG9naW4tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICA8YnV0dG9uIGRpc2FibGVkPXtidXN5fSBvbjpjbGljaz17bG9naW59IGNsYXNzPXtfYnV0dG9uQ2xhc3N9PlxyXG4gICAgICAgIHtsb2dpbkJ1dHRvbkxhYmVsfVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIHsjaWYgaW5jb3JyZWN0fVxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5jb3JyZWN0LWRldGFpbHMtcGFuZWxcIj5JbmNvcnJlY3QgdXNlcm5hbWUgb3IgcGFzc3dvcmQ8L2Rpdj5cclxuICAgIHsvaWZ9XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48c3R5bGU+XHJcbiAgLnJvb3Qge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgZGlzcGxheTogZ3JpZDtcclxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogW2xlZnRdIDFmciBbbWlkZGxlXSBhdXRvIFtyaWdodF0gMWZyO1xyXG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBbdG9wXSAxZnIgW2NlbnRlcl0gYXV0byBbYm90dG9tXSAxZnI7XHJcbiAgfVxyXG5cclxuICAuY29udGVudCB7XHJcbiAgICBncmlkLWNvbHVtbi1zdGFydDogbWlkZGxlO1xyXG4gICAgZ3JpZC1yb3ctc3RhcnQ6IGNlbnRlcjtcclxuICAgIHdpZHRoOiA0MDBweDtcclxuICB9XHJcblxyXG4gIC5sb2dvLWNvbnRhaW5lciB7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG4gIH1cclxuXHJcbiAgLmxvZ28tY29udGFpbmVyID4gaW1nIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICB9XHJcblxyXG4gIC5sb2dpbi1idXR0b24tY29udGFpbmVyIHtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxuICB9XHJcblxyXG4gIC5pbmNvcnJlY3QtZGV0YWlscy1wYW5lbCB7XHJcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcbiAgICBib3JkZXItd2lkdGg6IDFweDtcclxuICAgIGJvcmRlci1jb2xvcjogbWFyb29uO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgY29sb3I6IG1hcm9vbjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IG1pc3R5cm9zZTtcclxuICB9XHJcblxyXG4gIC5mb3JtLXJvb3Qge1xyXG4gICAgZGlzcGxheTogZ3JpZDtcclxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogW2xhYmVsXSBhdXRvIFtjb250cm9sXSAxZnI7IC8qIFtvdmVyZmxvd10gYXV0bzsqL1xyXG4gIH1cclxuXHJcbiAgLmxhYmVsIHtcclxuICAgIGdyaWQtY29sdW1uLXN0YXJ0OiBsYWJlbDtcclxuICAgIHBhZGRpbmc6IDVweCAxMHB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICB9XHJcbiAgLmNvbnRyb2wge1xyXG4gICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IGNvbnRyb2w7XHJcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcclxuICB9XHJcblxyXG4gIC5kZWZhdWx0LWlucHV0IHtcclxuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xyXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xyXG4gICAgcGFkZGluZzogMC40ZW07XHJcbiAgICBtYXJnaW46IDAgMCAwLjVlbSAwO1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICB9XHJcblxyXG4gIC5kZWZhdWx0LWJ1dHRvbiB7XHJcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcclxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcclxuICAgIHBhZGRpbmc6IDAuNGVtO1xyXG4gICAgbWFyZ2luOiAwIDAgMC41ZW0gMDtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xyXG4gICAgY29sb3I6ICMzMzM7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0O1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICB9XHJcblxyXG4gIC5kZWZhdWx0LWJ1dHRvbjphY3RpdmUge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcclxuICB9XHJcblxyXG4gIC5kZWZhdWx0LWJ1dHRvbjpmb2N1cyB7XHJcbiAgICBib3JkZXItY29sb3I6ICM2NjY7XHJcbiAgfVxyXG48L3N0eWxlPlxyXG4iLCJleHBvcnQgZGVmYXVsdCAoeyByZWNvcmRzIH0pID0+XHJcbiAgcmVjb3Jkcy5tYXAociA9PiAoe1xyXG4gICAgbmFtZTogYFNhdmUgJHtyLm5hbWV9IEJ1dHRvbmAsXHJcbiAgICBwcm9wczogYnV0dG9uUHJvcHMociksXHJcbiAgfSkpXHJcblxyXG5jb25zdCBidXR0b25Qcm9wcyA9IHJlY29yZCA9PiAoe1xyXG4gIF9jb21wb25lbnQ6IFwiQGJ1ZGliYXNlL3N0YW5kYXJkLWNvbXBvbmVudHMvYnV0dG9uXCIsXHJcbiAgX2NoaWxkcmVuOiBbXHJcbiAgICB7XHJcbiAgICAgIF9jb21wb25lbnQ6IFwiQGJ1ZGliYXNlL3N0YW5kYXJkLWNvbXBvbmVudHMvdGV4dFwiLFxyXG4gICAgICB0ZXh0OiBgU2F2ZSAke3JlY29yZC5uYW1lfWAsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgb25DbGljazogW1xyXG4gICAge1xyXG4gICAgICBcIiMjZXZlbnRIYW5kbGVyVHlwZVwiOiBcIlNhdmUgUmVjb3JkXCIsXHJcbiAgICAgIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICBzdGF0ZVBhdGg6IGAke3JlY29yZC5uYW1lfWAsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbiIsIjxzY3JpcHQ+XHJcbiAgaW1wb3J0IHsgY3NzVmFycywgY3JlYXRlQ2xhc3NlcyB9IGZyb20gXCIuL2Nzc1ZhcnNcIlxyXG5cclxuICBleHBvcnQgbGV0IHVybCA9IFwiXCJcclxuICBleHBvcnQgbGV0IHRleHQgPSBcIlwiXHJcbiAgZXhwb3J0IGxldCBvcGVuSW5OZXdUYWIgPSBmYWxzZVxyXG4gIGV4cG9ydCBsZXQgY29sb3JcclxuICBleHBvcnQgbGV0IGhvdmVyQ29sb3JcclxuICBleHBvcnQgbGV0IHVuZGVybGluZSA9IGZhbHNlXHJcbiAgZXhwb3J0IGxldCBmb250U2l6ZVxyXG5cclxuICBleHBvcnQgbGV0IF9iYlxyXG5cclxuICBsZXQgYW5jaG9yRWxlbWVudFxyXG5cclxuICAkOiBhbmNob3JFbGVtZW50ICYmICF0ZXh0ICYmIF9iYi5hdHRhY2hDaGlsZHJlbihhbmNob3JFbGVtZW50KVxyXG4gICQ6IHRhcmdldCA9IG9wZW5Jbk5ld1RhYiA/IFwiX2JsYW5rXCIgOiBcIl9zZWxmXCJcclxuICAkOiBjc3NWYXJpYWJsZXMgPSB7XHJcbiAgICBob3ZlckNvbG9yLFxyXG4gICAgY29sb3IsXHJcbiAgICB0ZXh0RGVjb3JhdGlvbjogdW5kZXJsaW5lID8gXCJ1bmRlcmxpbmVcIiA6IFwibm9uZVwiLFxyXG4gICAgZm9udFNpemUsXHJcbiAgfVxyXG4gICQ6IGNsYXNzZXMgPSBjcmVhdGVDbGFzc2VzKGNzc1ZhcmlhYmxlcylcclxuPC9zY3JpcHQ+XHJcblxyXG48YVxyXG4gIGhyZWY9e3VybH1cclxuICBiaW5kOnRoaXM9e2FuY2hvckVsZW1lbnR9XHJcbiAgY2xhc3M9e2NsYXNzZXN9XHJcbiAge3RhcmdldH1cclxuICB1c2U6Y3NzVmFycz17Y3NzVmFyaWFibGVzfT5cclxuICB7dGV4dH1cclxuPC9hPlxyXG5cclxuPHN0eWxlPlxyXG4gIC5jb2xvciB7XHJcbiAgICBjb2xvcjogdmFyKC0tY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgLmhvdmVyQ29sb3I6aG92ZXIge1xyXG4gICAgY29sb3I6IHZhcigtLWNvbG9yKTtcclxuICB9XHJcblxyXG4gIC50ZXh0RGVjb3JhdGlvbiB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IHZhcigtLXRleHREZWNvcmF0aW9uKTtcclxuICB9XHJcblxyXG4gIC5mb250U2l6ZSB7XHJcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnRTaXplKTtcclxuICB9XHJcbjwvc3R5bGU+XHJcbiIsIjxzY3JpcHQ+XHJcbiAgaW1wb3J0IHsgYnVpbGRTdHlsZSB9IGZyb20gXCIuL2J1aWxkU3R5bGVcIlxyXG5cclxuICBleHBvcnQgbGV0IGNsYXNzTmFtZSA9IFwiXCJcclxuICBleHBvcnQgbGV0IHVybCA9IFwiXCJcclxuICBleHBvcnQgbGV0IGRlc2NyaXB0aW9uID0gXCJcIlxyXG4gIGV4cG9ydCBsZXQgaGVpZ2h0XHJcbiAgZXhwb3J0IGxldCB3aWR0aFxyXG5cclxuICAkOiBzdHlsZSA9IGJ1aWxkU3R5bGUoeyBoZWlnaHQsIHdpZHRoIH0pXHJcbjwvc2NyaXB0PlxyXG5cclxuPGltZyBjbGFzcz17Y2xhc3NOYW1lfSB7c3R5bGV9IHNyYz17dXJsfSBhbHQ9e2Rlc2NyaXB0aW9ufSAvPlxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxJQUFJLEdBQUcsR0FBRztBQUNuQixBQWVBLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRTtJQUNiLE9BQU8sRUFBRSxFQUFFLENBQUM7Q0FDZjtBQUNELFNBQVMsWUFBWSxHQUFHO0lBQ3BCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QjtBQUNELFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRTtJQUNsQixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3BCO0FBQ0QsU0FBUyxXQUFXLENBQUMsS0FBSyxFQUFFO0lBQ3hCLE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDO0NBQ3RDO0FBQ0QsU0FBUyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsS0FBSyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztDQUNqRztBQUNELEFBb0RBLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRTtJQUMxQixPQUFPLEtBQUssSUFB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
|