Skip to content

fix(cors): permitir *.vercel.app nas edge functions#39

Merged
adm01-debug merged 1 commit into
mainfrom
claude/cors-allow-vercel
May 21, 2026
Merged

fix(cors): permitir *.vercel.app nas edge functions#39
adm01-debug merged 1 commit into
mainfrom
claude/cors-allow-vercel

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 21, 2026

Problema

Catálogo aparece vazio (0 itens) quando o app é acessado pela URL de preview do Vercel (we-dream-big-git-*.vercel.app). Tudo funciona em promogifts.com.br.

Causa identificada nos logs da edge function external-db-bridge:

WARNING [cors] origin: https://we-dream-big-git-main-juca1.vercel.app
                origin_allowed: false

O allowlist em supabase/functions/_shared/cors.ts cobre lovable.app, lovableproject.com, atomicabr.com.br e localhost, mas não Vercel. Resultado: o navegador bloqueia o preflight antes de qualquer chamada chegar à função.

Fix

Adiciona um pattern para *.vercel.app em ALLOWED_ORIGIN_PATTERNS:

  /^https:\/\/[a-z0-9-]+\.atomicabr\.com\.br$/i,
+ /^https:\/\/[a-z0-9-]+\.vercel\.app$/i,
  /^http:\/\/localhost(?::\d+)?$/i,

Produção (promogifts.com.br) não é afetada — já estava na lista exata.

⚠️ Após o merge

As edge functions precisam ser re-deployadas para o novo cors.ts chegar em runtime. O workflow Deploy Edge Functions faz isso automaticamente em push para main que toca supabase/functions/**, mas depende do secret SUPABASE_ACCESS_TOKEN estar configurado em GitHub Actions. Se ainda não estiver, o deploy do CI vai falhar — nesse caso, fazer deploy manual via Supabase CLI ou configurar o token.

https://claude.ai/code/session_01CUVPfuj5W2dNtPNPAL7iA7


Generated by Claude Code


Summary by cubic

Allow *.vercel.app in edge function CORS to fix blocked requests on Vercel preview deployments. This restores the catalog and other edge-function-backed features on preview sites; production remains unchanged.

  • Bug Fixes

    • Added a *.vercel.app regex to ALLOWED_ORIGIN_PATTERNS in supabase/functions/_shared/cors.ts.
    • Resolves preflight blocks from Vercel preview origins that led to empty catalog responses.
  • Migration

    • Redeploy edge functions for the change to take effect.
    • The “Deploy Edge Functions” CI workflow will handle this on pushes to main if SUPABASE_ACCESS_TOKEN is set; otherwise deploy via the Supabase CLI.

Written for commit 6cd37ef. Summary will update on new commits. Review in cubic

Summary by CodeRabbit

Release Notes

  • New Features
    • Suporte para aplicações hospedadas no Vercel. Aplicações deployadas em domínios *.vercel.app agora são aceitas pelo mecanismo de validação de origens do backend. Isso permite que aplicações hospedadas nesta plataforma possam fazer requisições para os serviços sem problemas de CORS, aumentando significativamente a compatibilidade e flexibilidade nas integrações com aplicações terceirizadas.

Review Change Stack

Catalog and other edge-function-backed features returned no data on
Vercel preview deploys (e.g. we-dream-big-git-main-juca1.vercel.app)
because the shared CORS allowlist only covered lovable.app, lovableproject.com,
atomicabr.com.br and localhost. Browsers blocked the preflight before any
request reached the function — visible in logs as
cors_preflight_warn with origin_allowed: false.

Production (promogifts.com.br) is unaffected since it is in the exact
allowlist already.

Requires edge functions to be redeployed for the change to take effect.

https://claude.ai/code/session_01CUVPfuj5W2dNtPNPAL7iA7
@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
we-dream-big Ready Ready Preview, Comment May 21, 2026 6:26pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 21, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 486b15a7-a7b2-4919-abf7-1db5a1d74a4c

📥 Commits

Reviewing files that changed from the base of the PR and between d206897 and 6cd37ef.

📒 Files selected for processing (1)
  • supabase/functions/_shared/cors.ts

Walkthrough

Adicionado padrão regex para permitir requisições com Origin: *.vercel.app na validação CORS. Essa origem agora passa na verificação isAllowedOrigin e é refletida no header Access-Control-Allow-Origin para respostas preflight e normais.

Changes

Validação CORS para Vercel

Layer / File(s) Summary
Padrão CORS para Vercel Deployments
supabase/functions/_shared/cors.ts
Padrão ^https:\/\/[a-z0-9-]+\.vercel\.app$/i adicionado a ALLOWED_ORIGIN_PATTERNS, permitindo que requisições de deployments Vercel (staging/preview/produção) sejam consideradas "allowed" e tenham seu Origin refletido em Access-Control-Allow-Origin.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/cors-allow-vercel

Comment @coderabbitai help to get the list of available commands and usage tips.

@supabase
Copy link
Copy Markdown

supabase Bot commented May 21, 2026

Updates to Preview Branch (claude/cors-allow-vercel) ↗︎

Deployments Status Updated
Database Thu, 21 May 2026 18:26:34 UTC
Services Thu, 21 May 2026 18:26:34 UTC
APIs Thu, 21 May 2026 18:26:34 UTC

Tasks are run on every commit but only new migration files are pushed.
Close and reopen this PR if you want to apply changes from existing seed or migration files.

Tasks Status Updated
Configurations Thu, 21 May 2026 18:26:46 UTC
Migrations Thu, 21 May 2026 18:27:03 UTC
Seeding ⏸️ Thu, 21 May 2026 18:26:16 UTC
Edge Functions ⏸️ Thu, 21 May 2026 18:26:16 UTC

❌ Branch Error • Thu, 21 May 2026 18:27:04 UTC

ERROR: syntax error at or near "LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIEdJRlRTIFNUT1JFIC0gUkxTIENPTSBPUkdBTklaQVRJT05TIChNVUxUSS1URU5BTlQpCi0tIEFwbGljYSBSb3cgTGV2ZWwgU2VjdXJpdHkgYmFzZWFkbyBlbSBPcmdhbml6YXRpb25zCi0tIERhdGE6IDAzLzAxLzIwMjUKLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIEd1YXJkOiB0aGlzIGVudGlyZSBtaWdyYXRpb24gaXMgd3JhcHBlZCBpbiBhIERPIGJsb2NrIHNvIGl0Ci0tIGV4aXRzIGNsZWFubHkgd2hlbiBwdWJsaWMub3JnYW5pemF0aW9ucyBkb2Vzbid0IGV4aXN0IHlldC4KLS0gT24gYSBmcmVzaCBTdXBhYmFzZSBQcmV2aWV3IEJyYW5jaCB0aGF0IHJlcGxheXMgYWxsIG1pZ3JhdGlvbnMKLS0gZnJvbSBzY3JhdGNoLCBvcmdhbml6YXRpb25zIGlzIGNyZWF0ZWQgbGF0ZXIgaW4gdGhlIHNlcXVlbmNlLgotLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkRPICRvdXRlciQKQkVHSU4KICBJRiBOT1QgRVhJU1RTICgKICAgIFNFTEVDVCAxIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcwogICAgV0hFUkUgdGFibGVfc2NoZW1hID0gJ3B1YmxpYycgQU5EIHRhYmxlX25hbWUgPSAnb3JnYW5pemF0aW9ucycKICApIFRIRU4KICAgIFJBSVNFIE5PVElDRSAnTWlncmF0aW9uIDIwMjUwMTAzXzAyX3Jsc19vcmdhbml6YXRpb25zIHNraXBwZWQ6IHB1YmxpYy5vcmdhbml6YXRpb25zIGRvZXMgbm90IGV4aXN0IHlldC4nOwogICAgUkVUVVJOOwogIEVORCBJRjsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTogQURJQ0lPTkFSIG9yZ2FuaXphdGlvbl9pZCBOQVMgVEFCRUxBUyBQUklOQ0lQQUlTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5jYXRlZ29yaWVzCiAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgb3JnYW5pemF0aW9uX2lkIFVVSUQgUkVGRVJFTkNFUyBwdWJsaWMub3JnYW5pemF0aW9ucyhpZCkgT04gREVMRVRFIENBU0NBREU7CiAgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X2NhdGVnb3JpZXNfb3JnIE9OIHB1YmxpYy5jYXRlZ29yaWVzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5zdXBwbGllcnMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfc3VwcGxpZXJzX29yZyBPTiBwdWJsaWMuc3VwcGxpZXJzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5wcm9kdWN0cwogICAgQUREIENPTFVNTiBJRiBOT1QgRVhJU1RTIG9yZ2FuaXphdGlvbl9pZCBVVUlEIFJFRkVSRU5DRVMgcHVibGljLm9yZ2FuaXphdGlvbnMoaWQpIE9OIERFTEVURSBDQVNDQURFOwogIENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9wcm9kdWN0c19vcmcgT04gcHVibGljLnByb2R1Y3RzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5xdW90ZXMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfcXVvdGVzX29yZyBPTiBwdWJsaWMucXVvdGVzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5vcmRlcnMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfb3JkZXJzX29yZyBPTiBwdWJsaWMub3JkZXJzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5iaXRyaXhfY2xpZW50cwogICAgQUREIENPTFVNTiBJRiBOT1QgRVhJU1RTIG9yZ2FuaXphdGlvbl9pZCBVVUlEIFJFRkVSRU5DRVMgcHVibGljLm9yZ2FuaXphdGlvbnMoaWQpIE9OIERFTEVURSBDQVNDQURFOwogIENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9iaXRyaXhfY2xpZW50c19vcmcgT04gcHVibGljLmJpdHJpeF9jbGllbnRzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzCiAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgb3JnYW5pemF0aW9uX2lkIFVVSUQgUkVGRVJFTkNFUyBwdWJsaWMub3JnYW5pemF0aW9ucyhpZCkgT04gREVMRVRFIENBU0NBREU7CiAgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X21vY2t1cF9qb2JzX29yZyBPTiBwdWJsaWMubW9ja3VwX2dlbmVyYXRpb25fam9icyhvcmdhbml6YXRpb25faWQpOwoKICBBTFRFUiBUQUJMRSBwdWJsaWMuY29sbGVjdGlvbnMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfY29sbGVjdGlvbnNfb3JnIE9OIHB1YmxpYy5jb2xsZWN0aW9ucyhvcmdhbml6YXRpb25faWQpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAyOiBGVU7Dh8ODTyBIRUxQRVIgLSBWZXJpZmljYXIgc2UgdXNlciBwZXJ0ZW5jZSDDoCBvcmcKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdfaWQgVVVJRCkKICBSRVRVUk5TIEJPT0xFQU4gQVMgJGZuJAogIEJFR0lOCiAgICBSRVRVUk4gRVhJU1RTICgKICAgICAgU0VMRUNUIDEKICAgICAgRlJPTSBwdWJsaWMudXNlcl9vcmdhbml6YXRpb25zCiAgICAgIFdIRVJFIG9yZ2FuaXphdGlvbl9pZCA9IG9yZ19pZAogICAgICAgIEFORCB1c2VyX2lkID0gYXV0aC51aWQoKQogICAgKTsKICBFTkQ7CiAgJGZuJCBMQU5HVUFHRSBwbHBnc3FsIFNFQ1VSSVRZIERFRklORVIgU1RBQkxFOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAzOiBBUExJQ0FSIFJMUyBFTSBUT0RBUyBBUyBUQUJFTEFTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5jYXRlZ29yaWVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLnN1cHBsaWVycyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5wcm9kdWN0cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5wcm9kdWN0X3ZhcmlhbnRzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLnF1b3RlcyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5xdW90ZV9pdGVtcyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5vcmRlcnMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBBTFRFUiBUQUJMRSBwdWJsaWMub3JkZXJfaXRlbXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBJRiBFWElTVFMgKFNFTEVDVCAxIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWE9J3B1YmxpYycgQU5EIHRhYmxlX25hbWU9J3BheW1lbnRzJykgVEhFTgogICAgQUxURVIgVEFCTEUgcHVibGljLnBheW1lbnRzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgRU5EIElGOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5iaXRyaXhfY2xpZW50cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLmdlbmVyYXRlZF9tb2NrdXBzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLmNvbGxlY3Rpb25zIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLmNvbGxlY3Rpb25fcHJvZHVjdHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBBTFRFUiBUQUJMRSBwdWJsaWMucGVyc29uYWxpemF0aW9uX3RlY2huaXF1ZXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBBTFRFUiBUQUJMRSBwdWJsaWMubm90aWZpY2F0aW9ucyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5mZWF0dXJlX2ZsYWdzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLnN5c3RlbV9zZXR0aW5ncyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSA0OiBQT0xJQ0lFUyAtIENBVEVHT1JJRVMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X2NhdGVnb3JpZXMiIE9OIHB1YmxpYy5jYXRlZ29yaWVzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfY2F0ZWdvcmllcyIKICAgIE9OIHB1YmxpYy5jYXRlZ29yaWVzIEZPUiBTRUxFQ1QgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy51c2VyX2lzX29yZ19tZW1iZXIob3JnYW5pemF0aW9uX2lkKSk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX2FkbWluc19jcmVhdGVfY2F0ZWdvcmllcyIgT04gcHVibGljLmNhdGVnb3JpZXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19jcmVhdGVfY2F0ZWdvcmllcyIKICAgIE9OIHB1YmxpYy5jYXRlZ29yaWVzIEZPUiBJTlNFUlQgVE8gYXV0aGVudGljYXRlZAogICAgV0lUSCBDSEVDSyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX3VwZGF0ZV9jYXRlZ29yaWVzIiBPTiBwdWJsaWMuY2F0ZWdvcmllczsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX3VwZGF0ZV9jYXRlZ29yaWVzIgogICAgT04gcHVibGljLmNhdGVnb3JpZXMgRk9SIFVQREFURSBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgV0lUSCBDSEVDSyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX2RlbGV0ZV9jYXRlZ29yaWVzIiBPTiBwdWJsaWMuY2F0ZWdvcmllczsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX2RlbGV0ZV9jYXRlZ29yaWVzIgogICAgT04gcHVibGljLmNhdGVnb3JpZXMgRk9SIERFTEVURSBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgNTogUE9MSUNJRVMgLSBTVVBQTElFUlMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X3N1cHBsaWVycyIgT04gcHVibGljLnN1cHBsaWVyczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X3N1cHBsaWVycyIKICAgIE9OIHB1YmxpYy5zdXBwbGllcnMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX21hbmFnZV9zdXBwbGllcnMiIE9OIHB1YmxpYy5zdXBwbGllcnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19tYW5hZ2Vfc3VwcGxpZXJzIgogICAgT04gcHVibGljLnN1cHBsaWVycyBGT1IgQUxMIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMuaXNfb3JnX293bmVyX29yX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpCiAgICBXSVRIIENIRUNLIChwdWJsaWMuaXNfb3JnX293bmVyX29yX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSA2OiBQT0xJQ0lFUyAtIFBST0RVQ1RTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfdmlld19wcm9kdWN0cyIgT04gcHVibGljLnByb2R1Y3RzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfcHJvZHVjdHMiCiAgICBPTiBwdWJsaWMucHJvZHVjdHMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX21hbmFnZV9wcm9kdWN0cyIgT04gcHVibGljLnByb2R1Y3RzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19hZG1pbnNfbWFuYWdlX3Byb2R1Y3RzIgogICAgT04gcHVibGljLnByb2R1Y3RzIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSkKICAgIFdJVEggQ0hFQ0sgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDc6IFBPTElDSUVTIC0gUFJPRFVDVF9WQVJJQU5UUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfdmFyaWFudHMiIE9OIHB1YmxpYy5wcm9kdWN0X3ZhcmlhbnRzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfdmFyaWFudHMiCiAgICBPTiBwdWJsaWMucHJvZHVjdF92YXJpYW50cyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5wcm9kdWN0cwogICAgICAgIFdIRVJFIGlkID0gcHJvZHVjdF92YXJpYW50cy5wcm9kdWN0X2lkCiAgICAgICAgICBBTkQgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX2FkbWluc19tYW5hZ2VfdmFyaWFudHMiIE9OIHB1YmxpYy5wcm9kdWN0X3ZhcmlhbnRzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19hZG1pbnNfbWFuYWdlX3ZhcmlhbnRzIgogICAgT04gcHVibGljLnByb2R1Y3RfdmFyaWFudHMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAoCiAgICAgIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMucHJvZHVjdHMKICAgICAgICBXSEVSRSBpZCA9IHByb2R1Y3RfdmFyaWFudHMucHJvZHVjdF9pZAogICAgICAgICAgQU5EIHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKQogICAgICApCiAgICApCiAgICBXSVRIIENIRUNLICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5wcm9kdWN0cwogICAgICAgIFdIRVJFIGlkID0gcHJvZHVjdF92YXJpYW50cy5wcm9kdWN0X2lkCiAgICAgICAgICBBTkQgcHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDg6IFBPTElDSUVTIC0gUVVPVEVTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfdmlld19xdW90ZXMiIE9OIHB1YmxpYy5xdW90ZXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19xdW90ZXMiCiAgICBPTiBwdWJsaWMucXVvdGVzIEZPUiBTRUxFQ1QgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy51c2VyX2lzX29yZ19tZW1iZXIob3JnYW5pemF0aW9uX2lkKSk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfY3JlYXRlX3F1b3RlcyIgT04gcHVibGljLnF1b3RlczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc19jcmVhdGVfcXVvdGVzIgogICAgT04gcHVibGljLnF1b3RlcyBGT1IgSU5TRVJUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFdJVEggQ0hFQ0sgKHB1YmxpYy51c2VyX2lzX29yZ19tZW1iZXIob3JnYW5pemF0aW9uX2lkKSk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfdXBkYXRlX293bl9xdW90ZXMiIE9OIHB1YmxpYy5xdW90ZXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdXBkYXRlX293bl9xdW90ZXMiCiAgICBPTiBwdWJsaWMucXVvdGVzIEZPUiBVUERBVEUgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgQU5EIChjcmVhdGVkX2J5ID0gYXV0aC51aWQoKSBPUiBwdWJsaWMuaXNfb3JnX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpCiAgICApOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19hZG1pbnNfZGVsZXRlX3F1b3RlcyIgT04gcHVibGljLnF1b3RlczsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX2RlbGV0ZV9xdW90ZXMiCiAgICBPTiBwdWJsaWMucXVvdGVzIEZPUiBERUxFVEUgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDk6IFBPTElDSUVTIC0gUVVPVEVfSVRFTVMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X3F1b3RlX2l0ZW1zIiBPTiBwdWJsaWMucXVvdGVfaXRlbXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19xdW90ZV9pdGVtcyIKICAgIE9OIHB1YmxpYy5xdW90ZV9pdGVtcyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5xdW90ZXMKICAgICAgICBXSEVSRSBpZCA9IHF1b3RlX2l0ZW1zLnF1b3RlX2lkCiAgICAgICAgICBBTkQgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfbWFuYWdlX3F1b3RlX2l0ZW1zIiBPTiBwdWJsaWMucXVvdGVfaXRlbXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfbWFuYWdlX3F1b3RlX2l0ZW1zIgogICAgT04gcHVibGljLnF1b3RlX2l0ZW1zIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLnF1b3RlcwogICAgICAgIFdIRVJFIGlkID0gcXVvdGVfaXRlbXMucXVvdGVfaWQKICAgICAgICAgIEFORCAoY3JlYXRlZF9ieSA9IGF1dGgudWlkKCkgT1IgcHVibGljLmlzX29yZ19hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgICApCiAgICApCiAgICBXSVRIIENIRUNLICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5xdW90ZXMKICAgICAgICBXSEVSRSBpZCA9IHF1b3RlX2l0ZW1zLnF1b3RlX2lkCiAgICAgICAgICBBTkQgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDEwOiBQT0xJQ0lFUyAtIE9SREVSUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfb3JkZXJzIiBPTiBwdWJsaWMub3JkZXJzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfb3JkZXJzIgogICAgT04gcHVibGljLm9yZGVycyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX2NyZWF0ZV9vcmRlcnMiIE9OIHB1YmxpYy5vcmRlcnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfY3JlYXRlX29yZGVycyIKICAgIE9OIHB1YmxpYy5vcmRlcnMgRk9SIElOU0VSVCBUTyBhdXRoZW50aWNhdGVkCiAgICBXSVRIIENIRUNLIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3VwZGF0ZV9vd25fb3JkZXJzIiBPTiBwdWJsaWMub3JkZXJzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3VwZGF0ZV9vd25fb3JkZXJzIgogICAgT04gcHVibGljLm9yZGVycyBGT1IgVVBEQVRFIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgIEFORCAoY3JlYXRlZF9ieSA9IGF1dGgudWlkKCkgT1IgcHVibGljLmlzX29yZ19hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX2RlbGV0ZV9vcmRlcnMiIE9OIHB1YmxpYy5vcmRlcnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19kZWxldGVfb3JkZXJzIgogICAgT04gcHVibGljLm9yZGVycyBGT1IgREVMRVRFIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMuaXNfb3JnX293bmVyX29yX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxMTogUE9MSUNJRVMgLSBPUkRFUl9JVEVNUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfb3JkZXJfaXRlbXMiIE9OIHB1YmxpYy5vcmRlcl9pdGVtczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X29yZGVyX2l0ZW1zIgogICAgT04gcHVibGljLm9yZGVyX2l0ZW1zIEZPUiBTRUxFQ1QgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLm9yZGVycwogICAgICAgIFdIRVJFIGlkID0gb3JkZXJfaXRlbXMub3JkZXJfaWQKICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgKQogICAgKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc19tYW5hZ2Vfb3JkZXJfaXRlbXMiIE9OIHB1YmxpYy5vcmRlcl9pdGVtczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc19tYW5hZ2Vfb3JkZXJfaXRlbXMiCiAgICBPTiBwdWJsaWMub3JkZXJfaXRlbXMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAoCiAgICAgIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMub3JkZXJzCiAgICAgICAgV0hFUkUgaWQgPSBvcmRlcl9pdGVtcy5vcmRlcl9pZAogICAgICAgICAgQU5EIChjcmVhdGVkX2J5ID0gYXV0aC51aWQoKSBPUiBwdWJsaWMuaXNfb3JnX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpCiAgICAgICkKICAgICkKICAgIFdJVEggQ0hFQ0sgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLm9yZGVycwogICAgICAgIFdIRVJFIGlkID0gb3JkZXJfaXRlbXMub3JkZXJfaWQKICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgKQogICAgKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTI6IFBPTElDSUVTIC0gUEFZTUVOVFMgKGd1YXJkZWQ6IHRhYmxlIG1heSBub3QgZXhpc3QgeWV0KQogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBJRiBFWElTVFMgKFNFTEVDVCAxIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWE9J3B1YmxpYycgQU5EIHRhYmxlX25hbWU9J3BheW1lbnRzJykgVEhFTgogICAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X3BheW1lbnRzIiBPTiBwdWJsaWMucGF5bWVudHM7CiAgICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X3BheW1lbnRzIgogICAgICBPTiBwdWJsaWMucGF5bWVudHMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICAgIFVTSU5HICgKICAgICAgICBFWElTVFMgKAogICAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMub3JkZXJzCiAgICAgICAgICBXSEVSRSBpZCA9IHBheW1lbnRzLm9yZGVyX2lkCiAgICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgICApCiAgICAgICk7CgogICAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX21hbmFnZV9wYXltZW50cyIgT04gcHVibGljLnBheW1lbnRzOwogICAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19tYW5hZ2VfcGF5bWVudHMiCiAgICAgIE9OIHB1YmxpYy5wYXltZW50cyBGT1IgQUxMIFRPIGF1dGhlbnRpY2F0ZWQKICAgICAgVVNJTkcgKAogICAgICAgIEVYSVNUUyAoCiAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5vcmRlcnMKICAgICAgICAgIFdIRVJFIGlkID0gcGF5bWVudHMub3JkZXJfaWQKICAgICAgICAgICAgQU5EIHB1YmxpYy5pc19vcmdfYWRtaW4ob3JnYW5pemF0aW9uX2lkKQogICAgICAgICkKICAgICAgKQogICAgICBXSVRIIENIRUNLICgKICAgICAgICBFWElTVFMgKAogICAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMub3JkZXJzCiAgICAgICAgICBXSEVSRSBpZCA9IHBheW1lbnRzLm9yZGVyX2lkCiAgICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgICApCiAgICAgICk7CiAgRU5EIElGOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxMzogUE9MSUNJRVMgLSBCSVRSSVhfQ0xJRU5UUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfY2xpZW50cyIgT04gcHVibGljLmJpdHJpeF9jbGllbnRzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfY2xpZW50cyIKICAgIE9OIHB1YmxpYy5iaXRyaXhfY2xpZW50cyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19hZG1pbnNfbWFuYWdlX2NsaWVudHMiIE9OIHB1YmxpYy5iaXRyaXhfY2xpZW50czsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX21hbmFnZV9jbGllbnRzIgogICAgT04gcHVibGljLmJpdHJpeF9jbGllbnRzIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSkKICAgIFdJVEggQ0hFQ0sgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDE0OiBQT0xJQ0lFUyAtIE1PQ0tVUFMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X21vY2t1cF9qb2JzIiBPTiBwdWJsaWMubW9ja3VwX2dlbmVyYXRpb25fam9iczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X21vY2t1cF9qb2JzIgogICAgT04gcHVibGljLm1vY2t1cF9nZW5lcmF0aW9uX2pvYnMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc19jcmVhdGVfbW9ja3VwX2pvYnMiIE9OIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX2NyZWF0ZV9tb2NrdXBfam9icyIKICAgIE9OIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzIEZPUiBJTlNFUlQgVE8gYXV0aGVudGljYXRlZAogICAgV0lUSCBDSEVDSyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X2dlbmVyYXRlZF9tb2NrdXBzIiBPTiBwdWJsaWMuZ2VuZXJhdGVkX21vY2t1cHM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19nZW5lcmF0ZWRfbW9ja3VwcyIKICAgIE9OIHB1YmxpYy5nZW5lcmF0ZWRfbW9ja3VwcyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzCiAgICAgICAgV0hFUkUgaWQgPSBnZW5lcmF0ZWRfbW9ja3Vwcy5qb2JfaWQKICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgKQogICAgKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTU6IFBPTElDSUVTIC0gQ09MTEVDVElPTlMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X2NvbGxlY3Rpb25zIiBPTiBwdWJsaWMuY29sbGVjdGlvbnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19jb2xsZWN0aW9ucyIKICAgIE9OIHB1YmxpYy5jb2xsZWN0aW9ucyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19hZG1pbnNfbWFuYWdlX2NvbGxlY3Rpb25zIiBPTiBwdWJsaWMuY29sbGVjdGlvbnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19tYW5hZ2VfY29sbGVjdGlvbnMiCiAgICBPTiBwdWJsaWMuY29sbGVjdGlvbnMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgV0lUSCBDSEVDSyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTY6IFBPTElDSUVTIC0gUEVSU09OQUxJWkFUSU9OX1RFQ0hOSVFVRVMgKEdMT0JBTCkKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJhbnlvbmVfdmlld190ZWNobmlxdWVzIiBPTiBwdWJsaWMucGVyc29uYWxpemF0aW9uX3RlY2huaXF1ZXM7CiAgQ1JFQVRFIFBPTElDWSAiYW55b25lX3ZpZXdfdGVjaG5pcXVlcyIKICAgIE9OIHB1YmxpYy5wZXJzb25hbGl6YXRpb25fdGVjaG5pcXVlcyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChpc19hY3RpdmUgPSB0cnVlKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJhZG1pbnNfbWFuYWdlX3RlY2huaXF1ZXMiIE9OIHB1YmxpYy5wZXJzb25hbGl6YXRpb25fdGVjaG5pcXVlczsKICBDUkVBVEUgUE9MSUNZICJhZG1pbnNfbWFuYWdlX3RlY2huaXF1ZXMiCiAgICBPTiBwdWJsaWMucGVyc29uYWxpemF0aW9uX3RlY2huaXF1ZXMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAoCiAgICAgIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMudXNlcl9vcmdhbml6YXRpb25zCiAgICAgICAgV0hFUkUgdXNlcl9pZCA9IGF1dGgudWlkKCkKICAgICAgICAgIEFORCByb2xlIElOICgnb3duZXInLCAnYWRtaW4nKQogICAgICApCiAgICApOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxNzogUE9MSUNJRVMgLSBOT1RJRklDQVRJT05TIChVU0VSLVNDT1BFRCkKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJ1c2Vyc192aWV3X293bl9ub3RpZmljYXRpb25zIiBPTiBwdWJsaWMubm90aWZpY2F0aW9uczsKICBDUkVBVEUgUE9MSUNZICJ1c2Vyc192aWV3X293bl9ub3RpZmljYXRpb25zIgogICAgT04gcHVibGljLm5vdGlmaWNhdGlvbnMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAodXNlcl9pZCA9IGF1dGgudWlkKCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgInVzZXJzX3VwZGF0ZV9vd25fbm90aWZpY2F0aW9ucyIgT04gcHVibGljLm5vdGlmaWNhdGlvbnM7CiAgQ1JFQVRFIFBPTElDWSAidXNlcnNfdXBkYXRlX293bl9ub3RpZmljYXRpb25zIgogICAgT04gcHVibGljLm5vdGlmaWNhdGlvbnMgRk9SIFVQREFURSBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAodXNlcl9pZCA9IGF1dGgudWlkKCkpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxODogUE9MSUNJRVMgLSBTWVNURU0gVEFCTEVTIChBRE1JTiBPTkxZKQogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgImFkbWluc192aWV3X2ZlYXR1cmVfZmxhZ3MiIE9OIHB1YmxpYy5mZWF0dXJlX2ZsYWdzOwogIENSRUFURSBQT0xJQ1kgImFkbWluc192aWV3X2ZlYXR1cmVfZmxhZ3MiCiAgICBPTiBwdWJsaWMuZmVhdHVyZV9mbGFncyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy51c2VyX29yZ2FuaXphdGlvbnMKICAgICAgICBXSEVSRSB1c2VyX2lkID0gYXV0aC51aWQoKQogICAgICAgICAgQU5EIHJvbGUgSU4gKCdvd25lcicsICdhZG1pbicpCiAgICAgICkKICAgICk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAiYWRtaW5zX21hbmFnZV9zeXN0ZW1fc2V0dGluZ3MiIE9OIHB1YmxpYy5zeXN0ZW1fc2V0dGluZ3M7CiAgQ1JFQVRFIFBPTElDWSAiYWRtaW5zX21hbmFnZV9zeXN0ZW1fc2V0dGluZ3MiCiAgICBPTiBwdWJsaWMuc3lzdGVtX3NldHRpbmdzIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLnVzZXJfb3JnYW5pemF0aW9ucwogICAgICAgIFdIRVJFIHVzZXJfaWQgPSBhdXRoLnVpZCgpCiAgICAgICAgICBBTkQgcm9sZSBJTiAoJ293bmVyJywgJ2FkbWluJykKICAgICAgKQogICAgKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTk6IEdSQU5UUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBHUkFOVCBTRUxFQ1QgT04gcHVibGljLmNhdGVnb3JpZXMgVE8gYXV0aGVudGljYXRlZDsKICBHUkFOVCBTRUxFQ1QgT04gcHVibGljLnN1cHBsaWVycyBUTyBhdXRoZW50aWNhdGVkOwogIEdSQU5UIFNFTEVDVCBPTiBwdWJsaWMucHJvZHVjdHMgVE8gYXV0aGVudGljYXRlZDsKICBHUkFOVCBTRUxFQ1QgT04gcHVibGljLnF1b3RlcyBUTyBhdXRoZW50aWNhdGVkOwogIEdSQU5UIFNFTEVDVCBPTiBwdWJsaWMub3JkZXJzIFRPIGF1dGhlbnRpY2F0ZWQ7CiAgSUYgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgV0hFUkUgdGFibGVfc2NoZW1hPSdwdWJsaWMnIEFORCB0YWJsZV9uYW1lPSdwYXltZW50cycpIFRIRU4KICAgIEdSQU5UIFNFTEVDVCBPTiBwdWJsaWMucGF5bWVudHMgVE8gYXV0aGVudGljYXRlZDsKICBFTkQgSUY7CgogIFJBSVNFIE5PVElDRSAnTWlncmF0aW9uIDIwMjUwMTAzXzAyX3Jsc19vcmdhbml6YXRpb25zIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5Lic7CkVORCAkb3V0ZXIkOwo" (SQLSTATE 42601)
At statement: 0
LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIEdJRlRTIFNUT1JFIC0gUkxTIENPTSBPUkdBTklaQVRJT05TIChNVUxUSS1URU5BTlQpCi0tIEFwbGljYSBSb3cgTGV2ZWwgU2VjdXJpdHkgYmFzZWFkbyBlbSBPcmdhbml6YXRpb25zCi0tIERhdGE6IDAzLzAxLzIwMjUKLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIEd1YXJkOiB0aGlzIGVudGlyZSBtaWdyYXRpb24gaXMgd3JhcHBlZCBpbiBhIERPIGJsb2NrIHNvIGl0Ci0tIGV4aXRzIGNsZWFubHkgd2hlbiBwdWJsaWMub3JnYW5pemF0aW9ucyBkb2Vzbid0IGV4aXN0IHlldC4KLS0gT24gYSBmcmVzaCBTdXBhYmFzZSBQcmV2aWV3IEJyYW5jaCB0aGF0IHJlcGxheXMgYWxsIG1pZ3JhdGlvbnMKLS0gZnJvbSBzY3JhdGNoLCBvcmdhbml6YXRpb25zIGlzIGNyZWF0ZWQgbGF0ZXIgaW4gdGhlIHNlcXVlbmNlLgotLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkRPICRvdXRlciQKQkVHSU4KICBJRiBOT1QgRVhJU1RTICgKICAgIFNFTEVDVCAxIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcwogICAgV0hFUkUgdGFibGVfc2NoZW1hID0gJ3B1YmxpYycgQU5EIHRhYmxlX25hbWUgPSAnb3JnYW5pemF0aW9ucycKICApIFRIRU4KICAgIFJBSVNFIE5PVElDRSAnTWlncmF0aW9uIDIwMjUwMTAzXzAyX3Jsc19vcmdhbml6YXRpb25zIHNraXBwZWQ6IHB1YmxpYy5vcmdhbml6YXRpb25zIGRvZXMgbm90IGV4aXN0IHlldC4nOwogICAgUkVUVVJOOwogIEVORCBJRjsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTogQURJQ0lPTkFSIG9yZ2FuaXphdGlvbl9pZCBOQVMgVEFCRUxBUyBQUklOQ0lQQUlTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5jYXRlZ29yaWVzCiAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgb3JnYW5pemF0aW9uX2lkIFVVSUQgUkVGRVJFTkNFUyBwdWJsaWMub3JnYW5pemF0aW9ucyhpZCkgT04gREVMRVRFIENBU0NBREU7CiAgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X2NhdGVnb3JpZXNfb3JnIE9OIHB1YmxpYy5jYXRlZ29yaWVzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5zdXBwbGllcnMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfc3VwcGxpZXJzX29yZyBPTiBwdWJsaWMuc3VwcGxpZXJzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5wcm9kdWN0cwogICAgQUREIENPTFVNTiBJRiBOT1QgRVhJU1RTIG9yZ2FuaXphdGlvbl9pZCBVVUlEIFJFRkVSRU5DRVMgcHVibGljLm9yZ2FuaXphdGlvbnMoaWQpIE9OIERFTEVURSBDQVNDQURFOwogIENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9wcm9kdWN0c19vcmcgT04gcHVibGljLnByb2R1Y3RzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5xdW90ZXMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfcXVvdGVzX29yZyBPTiBwdWJsaWMucXVvdGVzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5vcmRlcnMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfb3JkZXJzX29yZyBPTiBwdWJsaWMub3JkZXJzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5iaXRyaXhfY2xpZW50cwogICAgQUREIENPTFVNTiBJRiBOT1QgRVhJU1RTIG9yZ2FuaXphdGlvbl9pZCBVVUlEIFJFRkVSRU5DRVMgcHVibGljLm9yZ2FuaXphdGlvbnMoaWQpIE9OIERFTEVURSBDQVNDQURFOwogIENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9iaXRyaXhfY2xpZW50c19vcmcgT04gcHVibGljLmJpdHJpeF9jbGllbnRzKG9yZ2FuaXphdGlvbl9pZCk7CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzCiAgICBBREQgQ09MVU1OIElGIE5PVCBFWElTVFMgb3JnYW5pemF0aW9uX2lkIFVVSUQgUkVGRVJFTkNFUyBwdWJsaWMub3JnYW5pemF0aW9ucyhpZCkgT04gREVMRVRFIENBU0NBREU7CiAgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X21vY2t1cF9qb2JzX29yZyBPTiBwdWJsaWMubW9ja3VwX2dlbmVyYXRpb25fam9icyhvcmdhbml6YXRpb25faWQpOwoKICBBTFRFUiBUQUJMRSBwdWJsaWMuY29sbGVjdGlvbnMKICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBvcmdhbml6YXRpb25faWQgVVVJRCBSRUZFUkVOQ0VTIHB1YmxpYy5vcmdhbml6YXRpb25zKGlkKSBPTiBERUxFVEUgQ0FTQ0FERTsKICBDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfY29sbGVjdGlvbnNfb3JnIE9OIHB1YmxpYy5jb2xsZWN0aW9ucyhvcmdhbml6YXRpb25faWQpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAyOiBGVU7Dh8ODTyBIRUxQRVIgLSBWZXJpZmljYXIgc2UgdXNlciBwZXJ0ZW5jZSDDoCBvcmcKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdfaWQgVVVJRCkKICBSRVRVUk5TIEJPT0xFQU4gQVMgJGZuJAogIEJFR0lOCiAgICBSRVRVUk4gRVhJU1RTICgKICAgICAgU0VMRUNUIDEKICAgICAgRlJPTSBwdWJsaWMudXNlcl9vcmdhbml6YXRpb25zCiAgICAgIFdIRVJFIG9yZ2FuaXphdGlvbl9pZCA9IG9yZ19pZAogICAgICAgIEFORCB1c2VyX2lkID0gYXV0aC51aWQoKQogICAgKTsKICBFTkQ7CiAgJGZuJCBMQU5HVUFHRSBwbHBnc3FsIFNFQ1VSSVRZIERFRklORVIgU1RBQkxFOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAzOiBBUExJQ0FSIFJMUyBFTSBUT0RBUyBBUyBUQUJFTEFTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIEFMVEVSIFRBQkxFIHB1YmxpYy5jYXRlZ29yaWVzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLnN1cHBsaWVycyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5wcm9kdWN0cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5wcm9kdWN0X3ZhcmlhbnRzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLnF1b3RlcyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5xdW90ZV9pdGVtcyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5vcmRlcnMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBBTFRFUiBUQUJMRSBwdWJsaWMub3JkZXJfaXRlbXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBJRiBFWElTVFMgKFNFTEVDVCAxIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWE9J3B1YmxpYycgQU5EIHRhYmxlX25hbWU9J3BheW1lbnRzJykgVEhFTgogICAgQUxURVIgVEFCTEUgcHVibGljLnBheW1lbnRzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgRU5EIElGOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5iaXRyaXhfY2xpZW50cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLmdlbmVyYXRlZF9tb2NrdXBzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLmNvbGxlY3Rpb25zIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLmNvbGxlY3Rpb25fcHJvZHVjdHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBBTFRFUiBUQUJMRSBwdWJsaWMucGVyc29uYWxpemF0aW9uX3RlY2huaXF1ZXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKICBBTFRFUiBUQUJMRSBwdWJsaWMubm90aWZpY2F0aW9ucyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwogIEFMVEVSIFRBQkxFIHB1YmxpYy5mZWF0dXJlX2ZsYWdzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CiAgQUxURVIgVEFCTEUgcHVibGljLnN5c3RlbV9zZXR0aW5ncyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSA0OiBQT0xJQ0lFUyAtIENBVEVHT1JJRVMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X2NhdGVnb3JpZXMiIE9OIHB1YmxpYy5jYXRlZ29yaWVzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfY2F0ZWdvcmllcyIKICAgIE9OIHB1YmxpYy5jYXRlZ29yaWVzIEZPUiBTRUxFQ1QgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy51c2VyX2lzX29yZ19tZW1iZXIob3JnYW5pemF0aW9uX2lkKSk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX2FkbWluc19jcmVhdGVfY2F0ZWdvcmllcyIgT04gcHVibGljLmNhdGVnb3JpZXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19jcmVhdGVfY2F0ZWdvcmllcyIKICAgIE9OIHB1YmxpYy5jYXRlZ29yaWVzIEZPUiBJTlNFUlQgVE8gYXV0aGVudGljYXRlZAogICAgV0lUSCBDSEVDSyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX3VwZGF0ZV9jYXRlZ29yaWVzIiBPTiBwdWJsaWMuY2F0ZWdvcmllczsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX3VwZGF0ZV9jYXRlZ29yaWVzIgogICAgT04gcHVibGljLmNhdGVnb3JpZXMgRk9SIFVQREFURSBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgV0lUSCBDSEVDSyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX2RlbGV0ZV9jYXRlZ29yaWVzIiBPTiBwdWJsaWMuY2F0ZWdvcmllczsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX2RlbGV0ZV9jYXRlZ29yaWVzIgogICAgT04gcHVibGljLmNhdGVnb3JpZXMgRk9SIERFTEVURSBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgNTogUE9MSUNJRVMgLSBTVVBQTElFUlMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X3N1cHBsaWVycyIgT04gcHVibGljLnN1cHBsaWVyczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X3N1cHBsaWVycyIKICAgIE9OIHB1YmxpYy5zdXBwbGllcnMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX21hbmFnZV9zdXBwbGllcnMiIE9OIHB1YmxpYy5zdXBwbGllcnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19tYW5hZ2Vfc3VwcGxpZXJzIgogICAgT04gcHVibGljLnN1cHBsaWVycyBGT1IgQUxMIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMuaXNfb3JnX293bmVyX29yX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpCiAgICBXSVRIIENIRUNLIChwdWJsaWMuaXNfb3JnX293bmVyX29yX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSA2OiBQT0xJQ0lFUyAtIFBST0RVQ1RTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfdmlld19wcm9kdWN0cyIgT04gcHVibGljLnByb2R1Y3RzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfcHJvZHVjdHMiCiAgICBPTiBwdWJsaWMucHJvZHVjdHMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX21hbmFnZV9wcm9kdWN0cyIgT04gcHVibGljLnByb2R1Y3RzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19hZG1pbnNfbWFuYWdlX3Byb2R1Y3RzIgogICAgT04gcHVibGljLnByb2R1Y3RzIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSkKICAgIFdJVEggQ0hFQ0sgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDc6IFBPTElDSUVTIC0gUFJPRFVDVF9WQVJJQU5UUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfdmFyaWFudHMiIE9OIHB1YmxpYy5wcm9kdWN0X3ZhcmlhbnRzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfdmFyaWFudHMiCiAgICBPTiBwdWJsaWMucHJvZHVjdF92YXJpYW50cyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5wcm9kdWN0cwogICAgICAgIFdIRVJFIGlkID0gcHJvZHVjdF92YXJpYW50cy5wcm9kdWN0X2lkCiAgICAgICAgICBBTkQgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX2FkbWluc19tYW5hZ2VfdmFyaWFudHMiIE9OIHB1YmxpYy5wcm9kdWN0X3ZhcmlhbnRzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19hZG1pbnNfbWFuYWdlX3ZhcmlhbnRzIgogICAgT04gcHVibGljLnByb2R1Y3RfdmFyaWFudHMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAoCiAgICAgIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMucHJvZHVjdHMKICAgICAgICBXSEVSRSBpZCA9IHByb2R1Y3RfdmFyaWFudHMucHJvZHVjdF9pZAogICAgICAgICAgQU5EIHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKQogICAgICApCiAgICApCiAgICBXSVRIIENIRUNLICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5wcm9kdWN0cwogICAgICAgIFdIRVJFIGlkID0gcHJvZHVjdF92YXJpYW50cy5wcm9kdWN0X2lkCiAgICAgICAgICBBTkQgcHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDg6IFBPTElDSUVTIC0gUVVPVEVTCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfdmlld19xdW90ZXMiIE9OIHB1YmxpYy5xdW90ZXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19xdW90ZXMiCiAgICBPTiBwdWJsaWMucXVvdGVzIEZPUiBTRUxFQ1QgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy51c2VyX2lzX29yZ19tZW1iZXIob3JnYW5pemF0aW9uX2lkKSk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfY3JlYXRlX3F1b3RlcyIgT04gcHVibGljLnF1b3RlczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc19jcmVhdGVfcXVvdGVzIgogICAgT04gcHVibGljLnF1b3RlcyBGT1IgSU5TRVJUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFdJVEggQ0hFQ0sgKHB1YmxpYy51c2VyX2lzX29yZ19tZW1iZXIob3JnYW5pemF0aW9uX2lkKSk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfdXBkYXRlX293bl9xdW90ZXMiIE9OIHB1YmxpYy5xdW90ZXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdXBkYXRlX293bl9xdW90ZXMiCiAgICBPTiBwdWJsaWMucXVvdGVzIEZPUiBVUERBVEUgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgQU5EIChjcmVhdGVkX2J5ID0gYXV0aC51aWQoKSBPUiBwdWJsaWMuaXNfb3JnX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpCiAgICApOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19hZG1pbnNfZGVsZXRlX3F1b3RlcyIgT04gcHVibGljLnF1b3RlczsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX2RlbGV0ZV9xdW90ZXMiCiAgICBPTiBwdWJsaWMucXVvdGVzIEZPUiBERUxFVEUgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDk6IFBPTElDSUVTIC0gUVVPVEVfSVRFTVMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X3F1b3RlX2l0ZW1zIiBPTiBwdWJsaWMucXVvdGVfaXRlbXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19xdW90ZV9pdGVtcyIKICAgIE9OIHB1YmxpYy5xdW90ZV9pdGVtcyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5xdW90ZXMKICAgICAgICBXSEVSRSBpZCA9IHF1b3RlX2l0ZW1zLnF1b3RlX2lkCiAgICAgICAgICBBTkQgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAib3JnX21lbWJlcnNfbWFuYWdlX3F1b3RlX2l0ZW1zIiBPTiBwdWJsaWMucXVvdGVfaXRlbXM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfbWFuYWdlX3F1b3RlX2l0ZW1zIgogICAgT04gcHVibGljLnF1b3RlX2l0ZW1zIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLnF1b3RlcwogICAgICAgIFdIRVJFIGlkID0gcXVvdGVfaXRlbXMucXVvdGVfaWQKICAgICAgICAgIEFORCAoY3JlYXRlZF9ieSA9IGF1dGgudWlkKCkgT1IgcHVibGljLmlzX29yZ19hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgICApCiAgICApCiAgICBXSVRIIENIRUNLICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5xdW90ZXMKICAgICAgICBXSEVSRSBpZCA9IHF1b3RlX2l0ZW1zLnF1b3RlX2lkCiAgICAgICAgICBBTkQgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgICkKICAgICk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDEwOiBQT0xJQ0lFUyAtIE9SREVSUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfb3JkZXJzIiBPTiBwdWJsaWMub3JkZXJzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfb3JkZXJzIgogICAgT04gcHVibGljLm9yZGVycyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX2NyZWF0ZV9vcmRlcnMiIE9OIHB1YmxpYy5vcmRlcnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfY3JlYXRlX29yZGVycyIKICAgIE9OIHB1YmxpYy5vcmRlcnMgRk9SIElOU0VSVCBUTyBhdXRoZW50aWNhdGVkCiAgICBXSVRIIENIRUNLIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3VwZGF0ZV9vd25fb3JkZXJzIiBPTiBwdWJsaWMub3JkZXJzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3VwZGF0ZV9vd25fb3JkZXJzIgogICAgT04gcHVibGljLm9yZGVycyBGT1IgVVBEQVRFIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgcHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpCiAgICAgIEFORCAoY3JlYXRlZF9ieSA9IGF1dGgudWlkKCkgT1IgcHVibGljLmlzX29yZ19hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX2RlbGV0ZV9vcmRlcnMiIE9OIHB1YmxpYy5vcmRlcnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19kZWxldGVfb3JkZXJzIgogICAgT04gcHVibGljLm9yZGVycyBGT1IgREVMRVRFIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMuaXNfb3JnX293bmVyX29yX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxMTogUE9MSUNJRVMgLSBPUkRFUl9JVEVNUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfb3JkZXJfaXRlbXMiIE9OIHB1YmxpYy5vcmRlcl9pdGVtczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X29yZGVyX2l0ZW1zIgogICAgT04gcHVibGljLm9yZGVyX2l0ZW1zIEZPUiBTRUxFQ1QgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLm9yZGVycwogICAgICAgIFdIRVJFIGlkID0gb3JkZXJfaXRlbXMub3JkZXJfaWQKICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgKQogICAgKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc19tYW5hZ2Vfb3JkZXJfaXRlbXMiIE9OIHB1YmxpYy5vcmRlcl9pdGVtczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc19tYW5hZ2Vfb3JkZXJfaXRlbXMiCiAgICBPTiBwdWJsaWMub3JkZXJfaXRlbXMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAoCiAgICAgIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMub3JkZXJzCiAgICAgICAgV0hFUkUgaWQgPSBvcmRlcl9pdGVtcy5vcmRlcl9pZAogICAgICAgICAgQU5EIChjcmVhdGVkX2J5ID0gYXV0aC51aWQoKSBPUiBwdWJsaWMuaXNfb3JnX2FkbWluKG9yZ2FuaXphdGlvbl9pZCkpCiAgICAgICkKICAgICkKICAgIFdJVEggQ0hFQ0sgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLm9yZGVycwogICAgICAgIFdIRVJFIGlkID0gb3JkZXJfaXRlbXMub3JkZXJfaWQKICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgKQogICAgKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTI6IFBPTElDSUVTIC0gUEFZTUVOVFMgKGd1YXJkZWQ6IHRhYmxlIG1heSBub3QgZXhpc3QgeWV0KQogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBJRiBFWElTVFMgKFNFTEVDVCAxIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWE9J3B1YmxpYycgQU5EIHRhYmxlX25hbWU9J3BheW1lbnRzJykgVEhFTgogICAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X3BheW1lbnRzIiBPTiBwdWJsaWMucGF5bWVudHM7CiAgICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X3BheW1lbnRzIgogICAgICBPTiBwdWJsaWMucGF5bWVudHMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICAgIFVTSU5HICgKICAgICAgICBFWElTVFMgKAogICAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMub3JkZXJzCiAgICAgICAgICBXSEVSRSBpZCA9IHBheW1lbnRzLm9yZGVyX2lkCiAgICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgICApCiAgICAgICk7CgogICAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfYWRtaW5zX21hbmFnZV9wYXltZW50cyIgT04gcHVibGljLnBheW1lbnRzOwogICAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19tYW5hZ2VfcGF5bWVudHMiCiAgICAgIE9OIHB1YmxpYy5wYXltZW50cyBGT1IgQUxMIFRPIGF1dGhlbnRpY2F0ZWQKICAgICAgVVNJTkcgKAogICAgICAgIEVYSVNUUyAoCiAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5vcmRlcnMKICAgICAgICAgIFdIRVJFIGlkID0gcGF5bWVudHMub3JkZXJfaWQKICAgICAgICAgICAgQU5EIHB1YmxpYy5pc19vcmdfYWRtaW4ob3JnYW5pemF0aW9uX2lkKQogICAgICAgICkKICAgICAgKQogICAgICBXSVRIIENIRUNLICgKICAgICAgICBFWElTVFMgKAogICAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMub3JkZXJzCiAgICAgICAgICBXSEVSRSBpZCA9IHBheW1lbnRzLm9yZGVyX2lkCiAgICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgICApCiAgICAgICk7CiAgRU5EIElGOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxMzogUE9MSUNJRVMgLSBCSVRSSVhfQ0xJRU5UUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19tZW1iZXJzX3ZpZXdfY2xpZW50cyIgT04gcHVibGljLmJpdHJpeF9jbGllbnRzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX3ZpZXdfY2xpZW50cyIKICAgIE9OIHB1YmxpYy5iaXRyaXhfY2xpZW50cyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19hZG1pbnNfbWFuYWdlX2NsaWVudHMiIE9OIHB1YmxpYy5iaXRyaXhfY2xpZW50czsKICBDUkVBVEUgUE9MSUNZICJvcmdfYWRtaW5zX21hbmFnZV9jbGllbnRzIgogICAgT04gcHVibGljLmJpdHJpeF9jbGllbnRzIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSkKICAgIFdJVEggQ0hFQ0sgKHB1YmxpYy5pc19vcmdfb3duZXJfb3JfYWRtaW4ob3JnYW5pemF0aW9uX2lkKSk7CgogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC0tIFBBUlRFIDE0OiBQT0xJQ0lFUyAtIE1PQ0tVUFMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X21vY2t1cF9qb2JzIiBPTiBwdWJsaWMubW9ja3VwX2dlbmVyYXRpb25fam9iczsKICBDUkVBVEUgUE9MSUNZICJvcmdfbWVtYmVyc192aWV3X21vY2t1cF9qb2JzIgogICAgT04gcHVibGljLm1vY2t1cF9nZW5lcmF0aW9uX2pvYnMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc19jcmVhdGVfbW9ja3VwX2pvYnMiIE9OIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzOwogIENSRUFURSBQT0xJQ1kgIm9yZ19tZW1iZXJzX2NyZWF0ZV9tb2NrdXBfam9icyIKICAgIE9OIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzIEZPUiBJTlNFUlQgVE8gYXV0aGVudGljYXRlZAogICAgV0lUSCBDSEVDSyAocHVibGljLnVzZXJfaXNfb3JnX21lbWJlcihvcmdhbml6YXRpb25faWQpKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X2dlbmVyYXRlZF9tb2NrdXBzIiBPTiBwdWJsaWMuZ2VuZXJhdGVkX21vY2t1cHM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19nZW5lcmF0ZWRfbW9ja3VwcyIKICAgIE9OIHB1YmxpYy5nZW5lcmF0ZWRfbW9ja3VwcyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy5tb2NrdXBfZ2VuZXJhdGlvbl9qb2JzCiAgICAgICAgV0hFUkUgaWQgPSBnZW5lcmF0ZWRfbW9ja3Vwcy5qb2JfaWQKICAgICAgICAgIEFORCBwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkKICAgICAgKQogICAgKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTU6IFBPTElDSUVTIC0gQ09MTEVDVElPTlMKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJvcmdfbWVtYmVyc192aWV3X2NvbGxlY3Rpb25zIiBPTiBwdWJsaWMuY29sbGVjdGlvbnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX21lbWJlcnNfdmlld19jb2xsZWN0aW9ucyIKICAgIE9OIHB1YmxpYy5jb2xsZWN0aW9ucyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChwdWJsaWMudXNlcl9pc19vcmdfbWVtYmVyKG9yZ2FuaXphdGlvbl9pZCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgIm9yZ19hZG1pbnNfbWFuYWdlX2NvbGxlY3Rpb25zIiBPTiBwdWJsaWMuY29sbGVjdGlvbnM7CiAgQ1JFQVRFIFBPTElDWSAib3JnX2FkbWluc19tYW5hZ2VfY29sbGVjdGlvbnMiCiAgICBPTiBwdWJsaWMuY29sbGVjdGlvbnMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKQogICAgV0lUSCBDSEVDSyAocHVibGljLmlzX29yZ19vd25lcl9vcl9hZG1pbihvcmdhbml6YXRpb25faWQpKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTY6IFBPTElDSUVTIC0gUEVSU09OQUxJWkFUSU9OX1RFQ0hOSVFVRVMgKEdMT0JBTCkKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJhbnlvbmVfdmlld190ZWNobmlxdWVzIiBPTiBwdWJsaWMucGVyc29uYWxpemF0aW9uX3RlY2huaXF1ZXM7CiAgQ1JFQVRFIFBPTElDWSAiYW55b25lX3ZpZXdfdGVjaG5pcXVlcyIKICAgIE9OIHB1YmxpYy5wZXJzb25hbGl6YXRpb25fdGVjaG5pcXVlcyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HIChpc19hY3RpdmUgPSB0cnVlKTsKCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJhZG1pbnNfbWFuYWdlX3RlY2huaXF1ZXMiIE9OIHB1YmxpYy5wZXJzb25hbGl6YXRpb25fdGVjaG5pcXVlczsKICBDUkVBVEUgUE9MSUNZICJhZG1pbnNfbWFuYWdlX3RlY2huaXF1ZXMiCiAgICBPTiBwdWJsaWMucGVyc29uYWxpemF0aW9uX3RlY2huaXF1ZXMgRk9SIEFMTCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAoCiAgICAgIEVYSVNUUyAoCiAgICAgICAgU0VMRUNUIDEgRlJPTSBwdWJsaWMudXNlcl9vcmdhbml6YXRpb25zCiAgICAgICAgV0hFUkUgdXNlcl9pZCA9IGF1dGgudWlkKCkKICAgICAgICAgIEFORCByb2xlIElOICgnb3duZXInLCAnYWRtaW4nKQogICAgICApCiAgICApOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxNzogUE9MSUNJRVMgLSBOT1RJRklDQVRJT05TIChVU0VSLVNDT1BFRCkKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICJ1c2Vyc192aWV3X293bl9ub3RpZmljYXRpb25zIiBPTiBwdWJsaWMubm90aWZpY2F0aW9uczsKICBDUkVBVEUgUE9MSUNZICJ1c2Vyc192aWV3X293bl9ub3RpZmljYXRpb25zIgogICAgT04gcHVibGljLm5vdGlmaWNhdGlvbnMgRk9SIFNFTEVDVCBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAodXNlcl9pZCA9IGF1dGgudWlkKCkpOwoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgInVzZXJzX3VwZGF0ZV9vd25fbm90aWZpY2F0aW9ucyIgT04gcHVibGljLm5vdGlmaWNhdGlvbnM7CiAgQ1JFQVRFIFBPTElDWSAidXNlcnNfdXBkYXRlX293bl9ub3RpZmljYXRpb25zIgogICAgT04gcHVibGljLm5vdGlmaWNhdGlvbnMgRk9SIFVQREFURSBUTyBhdXRoZW50aWNhdGVkCiAgICBVU0lORyAodXNlcl9pZCA9IGF1dGgudWlkKCkpOwoKICAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAtLSBQQVJURSAxODogUE9MSUNJRVMgLSBTWVNURU0gVEFCTEVTIChBRE1JTiBPTkxZKQogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBEUk9QIFBPTElDWSBJRiBFWElTVFMgImFkbWluc192aWV3X2ZlYXR1cmVfZmxhZ3MiIE9OIHB1YmxpYy5mZWF0dXJlX2ZsYWdzOwogIENSRUFURSBQT0xJQ1kgImFkbWluc192aWV3X2ZlYXR1cmVfZmxhZ3MiCiAgICBPTiBwdWJsaWMuZmVhdHVyZV9mbGFncyBGT1IgU0VMRUNUIFRPIGF1dGhlbnRpY2F0ZWQKICAgIFVTSU5HICgKICAgICAgRVhJU1RTICgKICAgICAgICBTRUxFQ1QgMSBGUk9NIHB1YmxpYy51c2VyX29yZ2FuaXphdGlvbnMKICAgICAgICBXSEVSRSB1c2VyX2lkID0gYXV0aC51aWQoKQogICAgICAgICAgQU5EIHJvbGUgSU4gKCdvd25lcicsICdhZG1pbicpCiAgICAgICkKICAgICk7CgogIERST1AgUE9MSUNZIElGIEVYSVNUUyAiYWRtaW5zX21hbmFnZV9zeXN0ZW1fc2V0dGluZ3MiIE9OIHB1YmxpYy5zeXN0ZW1fc2V0dGluZ3M7CiAgQ1JFQVRFIFBPTElDWSAiYWRtaW5zX21hbmFnZV9zeXN0ZW1fc2V0dGluZ3MiCiAgICBPTiBwdWJsaWMuc3lzdGVtX3NldHRpbmdzIEZPUiBBTEwgVE8gYXV0aGVudGljYXRlZAogICAgVVNJTkcgKAogICAgICBFWElTVFMgKAogICAgICAgIFNFTEVDVCAxIEZST00gcHVibGljLnVzZXJfb3JnYW5pemF0aW9ucwogICAgICAgIFdIRVJFIHVzZXJfaWQgPSBhdXRoLnVpZCgpCiAgICAgICAgICBBTkQgcm9sZSBJTiAoJ293bmVyJywgJ2FkbWluJykKICAgICAgKQogICAgKTsKCiAgLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLS0gUEFSVEUgMTk6IEdSQU5UUwogIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBHUkFOVCBTRUxFQ1QgT04gcHVibGljLmNhdGVnb3JpZXMgVE8gYXV0aGVudGljYXRlZDsKICBHUkFOVCBTRUxFQ1QgT04gcHVibGljLnN1cHBsaWVycyBUTyBhdXRoZW50aWNhdGVkOwogIEdSQU5UIFNFTEVDVCBPTiBwdWJsaWMucHJvZHVjdHMgVE8gYXV0aGVudGljYXRlZDsKICBHUkFOVCBTRUxFQ1QgT04gcHVibGljLnF1b3RlcyBUTyBhdXRoZW50aWNhdGVkOwogIEdSQU5UIFNFTEVDVCBPTiBwdWJsaWMub3JkZXJzIFRPIGF1dGhlbnRpY2F0ZWQ7CiAgSUYgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgV0hFUkUgdGFibGVfc2NoZW1hPSdwdWJsaWMnIEFORCB0YWJsZV9uYW1lPSdwYXltZW50cycpIFRIRU4KICAgIEdSQU5UIFNFTEVDVCBPTiBwdWJsaWMucGF5bWVudHMgVE8gYXV0aGVudGljYXRlZDsKICBFTkQgSUY7CgogIFJBSVNFIE5PVElDRSAnTWlncmF0aW9uIDIwMjUwMTAzXzAyX3Jsc19vcmdhbml6YXRpb25zIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5Lic7CkVORCAkb3V0ZXIkOwo=
^

View logs for this Workflow Run ↗︎.
Learn more about Supabase for Git ↗︎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants