@stiunb/unb-lib-components 18.0.22 → 18.0.23

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.
Files changed (39) hide show
  1. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +34 -11
  2. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +65 -47
  3. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +102 -14
  4. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +71 -55
  5. package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +227 -42
  6. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.mjs +1 -1
  7. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.mjs +1 -1
  8. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +2 -1
  9. package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +141 -8
  10. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +62 -8
  11. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +62 -32
  12. package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +9 -1
  13. package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +9 -9
  14. package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +1 -1
  15. package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
  16. package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
  17. package/esm2022/public-api.mjs +14 -13
  18. package/esm2022/stiunb-unb-lib-components.mjs +5 -0
  19. package/fesm2022/stiunb-unb-lib-components.mjs +2469 -0
  20. package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -0
  21. package/index.d.ts +1 -1
  22. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +3 -3
  23. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +6 -5
  24. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +6 -3
  25. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +6 -5
  26. package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +17 -5
  27. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.d.ts +1 -0
  28. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.d.ts +3 -2
  29. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +5 -4
  30. package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +14 -1
  31. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +2 -2
  32. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +6 -5
  33. package/lib/unb-pessoa/unb-pessoa.module.d.ts +20 -18
  34. package/lib/unb-pessoa/unb-pessoa.service.d.ts +2 -1
  35. package/package.json +5 -5
  36. package/public-api.d.ts +10 -10
  37. package/esm2022/unb-lib-components.mjs +0 -5
  38. package/fesm2022/unb-lib-components.mjs +0 -1923
  39. package/fesm2022/unb-lib-components.mjs.map +0 -1
@@ -2,4 +2,4 @@ export class UnbPessoaEmail {
2
2
  }
3
3
  export class UnbPessoaEmailTipo {
4
4
  }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbWFpbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sY0FBYztDQU8xQjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7Q0FJOUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5iUGVzc29hRW1haWwge1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICB0aXBvRW1haWxDb2RpZ28/OiBudW1iZXI7XHJcbiAgdGlwbz86IHN0cmluZztcclxuICBlbWFpbD86IHN0cmluZztcclxuICBhdXRvcml6YWNhbz86IGJvb2xlYW47XHJcbiAgb3JkZW0/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FFbWFpbFRpcG8ge1xyXG4gIGluZGV4PzogbnVtYmVyO1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICBkZW5vbWluYWNhbz86IHN0cmluZztcclxufSJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbWFpbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sY0FBYztDQVExQjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7Q0FJOUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5iUGVzc29hRW1haWwge1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICB0aXBvRW1haWxDb2RpZ28/OiBudW1iZXI7XHJcbiAgdGlwbz86IHN0cmluZztcclxuICBlbWFpbD86IHN0cmluZztcclxuICBhdXRvcml6YWNhbz86IGJvb2xlYW47XHJcbiAgb3JkZW0/OiBudW1iZXI7XHJcbiAgb3JkZW1FbWFpbD86IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FFbWFpbFRpcG8ge1xyXG4gIGluZGV4PzogbnVtYmVyO1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICBkZW5vbWluYWNhbz86IHN0cmluZztcclxufSJdfQ==
@@ -2,4 +2,4 @@ export class UnbPessoaEndereco {
2
2
  }
3
3
  export class UnbPessoaEnderecoTipo {
4
4
  }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8saUJBQWlCO0NBaUI3QjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7Q0FHakMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5iUGVzc29hRW5kZXJlY28ge1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICB0aXBvRW5kZXJlY29Db2RpZ28/OiBudW1iZXI7XHJcbiAgdGlwbz86IHN0cmluZztcclxuICBjZXA/OiBzdHJpbmc7XHJcbiAgbG9ncmFkb3Vybz86IHN0cmluZztcclxuICBtdW5pY2lwaW8/OiBzdHJpbmc7XHJcbiAgYmFpcnJvPzogc3RyaW5nO1xyXG4gIHVmRW5kZXJlY28/OiBzdHJpbmc7IC8vIG8gcHV0IGVoIHVmRW5kZXJlY28gZSBvIGdldCBlaCB1Zi4gRW50YW8gcHJlY2lzYSBjb252ZXJ0ZXJcclxuICB1Zj86IHN0cmluZztcclxuICBwYWlzPzogc3RyaW5nO1xyXG4gIGNvbXBsZW1lbnRvPzogc3RyaW5nO1xyXG4gIGNhaXhhUG9zdGFsPzogc3RyaW5nO1xyXG4gIGNvcnJlc3BvbmRlbmNpYT86IGJvb2xlYW47XHJcbiAgb3JkZW1FbmRlcmVjbz86IG51bWJlcjtcclxuICBwYWlzRW5kZXJlY29Db2RpZ28/OiBudW1iZXI7XHJcbiAgbXVuaWNpcGlvQ29kaWdvPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hRW5kZXJlY29UaXBvIHtcclxuICBjb2RpZ28/OiBudW1iZXI7XHJcbiAgZGVub21pbmFjYW8/OiBzdHJpbmc7XHJcbn0iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8saUJBQWlCO0NBa0I3QjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7Q0FHakMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5iUGVzc29hRW5kZXJlY28ge1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICB0aXBvRW5kZXJlY29Db2RpZ28/OiBudW1iZXI7XHJcbiAgdGlwbz86IHN0cmluZztcclxuICBjZXA/OiBzdHJpbmc7XHJcbiAgbG9ncmFkb3Vybz86IHN0cmluZztcclxuICBtdW5pY2lwaW8/OiBzdHJpbmc7XHJcbiAgYmFpcnJvPzogc3RyaW5nO1xyXG4gIHVmRW5kZXJlY28/OiBzdHJpbmc7IFxyXG4gIHVmPzogc3RyaW5nO1xyXG4gIHBhaXM/OiBzdHJpbmc7XHJcbiAgY29tcGxlbWVudG8/OiBzdHJpbmc7XHJcbiAgY2FpeGFQb3N0YWw/OiBzdHJpbmc7XHJcbiAgY29ycmVzcG9uZGVuY2lhPzogYm9vbGVhbjtcclxuICBvcmRlbUVuZGVyZWNvPzogbnVtYmVyIHwgbnVsbDtcclxuICBvcmRlbT86IG51bWJlcjtcclxuICBwYWlzRW5kZXJlY29Db2RpZ28/OiBudW1iZXIgfCBudWxsO1xyXG4gIG11bmljaXBpb0NvZGlnbz86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYUVuZGVyZWNvVGlwbyB7XHJcbiAgY29kaWdvPzogbnVtYmVyO1xyXG4gIGRlbm9taW5hY2FvPzogc3RyaW5nO1xyXG59Il19
@@ -2,5 +2,6 @@
2
2
  * Essa eh uma classe base, com propriedades comum a todas as outras pessoas.
3
3
  * */
4
4
  export class UnbPessoaModel {
5
+ ;
5
6
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQTs7S0FFSztBQUNMLE1BQU0sT0FBTyxjQUFjO0NBbUUxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpcG9QZXNzb2FFbnVtIH0gZnJvbSBcIi4uL3VuYi10aXBvLXBlc3NvYS5lbnVtXCI7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS1lbWFpbC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjbyB9IGZyb20gXCIuL3VuYi1wZXNzb2EtZW5kZXJlY28ubW9kZWxcIjtcclxuaW1wb3J0IHsgVW5iUGVzc29hUGFpcyB9IGZyb20gXCIuL3VuYi1wZXNzb2EtcGFpc1wiO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZSB9IGZyb20gXCIuL3VuYi1wZXNzb2EtdGVsZWZvbmUubW9kZWxcIjtcclxuXHJcbi8qKiBcclxuICogRXNzYSBlaCB1bWEgY2xhc3NlIGJhc2UsIGNvbSBwcm9wcmllZGFkZXMgY29tdW0gYSB0b2RhcyBhcyBvdXRyYXMgcGVzc29hcy4gXHJcbiAqICovXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FNb2RlbCB7XHJcbiAgaWRQZXNzb2EhOiBudW1iZXI7XHJcbiAgY29kaWdvUGVzc29hITogbnVtYmVyOyAgIFxyXG4gIGVuZGVyZWNvcyE6IFVuYlBlc3NvYUVuZGVyZWNvW107XHJcbiAgdGVsZWZvbmVzITogVW5iUGVzc29hVGVsZWZvbmVbXTtcclxuICBlbWFpbHMhOiBVbmJQZXNzb2FFbWFpbFtdO1xyXG4gIHRpcG9QZXNzb2EhOiBUaXBvUGVzc29hRW51bTsgLy8gaW5pY2lhbGl6YSBjb20gbyBmaXNpY2Egc2VsZWNpb25hZG9cclxuXHJcbiAgLy8gQXRyaWJ1dG9zIGRhIFBlc3NvYSBGw61zaWNhXHJcbiAgaWRTZXJ2aWRvciE6IG51bWJlcjtcclxuICBtYXRyaWN1bGFTaXBlcyE6IG51bWJlcjtcclxuICBtYXRyaWN1bGFTaWFwZSE6IG51bWJlcjtcclxuICBub21lITogc3RyaW5nO1xyXG4gIGNwZiE6IHN0cmluZztcclxuICByZyE6IHN0cmluZztcclxuICByZ09yZ2FvITogc3RyaW5nO1xyXG4gIHJnVWYhOiBzdHJpbmc7XHJcbiAgcmdEYXRhRW1pc3NhbyE6IHN0cmluZztcclxuICBudW1lcm9UaXR1bG9FbGVpdG9yITogc3RyaW5nO1xyXG4gIGRhdGFFbWlzc2FvVGl0dWxvRWxlaXRvciE6IHN0cmluZztcclxuICB6b25hVGl0dWxvRWxlaXRvciE6IHN0cmluZztcclxuICBzZWNhb1RpdHVsb0VsZWl0b3IhOiBzdHJpbmc7XHJcbiAgdWZUaXR1bG9FbGVpdG9yITogc3RyaW5nO1xyXG4gIG51bWVyb1Jlc2VydmlzdGEhOiBzdHJpbmc7XHJcbiAgc2VyaWVSZXNlcnZpc3RhITogc3RyaW5nO1xyXG4gIG9yZ2FvUmVzZXJ2aXN0YSE6IHN0cmluZztcclxuICBkYXRhTmFzY2ltZW50byE6IHN0cmluZztcclxuICBwYWlzTmFzY2ltZW50byE6IHN0cmluZztcclxuICB1Zk5hc2NpbWVudG8hOiBzdHJpbmc7XHJcbiAgbmF0dXJhbGlkYWRlITogc3RyaW5nO1xyXG4gIGNvZGlnb1BhaXNOYXNjaW1lbnRvITogbnVtYmVyO1xyXG4gIGNvZGlnb1BhaXNQYXNzYXBvcnRlITogbnVtYmVyO1xyXG4gIGNvZGlnb0VzdGFkb0NpdmlsITogbnVtYmVyO1xyXG4gIG5hY2lvbmFsaWRhZGUhOiBzdHJpbmc7XHJcbiAgZXN0YWRvQ2l2aWwhOiBzdHJpbmc7XHJcbiAgbm9tZVBhaSE6IHN0cmluZztcclxuICBub21lTWFlITogc3RyaW5nO1xyXG4gIHRpcG9TYW5ndWluZW8hOiBzdHJpbmc7XHJcbiAgZXNjb2xhcmlkYWRlITogc3RyaW5nO1xyXG4gIG51bWVyb0NhcnRlaXJhVHJhYmFsaG8hOiBzdHJpbmc7XHJcbiAgc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvITogc3RyaW5nO1xyXG4gIHVmQ2FydGVpcmFUcmFiYWxobyE6IHN0cmluZztcclxuICBwaXNQYXNlcCE6IHN0cmluZztcclxuICBudW1lcm9IYWJpbGl0YWNhbyE6IHN0cmluZztcclxuICByZWdpc3Ryb0hhYmlsaXRhY2FvITogc3RyaW5nO1xyXG4gIGRhdGFFbWlzc2FvSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgZGF0YVZhbGlkYWRlSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgY2F0ZWdvcmlhSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgZGVmaWNpZW5jaWFGaXNpY2FIYWJpbGl0YWNhbyE6IHN0cmluZztcclxuICBwcmltZWlyYUhhYmlsaXRhY2FvITogc3RyaW5nO1xyXG4gIGF1dG9DYWRhc3RybyE6IGJvb2xlYW47XHJcbiAgbm9tZVNvY2lhbCE6IHN0cmluZztcclxuICBzZXhvITogc3RyaW5nOyAgXHJcbiAgY29kaWdvU2V4byE6IG51bWJlcjtcclxuXHJcbiAgLy8gQXRyaWJ1dG9zIGRhIFBlc3NvYSBFc3RyYW5nZWlyYVxyXG4gIHBhc3NhcG9ydGUhOiBzdHJpbmc7XHJcbiAgcGFpc09yaWdlbSE6IHN0cmluZztcclxuXHJcbiAgLy8gQXRyaWJ1dG9zIGRhIFBlc3NvYSBKdXLDrWRpY2FcclxuICBjbnBqITogc3RyaW5nO1xyXG4gIHJhemFvU29jaWFsITogc3RyaW5nO1xyXG4gIG5vbWVGYW50YXNpYSE6IHN0cmluZztcclxuICBzaWdsYSE6IHN0cmluZztcclxuICBwYWlzITogVW5iUGVzc29hUGFpcztcclxuICBwYWdpbmFXZWIhOiBzdHJpbmc7XHJcbiAgXHJcbn0iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQTs7S0FFSztBQUNMLE1BQU0sT0FBTyxjQUFjO0lBK0JhLENBQUM7Q0FzQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tIFwiLi4vdW5iLXRpcG8tcGVzc29hLmVudW1cIjtcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWwgfSBmcm9tIFwiLi91bmItcGVzc29hLWVtYWlsLm1vZGVsXCI7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FQYWlzIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS1wYWlzXCI7XHJcbmltcG9ydCB7IFVuYlBlc3NvYVRlbGVmb25lIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS10ZWxlZm9uZS5tb2RlbFwiO1xyXG5cclxuLyoqIFxyXG4gKiBFc3NhIGVoIHVtYSBjbGFzc2UgYmFzZSwgY29tIHByb3ByaWVkYWRlcyBjb211bSBhIHRvZGFzIGFzIG91dHJhcyBwZXNzb2FzLiBcclxuICogKi9cclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYU1vZGVsIHtcclxuICBpZFBlc3NvYSE6IG51bWJlcjtcclxuICBjb2RpZ29QZXNzb2EhOiBudW1iZXI7ICAgXHJcbiAgZW5kZXJlY29zITogVW5iUGVzc29hRW5kZXJlY29bXTtcclxuICB0ZWxlZm9uZXMhOiBVbmJQZXNzb2FUZWxlZm9uZVtdO1xyXG4gIGVtYWlscyE6IFVuYlBlc3NvYUVtYWlsW107XHJcbiAgdGlwb1Blc3NvYSE6IFRpcG9QZXNzb2FFbnVtOyAvLyBpbmljaWFsaXphIGNvbSBvIGZpc2ljYSBzZWxlY2lvbmFkb1xyXG5cclxuICAvLyBBdHJpYnV0b3MgZGEgUGVzc29hIEbDrXNpY2FcclxuICBpZFNlcnZpZG9yITogbnVtYmVyO1xyXG4gIG1hdHJpY3VsYVNpcGVzITogbnVtYmVyO1xyXG4gIG1hdHJpY3VsYVNpYXBlITogbnVtYmVyO1xyXG4gIG5vbWUhOiBzdHJpbmc7XHJcbiAgY3BmITogc3RyaW5nO1xyXG4gIHJnITogc3RyaW5nO1xyXG4gIHJnT3JnYW8hOiBzdHJpbmc7XHJcbiAgcmdVZiE6IHN0cmluZztcclxuICByZ0RhdGFFbWlzc2FvITogc3RyaW5nO1xyXG4gIG51bWVyb1RpdHVsb0VsZWl0b3IhOiBzdHJpbmc7XHJcbiAgZGF0YUVtaXNzYW9UaXR1bG9FbGVpdG9yITogc3RyaW5nO1xyXG4gIHpvbmFUaXR1bG9FbGVpdG9yITogc3RyaW5nO1xyXG4gIHNlY2FvVGl0dWxvRWxlaXRvciE6IHN0cmluZztcclxuICB1ZlRpdHVsb0VsZWl0b3IhOiBzdHJpbmc7XHJcbiAgbnVtZXJvUmVzZXJ2aXN0YSE6IHN0cmluZztcclxuICBzZXJpZVJlc2VydmlzdGEhOiBzdHJpbmc7XHJcbiAgb3JnYW9SZXNlcnZpc3RhITogc3RyaW5nO1xyXG4gIGRhdGFOYXNjaW1lbnRvITogRGF0ZSB8IG51bGw7XHJcbiAgXHJcbiAgcGFpc05hc2NpbWVudG8hOiBzdHJpbmc7XHJcbiAgdWZOYXNjaW1lbnRvITogc3RyaW5nO1xyXG4gIG5hdHVyYWxpZGFkZSE6IHN0cmluZztcclxuICBjb2RpZ29QYWlzTmFzY2ltZW50byE6IG51bWJlciB8IG51bGwgOztcclxuICBjb2RpZ29QYWlzUGFzc2Fwb3J0ZSE6IG51bWJlcjtcclxuICBjb2RpZ29Fc3RhZG9DaXZpbCE6IG51bWJlciB8IG51bGwgO1xyXG4gIG5hY2lvbmFsaWRhZGUhOiBzdHJpbmc7XHJcbiAgZXN0YWRvQ2l2aWwhOiBzdHJpbmc7XHJcbiAgbm9tZVBhaSE6IHN0cmluZztcclxuICBub21lTWFlITogc3RyaW5nO1xyXG4gIHRpcG9TYW5ndWluZW8hOiBzdHJpbmc7XHJcbiAgZXNjb2xhcmlkYWRlITogbnVtYmVyIHxudWxsO1xyXG4gIG51bWVyb0NhcnRlaXJhVHJhYmFsaG8hOiBzdHJpbmc7XHJcbiAgc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvITogc3RyaW5nO1xyXG4gIHVmQ2FydGVpcmFUcmFiYWxobyE6IHN0cmluZztcclxuICBwaXNQYXNlcCE6IHN0cmluZztcclxuICBudW1lcm9IYWJpbGl0YWNhbyE6IHN0cmluZztcclxuICByZWdpc3Ryb0hhYmlsaXRhY2FvITogc3RyaW5nO1xyXG4gIGRhdGFFbWlzc2FvSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgZGF0YVZhbGlkYWRlSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgY2F0ZWdvcmlhSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgZGVmaWNpZW5jaWFGaXNpY2FIYWJpbGl0YWNhbyE6IHN0cmluZztcclxuICBwcmltZWlyYUhhYmlsaXRhY2FvITogc3RyaW5nO1xyXG4gIGF1dG9DYWRhc3RybyE6IGJvb2xlYW47XHJcbiAgbm9tZVNvY2lhbCE6IHN0cmluZztcclxuICBzZXhvITogc3RyaW5nOyAgXHJcbiAgY29kaWdvU2V4byE6IG51bWJlcjtcclxuXHJcbiAgLy8gQXRyaWJ1dG9zIGRhIFBlc3NvYSBFc3RyYW5nZWlyYVxyXG4gIHBhc3NhcG9ydGUhOiBzdHJpbmc7XHJcbiAgcGFpc09yaWdlbSE6IHN0cmluZztcclxuICBkYXRhQ2hlZ2FkYUJyYXNpbCE6IERhdGUgfCBudWxsO1xyXG5cclxuICAvLyBBdHJpYnV0b3MgZGEgUGVzc29hIEp1csOtZGljYVxyXG4gIGNucGohOiBzdHJpbmc7XHJcbiAgcmF6YW9Tb2NpYWwhOiBzdHJpbmc7XHJcbiAgbm9tZUZhbnRhc2lhITogc3RyaW5nO1xyXG4gIHNpZ2xhITogc3RyaW5nO1xyXG4gIHBhaXMhOiBVbmJQZXNzb2FQYWlzO1xyXG4gIHBhZ2luYVdlYiE6IHN0cmluZztcclxuXHJcbn0iXX0=
@@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { UnbUtils } from '../../utils/unb-utils';
3
3
  import { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';
4
4
  import { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';
5
+ import { forkJoin } from 'rxjs';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "../unb-pessoa.service";
7
8
  import * as i2 from "@angular/material/snack-bar";
@@ -11,7 +12,7 @@ import * as i5 from "@angular/material/icon";
11
12
  import * as i6 from "@angular/material/button";
12
13
  import * as i7 from "@angular/material/form-field";
13
14
  import * as i8 from "@angular/material/input";
14
- import * as i9 from "@angular/material/progress-bar";
15
+ import * as i9 from "@angular/material/progress-spinner";
15
16
  import * as i10 from "@angular/material/radio";
16
17
  export class UnbPessoaPesquisarComponent {
17
18
  constructor(pessoaService, snackBar) {
@@ -22,6 +23,7 @@ export class UnbPessoaPesquisarComponent {
22
23
  this.pesquisarPorCPF = true;
23
24
  this.pesquisarPorCNPJ = true;
24
25
  this.pesquisarPorEstrangeiro = true;
26
+ this.campoPesquisaMaxWidth = '400px';
25
27
  this.pessoaEmitted = new EventEmitter();
26
28
  this.pessoa = new UnbPessoaModel();
27
29
  this.mostrarPesquisa = true;
@@ -31,6 +33,9 @@ export class UnbPessoaPesquisarComponent {
31
33
  this.hint = ""; // dica que aparece debaixo do campo
32
34
  // usado pra saber se mostra ou nao o botao de incluir pessoa
33
35
  this.pessoaEncontrado = false;
36
+ this.listaTipoEndereco = [];
37
+ this.listaTipoTelefone = [];
38
+ this.listaTipoEmail = [];
34
39
  }
35
40
  ngOnInit() {
36
41
  if (this.apiPessoaConfig.url.endsWith('/')) {
@@ -50,6 +55,21 @@ export class UnbPessoaPesquisarComponent {
50
55
  }
51
56
  // inicializa o serviço com a configuração da API
52
57
  this.pessoaService.setApiConfig(this.apiPessoaConfig);
58
+ forkJoin({
59
+ tiposEnd: this.pessoaService.getTipoEndereco(),
60
+ tiposTel: this.pessoaService.getTipoTelefone(),
61
+ tiposEmail: this.pessoaService.getTipoEmail()
62
+ }).subscribe({
63
+ next: ({ tiposEnd, tiposTel, tiposEmail }) => {
64
+ this.listaTipoEndereco = tiposEnd;
65
+ this.listaTipoTelefone = tiposTel;
66
+ this.listaTipoEmail = tiposEmail;
67
+ },
68
+ error: (err) => {
69
+ this.handleError("Falha ao carregar dados de apoio. Recarregue a página.");
70
+ console.error("Erro no forkJoin do pesquisar:", err);
71
+ }
72
+ });
53
73
  // Conta quantos dos inputs estão como true
54
74
  const opcoesAtivas = [this.pesquisarPorCPF, this.pesquisarPorCNPJ, this.pesquisarPorEstrangeiro].filter(op => op).length;
55
75
  // Exibe a opcao do tipo de pessoa, somente se mais de um estiver selecionado
@@ -147,20 +167,95 @@ export class UnbPessoaPesquisarComponent {
147
167
  }
148
168
  return true;
149
169
  }
170
+ // Em unb-pessoa-pesquisar.component.ts
150
171
  hadleResult(resultado) {
151
172
  this.isLoading = false;
152
173
  if (resultado) {
153
174
  resultado.tipoPessoa = this.pessoa.tipoPessoa; // o backend nao retorna o tipo pessoa. entao tenho que atribuir antes
154
175
  this.pessoa = resultado;
176
+ // --- SEÇÃO DE LIMPEZA DE DADOS PRINCIPAIS (VOCÊ JÁ TINHA) ---
177
+ if (this.pessoa.sexo) {
178
+ if (this.pessoa.sexo.toUpperCase().trim() === 'FEMININO') {
179
+ this.pessoa.codigoSexo = 2;
180
+ }
181
+ else if (this.pessoa.sexo.toUpperCase().trim() === 'MASCULINO') {
182
+ this.pessoa.codigoSexo = 1;
183
+ }
184
+ }
185
+ if (this.pessoa.dataNascimento) {
186
+ this.pessoa.dataNascimento = this.parseData(this.pessoa.dataNascimento);
187
+ }
188
+ if (this.pessoa.estadoCivil) {
189
+ this.pessoa.codigoEstadoCivil = this.parseCodigo(this.pessoa.estadoCivil);
190
+ }
191
+ if (this.pessoa.paisNascimento) {
192
+ this.pessoa.codigoPaisNascimento = this.parseCodigo(this.pessoa.paisNascimento);
193
+ }
194
+ if (this.pessoa.escolaridade) {
195
+ this.pessoa.escolaridade = this.parseCodigo(this.pessoa.escolaridade);
196
+ }
197
+ // 1. Processa Endereços
198
+ // O payload 'salvar' espera: ordemEndereco, tipoEnderecoCodigo, paisEnderecoCodigo, ufEndereco
199
+ // 1. Processa Endereços
200
+ if (this.pessoa.enderecos && this.listaTipoEndereco.length > 0) {
201
+ // --- CORREÇÃO: Adicionado 'i' ao forEach ---
202
+ this.pessoa.enderecos.forEach((end, i) => {
203
+ // Traduz o 'tipo' (string) para 'tipoEnderecoCodigo' (number)
204
+ if (!end.tipoEnderecoCodigo && end.tipo) {
205
+ const tipoEncontrado = this.listaTipoEndereco.find(t => t.denominacao?.toLowerCase() === end.tipo?.toLowerCase());
206
+ if (tipoEncontrado)
207
+ end.tipoEnderecoCodigo = tipoEncontrado.codigo;
208
+ }
209
+ // Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)
210
+ if (!end.paisEnderecoCodigo && end.pais) {
211
+ end.paisEnderecoCodigo = this.parseCodigo(end.pais);
212
+ }
213
+ // Mapeia 'ordem' -> 'ordemEndereco' ou usa o índice (i + 1)
214
+ // O payload de salvar (no form) espera 'ordemEndereco'
215
+ end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);
216
+ // Mapeia 'uf' -> 'ufEndereco'
217
+ if (!end.ufEndereco && end.uf) {
218
+ end.ufEndereco = end.uf;
219
+ }
220
+ });
221
+ }
222
+ // 2. Processa Telefones
223
+ if (this.pessoa.telefones && this.listaTipoTelefone.length > 0) {
224
+ // --- CORREÇÃO: Adicionado 'i' ao forEach ---
225
+ this.pessoa.telefones.forEach((tel, i) => {
226
+ if (!tel.tipoTelefoneCodigo && tel.tipo) {
227
+ const tipoEncontrado = this.listaTipoTelefone.find(t => t.denominacao?.toLowerCase() === tel.tipo?.toLowerCase());
228
+ if (tipoEncontrado)
229
+ tel.tipoTelefoneCodigo = tipoEncontrado.codigo;
230
+ }
231
+ // --- CORREÇÃO: Lógica da Ordem ---
232
+ // O payload de salvar (no form) lê 'tel.ordem'
233
+ tel.ordem = tel.ordem || (i + 1);
234
+ });
235
+ }
236
+ // 3. Processa Emails
237
+ if (this.pessoa.emails && this.listaTipoEmail.length > 0) {
238
+ // --- CORREÇÃO: Adicionado 'i' ao forEach ---
239
+ this.pessoa.emails.forEach((email, i) => {
240
+ if (!email.tipoEmailCodigo && email.tipo) {
241
+ const tipoEncontrado = this.listaTipoEmail.find(t => t.denominacao?.toLowerCase() === email.tipo?.toLowerCase());
242
+ if (tipoEncontrado)
243
+ email.tipoEmailCodigo = tipoEncontrado.codigo;
244
+ }
245
+ // --- CORREÇÃO: Lógica da Ordem ---
246
+ // O payload de salvar (no form) lê 'email.ordem'
247
+ email.ordem = email.ordem || (i + 1);
248
+ });
249
+ }
155
250
  if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {
156
- this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf); // voltou pro formato original (isso evita formartar novamente)
251
+ this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf);
157
252
  }
158
253
  else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {
159
- this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj); // voltou pro formato original (isso evita formartar novamente)
254
+ this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);
160
255
  }
161
256
  }
162
257
  else {
163
- // se chegar aki eh pq nao encontrou, entao temos que emitir um resultado com codigoPessoa vazio mas com os criterios usado na pesquisa
258
+ // se chegar aki eh pq nao encontrou... (lógica que existe)
164
259
  let novaPessoa = new UnbPessoaModel();
165
260
  novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;
166
261
  if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {
@@ -172,11 +267,47 @@ export class UnbPessoaPesquisarComponent {
172
267
  else {
173
268
  novaPessoa.passaporte = this.pessoa.passaporte;
174
269
  }
175
- // agora sobreescrevemos, pq se tiver uma pessoa pesquisada com resultado correto, e pesquisar novamente, precisamos apagar a primeira pessoa.
176
270
  this.pessoa = novaPessoa;
177
271
  }
178
272
  this.pessoaEmitted.emit(this.pessoa);
179
273
  }
274
+ parseCodigo(valorString) {
275
+ if (typeof valorString === 'number') {
276
+ return valorString; // Já é um número
277
+ }
278
+ if (typeof valorString !== 'string' || !valorString.includes(' - ')) {
279
+ // Tenta converter direto, caso o backend mande só o número como string
280
+ const num = parseInt(valorString, 10);
281
+ return isNaN(num) ? null : num;
282
+ }
283
+ const partes = valorString.split(' - ');
284
+ const codigo = parseInt(partes[0].trim(), 10);
285
+ return isNaN(codigo) ? null : codigo;
286
+ }
287
+ /**
288
+ * Converte uma string no formato 'dd/MM/yyyy' para um objeto Date.
289
+ * Retorna null se o formato for inválido.
290
+ */
291
+ parseData(dataString) {
292
+ if (dataString instanceof Date) {
293
+ return dataString; // Já é um objeto Date
294
+ }
295
+ if (typeof dataString !== 'string' || !dataString.includes('/')) {
296
+ return null;
297
+ }
298
+ const partes = dataString.split('/'); // [dd, MM, yyyy]
299
+ if (partes.length === 3) {
300
+ const dia = parseInt(partes[0], 10);
301
+ const mes = parseInt(partes[1], 10) - 1; // Mês no JS é 0-indexado
302
+ const ano = parseInt(partes[2], 10);
303
+ // Verifica se a data é válida
304
+ const dataObj = new Date(ano, mes, dia);
305
+ if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {
306
+ return dataObj;
307
+ }
308
+ }
309
+ return null; // Formato inválido
310
+ }
180
311
  handleError(erro) {
181
312
  this.openSnackBar(erro);
182
313
  this.isLoading = false;
@@ -196,11 +327,11 @@ export class UnbPessoaPesquisarComponent {
196
327
  return TipoPessoaEnum;
197
328
  }
198
329
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { apiPessoaConfig: "apiPessoaConfig", pesquisarPorCPF: "pesquisarPorCPF", pesquisarPorCNPJ: "pesquisarPorCNPJ", pesquisarPorEstrangeiro: "pesquisarPorEstrangeiro", defaultTipoPessoa: "defaultTipoPessoa", pessoa: "pessoa", mostrarPesquisa: "mostrarPesquisa", limparAposPesquisa: "limparAposPesquisa", label: "label", placeholder: "placeholder", hint: "hint" }, outputs: { pessoaEmitted: "pessoaEmitted" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"form-container\" (ngSubmit)=\"pesquisar()\">\r\n <!-- Tipo da Pessoa. Controlado pelo OnInit -->\r\n <mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar> \r\n <div *ngIf=\"mostrarTipoPessoa\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n \r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button *ngIf=\"!isLoading\" disabled=\"{{isLoading}}\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon> \r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button *ngIf=\"!isLoading\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button *ngIf=\"!isLoading\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { apiPessoaConfig: "apiPessoaConfig", pesquisarPorCPF: "pesquisarPorCPF", pesquisarPorCNPJ: "pesquisarPorCNPJ", pesquisarPorEstrangeiro: "pesquisarPorEstrangeiro", defaultTipoPessoa: "defaultTipoPessoa", campoPesquisaMaxWidth: "campoPesquisaMaxWidth", pessoa: "pessoa", mostrarPesquisa: "mostrarPesquisa", limparAposPesquisa: "limparAposPesquisa", label: "label", placeholder: "placeholder", hint: "hint" }, outputs: { pessoaEmitted: "pessoaEmitted" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\" (ngSubmit)=\"pesquisar()\">\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;justify-content:left}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
200
331
  }
201
332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, decorators: [{
202
333
  type: Component,
203
- args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"form-container\" (ngSubmit)=\"pesquisar()\">\r\n <!-- Tipo da Pessoa. Controlado pelo OnInit -->\r\n <mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar> \r\n <div *ngIf=\"mostrarTipoPessoa\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n \r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button *ngIf=\"!isLoading\" disabled=\"{{isLoading}}\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon> \r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button *ngIf=\"!isLoading\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button *ngIf=\"!isLoading\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>" }]
334
+ args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\" (ngSubmit)=\"pesquisar()\">\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;justify-content:left}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}\n"] }]
204
335
  }], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }], propDecorators: { apiPessoaConfig: [{
205
336
  type: Input
206
337
  }], pesquisarPorCPF: [{
@@ -211,6 +342,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
211
342
  type: Input
212
343
  }], defaultTipoPessoa: [{
213
344
  type: Input
345
+ }], campoPesquisaMaxWidth: [{
346
+ type: Input
214
347
  }], pessoaEmitted: [{
215
348
  type: Output
216
349
  }], pessoa: [{
@@ -226,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
226
359
  }], hint: [{
227
360
  type: Input
228
361
  }] } });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQVF6RCxNQUFNLE9BQU8sMkJBQTJCO0lBbUJ0QyxZQUFvQixhQUErQixFQUFVLFFBQXFCO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWE7UUFsQmxGLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFVCxvQkFBZSxHQUFtQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3pFLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4Qiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFJOUIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUVwRCxXQUFNLEdBQUcs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OzJGRDlCTSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLEtBQUs7K0dBT1IsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBVbmJVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYi11dGlscyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVuYi1wZXNzb2EtcGVzcXVpc2FyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgYXBpUGVzc29hQ29uZmlnOiB7IHVybDogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0gPSB7IHVybDogJycsIHRva2VuOiAnJyB9O1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckNQRiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yQ05QSiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8gPSB0cnVlO1xyXG4gIC8vIGRlZmluZSBvIHRpcG8gcGVzc29hIHBhZHJhby4gQXNpc20sIG8gcmFkaW8gYnV0dG9uIGphaCB2ZW0gbWFyY2FkbyBjb20gbyBxdWUgZm9pIGRlZmluaWRvIGFxdWkuXHJcbiAgQElucHV0KCkgZGVmYXVsdFRpcG9QZXNzb2EhOiBUaXBvUGVzc29hRW51bTtcclxuXHJcbiAgQE91dHB1dCgpIHBlc3NvYUVtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYU1vZGVsPigpO1xyXG4gIFxyXG4gIEBJbnB1dCgpIHBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gIEBJbnB1dCgpIG1vc3RyYXJQZXNxdWlzYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGltcGFyQXBvc1Blc3F1aXNhOiBib29sZWFuID0gZmFsc2U7ICAvLyBpbmRpY2Egc2UgZGV2ZSBsaW1wYXIgbyBjcGYgYXBvcyBwZXNxdWlzYXJcclxuICBASW5wdXQoKSBsYWJlbCA9IFwiRGlnaXRlIG8gQ1BGL0NOUEogb3UgUGFzc2Fwb3J0ZVwiOyAvLyBlaCBvIHF1ZSBtb3N0cmEgbm8gdG9wbyBkbyBjb21wb25lbnRlXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIlwiOyAvLyBlaCBvIHF1ZSBtb3N0cmEgY29tbyBwbGFjZWhvbGRlciB0b3BvIGRvIGNvbXBvbmVudGVcclxuICBASW5wdXQoKSBoaW50ID0gXCJcIjsgLy8gZGljYSBxdWUgYXBhcmVjZSBkZWJhaXhvIGRvIGNhbXBvXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVzc29hU2VydmljZTogVW5CUGVzc29hU2VydmljZSwgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIpIHsgfVxyXG5cclxuICAvLyB1c2FkbyBwcmEgc2FiZXIgc2UgbW9zdHJhIG91IG5hbyBvIGJvdGFvIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgcGVzc29hRW5jb250cmFkbzogQm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICBtb3N0cmFyVGlwb1Blc3NvYSE6IGJvb2xlYW47XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgIHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybCA9IHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybC5zbGljZSgwLCAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYXBpUGVzc29hQ29uZmlnLnVybCBlc3TDoSBudWxsLiBJbnNpcmEgbyBwYXLDom1ldHJvIChhcGlQZXNzb2FDb25maWcpIGNvbSBvIHZhbG9yIHbDoWxpZG8hXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudG9rZW4gPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy50b2tlbiBlc3TDoSBudWxsLiBJbnNpcmEgbyBwYXLDom1ldHJvIChhcGlQZXNzb2FDb25maWcpIGNvbSBvIHZhbG9yIGRvIHRva2VuIGRhIHN1YSBhcGxpY2HDp8Ojb1wiKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGNvbSBiYXJyYSBubyBmaW5hbCwgZXUgcmV0aXJvLiBQcmEgZmljYXIgbm8gcGFkcmFvXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5hcGlQZXNzb2FDb25maWcudXJsID0gdGhpcy5hcGlQZXNzb2FDb25maWcudXJsLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbmljaWFsaXphIG8gc2VydmnDp28gY29tIGEgY29uZmlndXJhw6fDo28gZGEgQVBJXHJcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2Uuc2V0QXBpQ29uZmlnKHRoaXMuYXBpUGVzc29hQ29uZmlnKTtcclxuXHJcbiAgICAvLyBDb250YSBxdWFudG9zIGRvcyBpbnB1dHMgZXN0w6NvIGNvbW8gdHJ1ZVxyXG4gICAgY29uc3Qgb3Bjb2VzQXRpdmFzID0gW3RoaXMucGVzcXVpc2FyUG9yQ1BGLCB0aGlzLnBlc3F1aXNhclBvckNOUEosIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9dLmZpbHRlcihvcCA9PiBvcCkubGVuZ3RoO1xyXG4gICAgLy8gRXhpYmUgYSBvcGNhbyBkbyB0aXBvIGRlIHBlc3NvYSwgc29tZW50ZSBzZSBtYWlzIGRlIHVtIGVzdGl2ZXIgc2VsZWNpb25hZG9cclxuICAgIGlmIChvcGNvZXNBdGl2YXMgPiAxKSB7XHJcbiAgICAgIHRoaXMubW9zdHJhclRpcG9QZXNzb2EgPSBvcGNvZXNBdGl2YXMgPiAxOyBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGVudGFvIHRlbmhvIHF1ZSBtYXJjYXIgcXVhbCBmb2kgc2VsZWNpb25hZGFcclxuICAgICAgaWYgKHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkZJU0lDQTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3F1aXNhclBvckNOUEopIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0E7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IHBlc3F1aXNhclBvckNQRiwgcGVzcXVpc2FyUG9yQ05QSiBlIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvIGVzdMOhIGZhbHNvLiBNYXJxdWUgcGVsbyBtZW5vcyB1bSBjb21vIHRydWVcIilcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZWxlY2lvbmEgbyByYWRpbyBidXR0b24gcGFkcmFvXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EgJiYgdGhpcy5wZXNxdWlzYXJQb3JDUEYpIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EgJiYgdGhpcy5wZXNxdWlzYXJQb3JDTlBKKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBICYmIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXIoKSB7ICBcclxuICAgIGlmICh0aGlzLnZhbGlkYXIoKSA9PSBmYWxzZSkgcmV0dXJuOyAgXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGxldCBjcGYgPSB0aGlzLnBlc3NvYS5jcGYubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdD0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0PSB0aGlzLnBlc3NvYVNlcnZpY2UuZmluZEJ5Q25waihjbnBqKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICByZXN1bHQ9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlQYXNzYXBvcnRlKHRoaXMucGVzc29hLnBhc3NhcG9ydGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgcmVzdWx0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogdGhpcy5oYWRsZVJlc3VsdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4gIHtcclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciB2w6FsaWRvIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnRva2VuID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudG9rZW4gZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciBkbyB0b2tlbiBkYSBzdWEgYXBsaWNhw6fDo29cIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY3BmID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNwZiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNwZiA9PSBcIlwiKSl7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNQRiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW8uXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ1BGKHRoaXMucGVzc29hLmNwZikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENQRlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jbnBqID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNucGogIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5jbnBqID09IFwiXCIpKXtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiQ05QSiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoIVVuYlV0aWxzLnZhbGlkYXJDTlBKKHRoaXMucGVzc29hLmNucGopKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkRpZ2l0ZSB1bSB2YWxvciB2w6FsaWRvIHBhcmEgbyBDTlBKIVwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlID09IG51bGwgfHwgKHRoaXMucGVzc29hLnBhc3NhcG9ydGUgIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlID09IFwiXCIpKXtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJTZWxlY2lvbmUgdW0gdGlwbyBkZSBwZXNzb2EhXCIpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTsgICAgXHJcbiAgfVxyXG5cclxuICBoYWRsZVJlc3VsdChyZXN1bHRhZG86IFVuYlBlc3NvYU1vZGVsKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0YWRvKSB7XHJcbiAgICAgIHJlc3VsdGFkby50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTsgLy8gbyBiYWNrZW5kIG5hbyByZXRvcm5hIG8gdGlwbyBwZXNzb2EuIGVudGFvIHRlbmhvIHF1ZSBhdHJpYnVpciBhbnRlc1xyXG4gICAgICB0aGlzLnBlc3NvYSA9IHJlc3VsdGFkbztcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY3BmID0gVW5iVXRpbHMuZm9ybWF0YUNwZihyZXN1bHRhZG8uY3BmKTsgLy8gdm9sdG91IHBybyBmb3JtYXRvIG9yaWdpbmFsIChpc3NvIGV2aXRhIGZvcm1hcnRhciBub3ZhbWVudGUpXHJcbiAgICAgIH1lbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY25waiA9IFVuYlV0aWxzLmZvcm1hdGFDbnBqKHJlc3VsdGFkby5jbnBqKTsgLy8gdm9sdG91IHBybyBmb3JtYXRvIG9yaWdpbmFsIChpc3NvIGV2aXRhIGZvcm1hcnRhciBub3ZhbWVudGUpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNlIGNoZWdhciBha2kgZWggcHEgbmFvIGVuY29udHJvdSwgZW50YW8gdGVtb3MgcXVlIGVtaXRpciB1bSByZXN1bHRhZG8gY29tIGNvZGlnb1Blc3NvYSB2YXppbyBtYXMgY29tIG9zIGNyaXRlcmlvcyB1c2FkbyBuYSBwZXNxdWlzYVxyXG4gICAgICBsZXQgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgICBub3ZhUGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hO1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNwZiA9IHRoaXMucGVzc29hLmNwZjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jbnBqID0gdGhpcy5wZXNzb2EuY25wajtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub3ZhUGVzc29hLnBhc3NhcG9ydGUgPSB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBhZ29yYSBzb2JyZWVzY3JldmVtb3MsIHBxIHNlIHRpdmVyIHVtYSBwZXNzb2EgcGVzcXVpc2FkYSBjb20gcmVzdWx0YWRvIGNvcnJldG8sIGUgcGVzcXVpc2FyIG5vdmFtZW50ZSwgcHJlY2lzYW1vcyBhcGFnYXIgYSBwcmltZWlyYSBwZXNzb2EuIFxyXG4gICAgICB0aGlzLnBlc3NvYSA9IG5vdmFQZXNzb2E7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTsgICBcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKGVycm86IGFueSkge1xyXG4gICAgdGhpcy5vcGVuU25hY2tCYXIoZXJybyk7ICBcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGFraSwgZW50YW8gbmFvIGVuY29udHJvdSBhIHBlc3NvYS4gTWFzIGRhbW9zIGEgY2hhbmNlIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgICB0aGlzLnBlc3NvYUVuY29udHJhZG8gPSBmYWxzZSAgXHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSAjcGVzc29hRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIiAobmdTdWJtaXQpPVwicGVzcXVpc2FyKClcIj5cclxuICAgIDwhLS0gVGlwbyBkYSBQZXNzb2EuIENvbnRyb2xhZG8gcGVsbyBPbkluaXQgLS0+XHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImlzTG9hZGluZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPiBcclxuICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgYXJpYS1sYWJlbD1cIlRpcG8gZGUgUGVzc29hXCIgWyhuZ01vZGVsKV09XCJwZXNzb2EudGlwb1Blc3NvYVwiICN0aXBvUGVzc29hPVwibmdNb2RlbFwiIG5hbWU9XCJ0aXBvUGVzc29hXCI+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgICAgICAgICAgICB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JDTlBKXCIgICAgICAgICAgIHZhbHVlPVwie3t0aXBvUGVzc29hRW51bSgpLkpVUklESUNBfX1cIj4gUGVzc29hIEp1csOtZGljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JFc3RyYW5nZWlyb1wiICAgIHZhbHVlPVwie3t0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBfX1cIj5Fc3RyYW5nZWlybzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJicmVha1wiPjwvZGl2PlxyXG4gICAgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBXCI+XHJcbiAgICAgIFxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPkNQRjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNwZlwiIG5hbWU9XCJjcGZcIiAjY3BmPVwibmdNb2RlbFwiIHJlcXVpcmVkPXt7dHJ1ZX19Lz4gICAgICAgIFxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNMb2FkaW5nXCIgZGlzYWJsZWQ9XCJ7e2lzTG9hZGluZ319XCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDJweDtcIj5zZWFyY2g8L21hdC1pY29uPiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+UGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLnBhc3NhcG9ydGVcIiBuYW1lPVwicGFzc2Fwb3J0ZVwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0xvYWRpbmdcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUGVzcXVpc2FyXCIgKGNsaWNrKT1cInBlc3F1aXNhcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q05QSjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0xvYWRpbmdcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUGVzcXVpc2FyXCIgKGNsaWNrKT1cInBlc3F1aXNhcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWhDLE1BQU0sT0FBTywyQkFBMkI7SUFrQnRDLFlBQW9CLGFBQStCLEVBQVUsUUFBcUI7UUFBOUQsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQWpCbEYsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVULG9CQUFlLEdBQW1DLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekUsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUUvQiwwQkFBcUIs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aUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgVW5iVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91bmItdXRpbHMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZVRpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXRlbGVmb25lLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWxUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbCc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLXBlc3F1aXNhcicsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGFwaVBlc3NvYUNvbmZpZzogeyB1cmw6IHN0cmluZzsgdG9rZW46IHN0cmluZyB9ID0geyB1cmw6ICcnLCB0b2tlbjogJycgfTtcclxuICBASW5wdXQoKSBwZXNxdWlzYXJQb3JDUEYgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckNOUEogPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkZWZhdWx0VGlwb1Blc3NvYSE6IFRpcG9QZXNzb2FFbnVtO1xyXG4gIEBJbnB1dCgpIGNhbXBvUGVzcXVpc2FNYXhXaWR0aDogc3RyaW5nID0gJzQwMHB4JzsgXHJcbiAgQE91dHB1dCgpIHBlc3NvYUVtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYU1vZGVsPigpO1xyXG5cclxuICBASW5wdXQoKSBwZXNzb2EgPSBuZXcgVW5iUGVzc29hTW9kZWwoKTtcclxuICBASW5wdXQoKSBtb3N0cmFyUGVzcXVpc2E6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxpbXBhckFwb3NQZXNxdWlzYTogYm9vbGVhbiA9IGZhbHNlOyAgLy8gaW5kaWNhIHNlIGRldmUgbGltcGFyIG8gY3BmIGFwb3MgcGVzcXVpc2FyXHJcbiAgQElucHV0KCkgbGFiZWwgPSBcIkRpZ2l0ZSBvIENQRi9DTlBKIG91IFBhc3NhcG9ydGVcIjsgLy8gZWggbyBxdWUgbW9zdHJhIG5vIHRvcG8gZG8gY29tcG9uZW50ZVxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjsgLy8gZWggbyBxdWUgbW9zdHJhIGNvbW8gcGxhY2Vob2xkZXIgdG9wbyBkbyBjb21wb25lbnRlXHJcbiAgQElucHV0KCkgaGludCA9IFwiXCI7IC8vIGRpY2EgcXVlIGFwYXJlY2UgZGViYWl4byBkbyBjYW1wb1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7IH1cclxuXHJcbiAgLy8gdXNhZG8gcHJhIHNhYmVyIHNlIG1vc3RyYSBvdSBuYW8gbyBib3RhbyBkZSBpbmNsdWlyIHBlc3NvYVxyXG4gIHBlc3NvYUVuY29udHJhZG86IEJvb2xlYW4gfCBudWxsID0gZmFsc2U7XHJcbiAgbW9zdHJhclRpcG9QZXNzb2EhOiBib29sZWFuO1xyXG5cclxuICBsaXN0YVRpcG9FbmRlcmVjbzogVW5iUGVzc29hRW5kZXJlY29UaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9UZWxlZm9uZTogVW5iUGVzc29hVGVsZWZvbmVUaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9FbWFpbDogVW5iUGVzc29hRW1haWxUaXBvW10gPSBbXTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5hcGlQZXNzb2FDb25maWcudXJsID0gdGhpcy5hcGlQZXNzb2FDb25maWcudXJsLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgdsOhbGlkbyFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy50b2tlbiA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYXBpUGVzc29hQ29uZmlnLnRva2VuIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgZG8gdG9rZW4gZGEgc3VhIGFwbGljYcOnw6NvXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZSBjaGVnYXIgY29tIGJhcnJhIG5vIGZpbmFsLCBldSByZXRpcm8uIFByYSBmaWNhciBubyBwYWRyYW9cclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwuZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICB0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPSB0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwuc2xpY2UoMCwgLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaWNpYWxpemEgbyBzZXJ2acOnbyBjb20gYSBjb25maWd1cmHDp8OjbyBkYSBBUElcclxuICAgIHRoaXMucGVzc29hU2VydmljZS5zZXRBcGlDb25maWcodGhpcy5hcGlQZXNzb2FDb25maWcpO1xyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgdGlwb3NFbmQ6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW5kZXJlY28oKSxcclxuICAgICAgdGlwb3NUZWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvVGVsZWZvbmUoKSxcclxuICAgICAgdGlwb3NFbWFpbDogdGhpcy5wZXNzb2FTZXJ2aWNlLmdldFRpcG9FbWFpbCgpXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoeyB0aXBvc0VuZCwgdGlwb3NUZWwsIHRpcG9zRW1haWwgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW5kZXJlY28gPSB0aXBvc0VuZDtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb1RlbGVmb25lID0gdGlwb3NUZWw7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9FbWFpbCA9IHRpcG9zRW1haWw7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkZhbGhhIGFvIGNhcnJlZ2FyIGRhZG9zIGRlIGFwb2lvLiBSZWNhcnJlZ3VlIGEgcMOhZ2luYS5cIik7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm8gbm8gZm9ya0pvaW4gZG8gcGVzcXVpc2FyOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcblxyXG5cclxuICAgIC8vIENvbnRhIHF1YW50b3MgZG9zIGlucHV0cyBlc3TDo28gY29tbyB0cnVlXHJcbiAgICBjb25zdCBvcGNvZXNBdGl2YXMgPSBbdGhpcy5wZXNxdWlzYXJQb3JDUEYsIHRoaXMucGVzcXVpc2FyUG9yQ05QSiwgdGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlyb10uZmlsdGVyKG9wID0+IG9wKS5sZW5ndGg7XHJcbiAgICAvLyBFeGliZSBhIG9wY2FvIGRvIHRpcG8gZGUgcGVzc29hLCBzb21lbnRlIHNlIG1haXMgZGUgdW0gZXN0aXZlciBzZWxlY2lvbmFkb1xyXG4gICAgaWYgKG9wY29lc0F0aXZhcyA+IDEpIHtcclxuICAgICAgdGhpcy5tb3N0cmFyVGlwb1Blc3NvYSA9IG9wY29lc0F0aXZhcyA+IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlbnRhbyB0ZW5obyBxdWUgbWFyY2FyIHF1YWwgZm9pIHNlbGVjaW9uYWRhXHJcbiAgICAgIGlmICh0aGlzLnBlc3F1aXNhclBvckNQRikge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JDTlBKKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBwZXNxdWlzYXJQb3JDUEYsIHBlc3F1aXNhclBvckNOUEogZSBwZXNxdWlzYXJQb3JFc3RyYW5nZWlybyBlc3TDoSBmYWxzby4gTWFycXVlIHBlbG8gbWVub3MgdW0gY29tbyB0cnVlXCIpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VsZWNpb25hIG8gcmFkaW8gYnV0dG9uIHBhZHJhb1xyXG4gICAgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ05QSikge1xyXG4gICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5kZWZhdWx0VGlwb1Blc3NvYTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSAmJiB0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGVzcXVpc2FyKCkge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhcigpID09IGZhbHNlKSByZXR1cm47XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGxldCBjcGYgPSB0aGlzLnBlc3NvYS5jcGYubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlDcGYoY3BmKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBsZXQgY25waiA9IHRoaXMucGVzc29hLmNucGoubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlDbnBqKGNucGopO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlQYXNzYXBvcnRlKHRoaXMucGVzc29hLnBhc3NhcG9ydGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgcmVzdWx0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogdGhpcy5oYWRsZVJlc3VsdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFsaWRhcigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciB2w6FsaWRvIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnRva2VuID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudG9rZW4gZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciBkbyB0b2tlbiBkYSBzdWEgYXBsaWNhw6fDo29cIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY3BmID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNwZiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNwZiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDUEYgw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvLlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNQRih0aGlzLnBlc3NvYS5jcGYpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkRpZ2l0ZSB1bSB2YWxvciB2w6FsaWRvIHBhcmEgbyBDUEZcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY25waiA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5jbnBqICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY25waiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDTlBKIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNOUEoodGhpcy5wZXNzb2EuY25waikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENOUEohXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSAhPSBudWxsICYmIHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gXCJcIikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJTZWxlY2lvbmUgdW0gdGlwbyBkZSBwZXNzb2EhXCIpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIEVtIHVuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC50c1xyXG4gIGhhZGxlUmVzdWx0KHJlc3VsdGFkbzogVW5iUGVzc29hTW9kZWwpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlc3VsdGFkbykge1xyXG4gICAgICByZXN1bHRhZG8udGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7IC8vIG8gYmFja2VuZCBuYW8gcmV0b3JuYSBvIHRpcG8gcGVzc29hLiBlbnRhbyB0ZW5obyBxdWUgYXRyaWJ1aXIgYW50ZXNcclxuICAgICAgdGhpcy5wZXNzb2EgPSByZXN1bHRhZG87XHJcblxyXG4gICAgICAvLyAtLS0gU0XDh8ODTyBERSBMSU1QRVpBIERFIERBRE9TIFBSSU5DSVBBSVMgKFZPQ8OKIErDgSBUSU5IQSkgLS0tXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5zZXhvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVzc29hLnNleG8udG9VcHBlckNhc2UoKS50cmltKCkgPT09ICdGRU1JTklOTycpIHtcclxuICAgICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1NleG8gPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2Euc2V4by50b1VwcGVyQ2FzZSgpLnRyaW0oKSA9PT0gJ01BU0NVTElOTycpIHtcclxuICAgICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1NleG8gPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8gPSB0aGlzLnBhcnNlRGF0YSh0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lc3RhZG9DaXZpbCkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNvZGlnb0VzdGFkb0NpdmlsID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5lc3RhZG9DaXZpbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5wYWlzTmFzY2ltZW50bykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5wYWlzTmFzY2ltZW50byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUgPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDEuIFByb2Nlc3NhIEVuZGVyZcOnb3NcclxuICAgICAgLy8gTyBwYXlsb2FkICdzYWx2YXInIGVzcGVyYTogb3JkZW1FbmRlcmVjbywgdGlwb0VuZGVyZWNvQ29kaWdvLCBwYWlzRW5kZXJlY29Db2RpZ28sIHVmRW5kZXJlY29cclxuICAgICAgLy8gMS4gUHJvY2Vzc2EgRW5kZXJlw6dvc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZW5kZXJlY29zICYmIHRoaXMubGlzdGFUaXBvRW5kZXJlY28ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLmVuZGVyZWNvcy5mb3JFYWNoKChlbmQsIGkpID0+IHtcclxuICAgICAgICAgIC8vIFRyYWR1eiBvICd0aXBvJyAoc3RyaW5nKSBwYXJhICd0aXBvRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgICAgICBpZiAoIWVuZC50aXBvRW5kZXJlY29Db2RpZ28gJiYgZW5kLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBlbmQudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFRyYWR1eiAncGFpcycgKHN0cmluZyAnMjIgLSBCUkFTSUwnKSBwYXJhICdwYWlzRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgICAgICBpZiAoIWVuZC5wYWlzRW5kZXJlY29Db2RpZ28gJiYgZW5kLnBhaXMpIHtcclxuICAgICAgICAgICAgZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyA9IHRoaXMucGFyc2VDb2RpZ28oZW5kLnBhaXMpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1hcGVpYSAnb3JkZW0nIC0+ICdvcmRlbUVuZGVyZWNvJyBvdSB1c2EgbyDDrW5kaWNlIChpICsgMSlcclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGVzcGVyYSAnb3JkZW1FbmRlcmVjbydcclxuICAgICAgICAgIGVuZC5vcmRlbUVuZGVyZWNvID0gZW5kLm9yZGVtRW5kZXJlY28gfHwgZW5kLm9yZGVtIHx8IChpICsgMSk7XHJcblxyXG4gICAgICAgICAgLy8gTWFwZWlhICd1ZicgLT4gJ3VmRW5kZXJlY28nXHJcbiAgICAgICAgICBpZiAoIWVuZC51ZkVuZGVyZWNvICYmIGVuZC51Zikge1xyXG4gICAgICAgICAgICBlbmQudWZFbmRlcmVjbyA9IGVuZC51ZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMi4gUHJvY2Vzc2EgVGVsZWZvbmVzXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50ZWxlZm9uZXMgJiYgdGhpcy5saXN0YVRpcG9UZWxlZm9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGVsZWZvbmVzLmZvckVhY2goKHRlbCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0ZWwudGlwb1RlbGVmb25lQ29kaWdvICYmIHRlbC50aXBvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gdGhpcy5saXN0YVRpcG9UZWxlZm9uZS5maW5kKHQgPT4gdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gdGVsLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIHRlbC50aXBvVGVsZWZvbmVDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEzDs2dpY2EgZGEgT3JkZW0gLS0tXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBsw6ogJ3RlbC5vcmRlbSdcclxuICAgICAgICAgIHRlbC5vcmRlbSA9IHRlbC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAzLiBQcm9jZXNzYSBFbWFpbHNcclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVtYWlscyAmJiB0aGlzLmxpc3RhVGlwb0VtYWlsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS5lbWFpbHMuZm9yRWFjaCgoZW1haWwsIGkpID0+IHtcclxuICAgICAgICAgIGlmICghZW1haWwudGlwb0VtYWlsQ29kaWdvICYmIGVtYWlsLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb0VtYWlsLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBlbWFpbC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSBlbWFpbC50aXBvRW1haWxDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEzDs2dpY2EgZGEgT3JkZW0gLS0tXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBsw6ogJ2VtYWlsLm9yZGVtJ1xyXG4gICAgICAgICAgZW1haWwub3JkZW0gPSBlbWFpbC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jcGYgPSBVbmJVdGlscy5mb3JtYXRhQ3BmKHJlc3VsdGFkby5jcGYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jbnBqID0gVW5iVXRpbHMuZm9ybWF0YUNucGoocmVzdWx0YWRvLmNucGopO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gc2UgY2hlZ2FyIGFraSBlaCBwcSBuYW8gZW5jb250cm91Li4uIChsw7NnaWNhIHF1ZSBqw6EgZXhpc3RlKVxyXG4gICAgICBsZXQgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgICBub3ZhUGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hO1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNwZiA9IHRoaXMucGVzc29hLmNwZjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jbnBqID0gdGhpcy5wZXNzb2EuY25wajtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub3ZhUGVzc29hLnBhc3NhcG9ydGUgPSB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBlc3NvYSA9IG5vdmFQZXNzb2E7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXNzb2FFbWl0dGVkLmVtaXQodGhpcy5wZXNzb2EpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUNvZGlnbyh2YWxvclN0cmluZzogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdmFsb3JTdHJpbmc7IC8vIErDoSDDqSB1bSBuw7ptZXJvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nICE9PSAnc3RyaW5nJyB8fCAhdmFsb3JTdHJpbmcuaW5jbHVkZXMoJyAtICcpKSB7XHJcbiAgICAgIC8vIFRlbnRhIGNvbnZlcnRlciBkaXJldG8sIGNhc28gbyBiYWNrZW5kIG1hbmRlIHPDsyBvIG7Dum1lcm8gY29tbyBzdHJpbmdcclxuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQodmFsb3JTdHJpbmcsIDEwKTtcclxuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBudWxsIDogbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRlcyA9IHZhbG9yU3RyaW5nLnNwbGl0KCcgLSAnKTtcclxuICAgIGNvbnN0IGNvZGlnbyA9IHBhcnNlSW50KHBhcnRlc1swXS50cmltKCksIDEwKTtcclxuICAgIHJldHVybiBpc05hTihjb2RpZ28pID8gbnVsbCA6IGNvZGlnbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgbm8gZm9ybWF0byAnZGQvTU0veXl5eScgcGFyYSB1bSBvYmpldG8gRGF0ZS5cclxuICAgKiBSZXRvcm5hIG51bGwgc2UgbyBmb3JtYXRvIGZvciBpbnbDoWxpZG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZURhdGEoZGF0YVN0cmluZzogYW55KTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKGRhdGFTdHJpbmcgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiBkYXRhU3RyaW5nOyAvLyBKw6Egw6kgdW0gb2JqZXRvIERhdGVcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZGF0YVN0cmluZyAhPT0gJ3N0cmluZycgfHwgIWRhdGFTdHJpbmcuaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSBkYXRhU3RyaW5nLnNwbGl0KCcvJyk7IC8vIFtkZCwgTU0sIHl5eXldXHJcbiAgICBpZiAocGFydGVzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBjb25zdCBkaWEgPSBwYXJzZUludChwYXJ0ZXNbMF0sIDEwKTtcclxuICAgICAgY29uc3QgbWVzID0gcGFyc2VJbnQocGFydGVzWzFdLCAxMCkgLSAxOyAvLyBNw6pzIG5vIEpTIMOpIDAtaW5kZXhhZG9cclxuICAgICAgY29uc3QgYW5vID0gcGFyc2VJbnQocGFydGVzWzJdLCAxMCk7XHJcblxyXG4gICAgICAvLyBWZXJpZmljYSBzZSBhIGRhdGEgw6kgdsOhbGlkYVxyXG4gICAgICBjb25zdCBkYXRhT2JqID0gbmV3IERhdGUoYW5vLCBtZXMsIGRpYSk7XHJcbiAgICAgIGlmIChkYXRhT2JqLmdldEZ1bGxZZWFyKCkgPT09IGFubyAmJiBkYXRhT2JqLmdldE1vbnRoKCkgPT09IG1lcyAmJiBkYXRhT2JqLmdldERhdGUoKSA9PT0gZGlhKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFPYmo7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsOyAvLyBGb3JtYXRvIGludsOhbGlkb1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IoZXJybzogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvKTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGFraSwgZW50YW8gbmFvIGVuY29udHJvdSBhIHBlc3NvYS4gTWFzIGRhbW9zIGEgY2hhbmNlIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgICB0aGlzLnBlc3NvYUVuY29udHJhZG8gPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3JQcmludENvbnNvbGUoZXJybzogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvKTtcclxuICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJybyk7XHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ3gnLCB7XHJcbiAgICAgIGR1cmF0aW9uOiA1MDAwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0aXBvUGVzc29hRW51bSgpIHtcclxuICAgIHJldHVybiBUaXBvUGVzc29hRW51bTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInBlc3F1aXNhLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsnLS10YW1hbmhvLW1heGltbyc6IGNhbXBvUGVzcXVpc2FNYXhXaWR0aH1cIiAobmdTdWJtaXQpPVwicGVzcXVpc2FyKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiIGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJUaXBvIGRlIFBlc3NvYVwiIFsobmdNb2RlbCldPVwicGVzc29hLnRpcG9QZXNzb2FcIiAjdGlwb1Blc3NvYT1cIm5nTW9kZWxcIiBuYW1lPVwidGlwb1Blc3NvYVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgICAgICAgICAgICB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckNOUEpcIiAgICAgICAgICAgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0F9fVwiPiBQZXNzb2EgSnVyw61kaWNhPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9cIiAgICB2YWx1ZT1cInt7dGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQX19XCI+RXN0cmFuZ2Vpcm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnJlYWtcIj48L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q1BGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jcGZcIiBuYW1lPVwiY3BmXCIgI2NwZj1cIm5nTW9kZWxcIiByZXF1aXJlZD17e3RydWV9fS8+ICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXHJcbiAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+UGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucGFzc2Fwb3J0ZVwiIG5hbWU9XCJwYXNzYXBvcnRlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZzsgZWxzZSBsb2FkaW5nSWNvblwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nSWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcclxuICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcGlubmVyLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkNOUEo8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==