payload-auth 1.0.2 → 1.1.0

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 (423) hide show
  1. package/dist/better-auth/adapter/index.d.ts +2 -2
  2. package/dist/better-auth/adapter/index.d.ts.map +1 -1
  3. package/dist/better-auth/adapter/index.js +115 -69
  4. package/dist/better-auth/adapter/transform/index.d.ts +22 -10
  5. package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
  6. package/dist/better-auth/adapter/transform/index.js +387 -96
  7. package/dist/better-auth/adapter/types.d.ts +2 -1
  8. package/dist/better-auth/adapter/types.d.ts.map +1 -1
  9. package/dist/better-auth/adapter/types.js +1 -1
  10. package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts +3 -0
  11. package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts.map +1 -0
  12. package/dist/better-auth/plugin/helpers/check-passkey-plugin.js +5 -0
  13. package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts +3 -0
  14. package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts.map +1 -0
  15. package/dist/better-auth/plugin/helpers/check-username-plugin.js +5 -0
  16. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts.map +1 -1
  17. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +8 -8
  18. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +8 -0
  19. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts.map +1 -0
  20. package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
  21. package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts +14 -0
  22. package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts.map +1 -0
  23. package/dist/better-auth/plugin/helpers/get-admin-routes.js +6 -0
  24. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +6 -0
  25. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts.map +1 -0
  26. package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
  27. package/dist/better-auth/plugin/helpers/get-ip.d.ts +1 -1
  28. package/dist/better-auth/plugin/helpers/get-ip.d.ts.map +1 -1
  29. package/dist/better-auth/plugin/helpers/get-ip.js +14 -14
  30. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +3 -0
  31. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +1 -0
  32. package/dist/better-auth/plugin/helpers/get-requst-collection.js +14 -0
  33. package/dist/better-auth/plugin/helpers/index.d.ts +1 -1
  34. package/dist/better-auth/plugin/helpers/index.js +2 -2
  35. package/dist/better-auth/plugin/{lib → helpers}/prepare-session-data.d.ts +3 -3
  36. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -0
  37. package/dist/better-auth/plugin/helpers/prepare-session-data.js +42 -0
  38. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +4 -4
  39. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +1 -1
  40. package/dist/better-auth/plugin/helpers/serialize-cookie.js +34 -34
  41. package/dist/better-auth/plugin/index.d.ts +7 -7
  42. package/dist/better-auth/plugin/index.d.ts.map +1 -1
  43. package/dist/better-auth/plugin/index.js +145 -37
  44. package/dist/better-auth/plugin/{collections → lib/build-collections}/accounts/hooks/sync-password-to-user.d.ts +1 -1
  45. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -0
  46. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +47 -0
  47. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +7 -0
  48. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -0
  49. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +159 -0
  50. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +6 -0
  51. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts.map +1 -0
  52. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
  53. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +3 -0
  54. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts.map +1 -0
  55. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
  56. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +7 -0
  57. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts.map +1 -0
  58. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +107 -0
  59. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +6 -0
  60. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -0
  61. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +196 -0
  62. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +12 -0
  63. package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -0
  64. package/dist/better-auth/plugin/lib/build-collections/index.js +96 -0
  65. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +6 -0
  66. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -0
  67. package/dist/better-auth/plugin/lib/build-collections/invitations.js +91 -0
  68. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +6 -0
  69. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -0
  70. package/dist/better-auth/plugin/lib/build-collections/jwks.js +43 -0
  71. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +6 -0
  72. package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -0
  73. package/dist/better-auth/plugin/lib/build-collections/members.js +71 -0
  74. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +6 -0
  75. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -0
  76. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +98 -0
  77. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +6 -0
  78. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -0
  79. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +113 -0
  80. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +6 -0
  81. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -0
  82. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +67 -0
  83. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +6 -0
  84. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -0
  85. package/dist/better-auth/plugin/lib/build-collections/organizations.js +59 -0
  86. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +6 -0
  87. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -0
  88. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +108 -0
  89. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +8 -0
  90. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -0
  91. package/dist/better-auth/plugin/lib/build-collections/sessions.js +123 -0
  92. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +6 -0
  93. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -0
  94. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +83 -0
  95. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +6 -0
  96. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -0
  97. package/dist/better-auth/plugin/lib/build-collections/teams.js +45 -0
  98. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +6 -0
  99. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -0
  100. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +56 -0
  101. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +8 -0
  102. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts.map +1 -0
  103. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +52 -0
  104. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts +3 -0
  105. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts.map +1 -0
  106. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.js +96 -0
  107. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +13 -0
  108. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts.map +1 -0
  109. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +67 -0
  110. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts +4 -0
  111. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts.map +1 -0
  112. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.js +115 -0
  113. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +3 -0
  114. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts.map +1 -0
  115. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +110 -0
  116. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts +3 -0
  117. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts.map +1 -0
  118. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.js +62 -0
  119. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
  120. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts.map +1 -0
  121. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +42 -0
  122. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +4 -0
  123. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts.map +1 -0
  124. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +79 -0
  125. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts +4 -0
  126. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts.map +1 -0
  127. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.js +153 -0
  128. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-login.d.ts +1 -1
  129. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -0
  130. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +75 -0
  131. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-logout.d.ts +1 -1
  132. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -0
  133. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +74 -0
  134. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +7 -0
  135. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -0
  136. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +45 -0
  137. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/before-login.d.ts +1 -1
  138. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts.map +1 -0
  139. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +18 -0
  140. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +3 -0
  141. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts.map +1 -0
  142. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +14 -0
  143. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/sync-account.d.ts +1 -1
  144. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -0
  145. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +82 -0
  146. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +8 -0
  147. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -0
  148. package/dist/better-auth/plugin/lib/build-collections/users/index.js +345 -0
  149. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +8 -0
  150. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts.map +1 -0
  151. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +31 -0
  152. package/dist/better-auth/plugin/lib/{payload-access.d.ts → build-collections/utils/payload-access.d.ts} +1 -1
  153. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts.map +1 -0
  154. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +64 -0
  155. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +7 -0
  156. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -0
  157. package/dist/better-auth/plugin/lib/build-collections/verifications.js +63 -0
  158. package/dist/better-auth/plugin/lib/{config.d.ts → constants.d.ts} +13 -1
  159. package/dist/better-auth/plugin/lib/constants.d.ts.map +1 -0
  160. package/dist/better-auth/plugin/lib/constants.js +56 -0
  161. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +2 -2
  162. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts.map +1 -1
  163. package/dist/better-auth/plugin/lib/get-payload-auth.js +2 -2
  164. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +4 -4
  165. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts.map +1 -1
  166. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +26 -43
  167. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +4 -3
  168. package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -1
  169. package/dist/better-auth/plugin/lib/init-better-auth.js +7 -7
  170. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +3 -0
  171. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts.map +1 -0
  172. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +8 -0
  173. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
  174. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts.map +1 -0
  175. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +17 -0
  176. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
  177. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -0
  178. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +118 -0
  179. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
  180. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts.map +1 -0
  181. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +58 -0
  182. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
  183. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts.map +1 -0
  184. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +86 -0
  185. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
  186. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts.map +1 -0
  187. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +17 -0
  188. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
  189. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts.map +1 -0
  190. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +17 -0
  191. package/dist/better-auth/plugin/lib/{ensure-password-set-before-create.d.ts → sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts} +1 -1
  192. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts.map +1 -0
  193. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
  194. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts.map +1 -0
  195. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
  196. package/dist/better-auth/plugin/lib/{respect-save-to-jwt-fields-middleware.d.ts → sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts} +6 -6
  197. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -0
  198. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +30 -0
  199. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +8 -0
  200. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts.map +1 -0
  201. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +115 -0
  202. package/dist/better-auth/plugin/payload/components/admin-buttons/index.scss +31 -0
  203. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +11 -0
  204. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts.map +1 -0
  205. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +196 -0
  206. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.scss +131 -0
  207. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts +14 -0
  208. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts.map +1 -0
  209. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.js +111 -0
  210. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.scss +51 -0
  211. package/dist/better-auth/plugin/payload/components/form-header/index.d.ts +9 -0
  212. package/dist/better-auth/plugin/payload/components/form-header/index.d.ts.map +1 -0
  213. package/dist/better-auth/plugin/payload/components/form-header/index.js +23 -0
  214. package/dist/better-auth/plugin/payload/components/form-header/index.scss +8 -0
  215. package/dist/better-auth/plugin/payload/components/icons.d.ts +9 -0
  216. package/dist/better-auth/plugin/payload/components/icons.d.ts.map +1 -0
  217. package/dist/better-auth/plugin/payload/components/icons.js +437 -0
  218. package/dist/better-auth/plugin/payload/components/logo.d.ts +3 -2
  219. package/dist/better-auth/plugin/payload/components/logo.d.ts.map +1 -1
  220. package/dist/better-auth/plugin/payload/components/logo.js +22 -34
  221. package/dist/better-auth/plugin/payload/components/logout-button.d.ts +6 -0
  222. package/dist/better-auth/plugin/payload/components/logout-button.d.ts.map +1 -0
  223. package/dist/better-auth/plugin/payload/components/logout-button.js +27 -0
  224. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +7 -0
  225. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -0
  226. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +8 -0
  227. package/dist/better-auth/plugin/payload/components/styles.css +2 -2
  228. package/dist/better-auth/plugin/payload/components/token-field.d.ts +5 -0
  229. package/dist/better-auth/plugin/payload/components/token-field.d.ts.map +1 -0
  230. package/dist/better-auth/plugin/payload/components/token-field.js +30 -0
  231. package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -3
  232. package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
  233. package/dist/better-auth/plugin/payload/exports/client.js +7 -4
  234. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +9 -5
  235. package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -1
  236. package/dist/better-auth/plugin/payload/exports/rsc.js +10 -6
  237. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +3 -0
  238. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts.map +1 -0
  239. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +8 -0
  240. package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts +15 -0
  241. package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts.map +1 -0
  242. package/dist/better-auth/plugin/payload/utils/generate-metadata.js +74 -0
  243. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +2 -0
  244. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts.map +1 -0
  245. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +23 -0
  246. package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts +12 -0
  247. package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts.map +1 -0
  248. package/dist/better-auth/plugin/payload/views/admin-invite/client.js +92 -0
  249. package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts +11 -0
  250. package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts.map +1 -0
  251. package/dist/better-auth/plugin/payload/views/admin-invite/index.js +84 -0
  252. package/dist/better-auth/plugin/payload/views/admin-invite/index.scss +25 -0
  253. package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts +14 -0
  254. package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts.map +1 -0
  255. package/dist/better-auth/plugin/payload/views/create-first-admin/client.js +95 -0
  256. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +10 -4
  257. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts.map +1 -1
  258. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +124 -92
  259. package/dist/better-auth/plugin/payload/views/create-first-admin/index.scss +29 -0
  260. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +8 -0
  261. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -0
  262. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
  263. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +9 -0
  264. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts.map +1 -0
  265. package/dist/better-auth/plugin/payload/views/forgot-password/index.js +69 -0
  266. package/dist/better-auth/plugin/payload/views/forgot-password/index.scss +0 -0
  267. package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts +5 -0
  268. package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts.map +1 -0
  269. package/dist/better-auth/plugin/payload/views/inactivity/index.js +12 -0
  270. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts +9 -0
  271. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts.map +1 -0
  272. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.js +54 -0
  273. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts +1 -0
  274. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts.map +1 -0
  275. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.js +121 -0
  276. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.scss +31 -0
  277. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts +56 -0
  278. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts.map +1 -0
  279. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.js +3 -0
  280. package/dist/better-auth/plugin/payload/views/login/form/index.d.ts +17 -0
  281. package/dist/better-auth/plugin/payload/views/login/form/index.d.ts.map +1 -0
  282. package/dist/better-auth/plugin/payload/views/login/form/index.js +137 -0
  283. package/dist/better-auth/plugin/payload/views/login/form/index.scss +23 -0
  284. package/dist/better-auth/plugin/payload/views/login/index.d.ts +10 -5
  285. package/dist/better-auth/plugin/payload/views/login/index.d.ts.map +1 -1
  286. package/dist/better-auth/plugin/payload/views/login/index.js +81 -61
  287. package/dist/better-auth/plugin/payload/views/login/index.scss +10 -0
  288. package/dist/better-auth/plugin/payload/views/logout/client.d.ts +8 -0
  289. package/dist/better-auth/plugin/payload/views/logout/client.d.ts.map +1 -0
  290. package/dist/better-auth/plugin/payload/views/logout/client.js +76 -0
  291. package/dist/better-auth/plugin/payload/views/logout/index.d.ts +8 -0
  292. package/dist/better-auth/plugin/payload/views/logout/index.d.ts.map +1 -0
  293. package/dist/better-auth/plugin/payload/views/logout/index.js +14 -0
  294. package/dist/better-auth/plugin/payload/views/logout/index.scss +0 -0
  295. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +7 -0
  296. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts.map +1 -0
  297. package/dist/better-auth/plugin/payload/views/reset-password/client.js +72 -0
  298. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +5 -0
  299. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts.map +1 -0
  300. package/dist/better-auth/plugin/payload/views/reset-password/index.js +81 -0
  301. package/dist/better-auth/plugin/payload/views/reset-password/index.scss +9 -0
  302. package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts +3 -0
  303. package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts.map +1 -0
  304. package/dist/better-auth/plugin/payload/views/reset-password/metadata.js +11 -0
  305. package/dist/better-auth/plugin/types.d.ts +170 -33
  306. package/dist/better-auth/plugin/types.d.ts.map +1 -1
  307. package/dist/better-auth/plugin/types.js +1 -1
  308. package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts +1 -1
  309. package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts.map +1 -1
  310. package/dist/clerk/utils/clerk-user.d.ts +0 -3
  311. package/dist/clerk/utils/clerk-user.d.ts.map +1 -1
  312. package/dist/clerk/utils/clerk-user.js +1 -3
  313. package/dist/clerk/utils/load-clerk-instance.d.ts +1 -1
  314. package/dist/clerk/utils/load-clerk-instance.d.ts.map +1 -1
  315. package/package.json +13 -13
  316. package/LICENSE.md +0 -17
  317. package/dist/better-auth/adapter/dev/bin/run.d.ts +0 -2
  318. package/dist/better-auth/adapter/dev/bin/run.d.ts.map +0 -1
  319. package/dist/better-auth/adapter/dev/bin/run.js +0 -64
  320. package/dist/better-auth/adapter/dev/bin/schema.d.ts +0 -23
  321. package/dist/better-auth/adapter/dev/bin/schema.d.ts.map +0 -1
  322. package/dist/better-auth/adapter/dev/bin/schema.js +0 -160
  323. package/dist/better-auth/adapter/dev/collections.d.ts +0 -4
  324. package/dist/better-auth/adapter/dev/collections.d.ts.map +0 -1
  325. package/dist/better-auth/adapter/dev/collections.js +0 -212
  326. package/dist/better-auth/adapter/dev/index.d.ts +0 -4
  327. package/dist/better-auth/adapter/dev/index.d.ts.map +0 -1
  328. package/dist/better-auth/adapter/dev/index.js +0 -168
  329. package/dist/better-auth/adapter/test/adapter.test.d.ts +0 -2
  330. package/dist/better-auth/adapter/test/adapter.test.d.ts.map +0 -1
  331. package/dist/better-auth/adapter/test/adapter.test.js +0 -181
  332. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +0 -8
  333. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts.map +0 -1
  334. package/dist/better-auth/adapter/test/better-auth-adapter-test.js +0 -425
  335. package/dist/better-auth/adapter/test/schema.test.d.ts +0 -2
  336. package/dist/better-auth/adapter/test/schema.test.d.ts.map +0 -1
  337. package/dist/better-auth/adapter/test/schema.test.js +0 -796
  338. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +0 -24
  339. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts.map +0 -1
  340. package/dist/better-auth/adapter/test/test_payload1/schema.js +0 -177
  341. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +0 -24
  342. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts.map +0 -1
  343. package/dist/better-auth/adapter/test/test_payload2/schema.js +0 -167
  344. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +0 -24
  345. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts.map +0 -1
  346. package/dist/better-auth/adapter/test/test_payload3/schema.js +0 -198
  347. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.d.ts.map +0 -1
  348. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +0 -47
  349. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +0 -7
  350. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts.map +0 -1
  351. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +0 -106
  352. package/dist/better-auth/plugin/collections/users/hooks/after-login.d.ts.map +0 -1
  353. package/dist/better-auth/plugin/collections/users/hooks/after-login.js +0 -71
  354. package/dist/better-auth/plugin/collections/users/hooks/after-logout.d.ts.map +0 -1
  355. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +0 -49
  356. package/dist/better-auth/plugin/collections/users/hooks/before-login.d.ts.map +0 -1
  357. package/dist/better-auth/plugin/collections/users/hooks/before-login.js +0 -18
  358. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +0 -6
  359. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts.map +0 -1
  360. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +0 -33
  361. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +0 -3
  362. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts.map +0 -1
  363. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +0 -14
  364. package/dist/better-auth/plugin/collections/users/hooks/sync-account.d.ts.map +0 -1
  365. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +0 -82
  366. package/dist/better-auth/plugin/lib/auth-strategy.d.ts +0 -9
  367. package/dist/better-auth/plugin/lib/auth-strategy.d.ts.map +0 -1
  368. package/dist/better-auth/plugin/lib/auth-strategy.js +0 -48
  369. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +0 -12
  370. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts.map +0 -1
  371. package/dist/better-auth/plugin/lib/build-collection-configs.js +0 -1558
  372. package/dist/better-auth/plugin/lib/config.d.ts.map +0 -1
  373. package/dist/better-auth/plugin/lib/config.js +0 -44
  374. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.d.ts.map +0 -1
  375. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +0 -24
  376. package/dist/better-auth/plugin/lib/password.d.ts.map +0 -1
  377. package/dist/better-auth/plugin/lib/password.js +0 -63
  378. package/dist/better-auth/plugin/lib/payload-access.d.ts.map +0 -1
  379. package/dist/better-auth/plugin/lib/payload-access.js +0 -64
  380. package/dist/better-auth/plugin/lib/prepare-session-data.d.ts.map +0 -1
  381. package/dist/better-auth/plugin/lib/prepare-session-data.js +0 -42
  382. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.d.ts.map +0 -1
  383. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +0 -30
  384. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +0 -6
  385. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts.map +0 -1
  386. package/dist/better-auth/plugin/lib/sanitize-auth-options.js +0 -298
  387. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +0 -7
  388. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts.map +0 -1
  389. package/dist/better-auth/plugin/payload/components/admin-buttons.js +0 -219
  390. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +0 -2
  391. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts.map +0 -1
  392. package/dist/better-auth/plugin/payload/components/login-redirect.js +0 -6
  393. package/dist/better-auth/plugin/payload/components/logout.d.ts +0 -3
  394. package/dist/better-auth/plugin/payload/components/logout.d.ts.map +0 -1
  395. package/dist/better-auth/plugin/payload/components/logout.js +0 -61
  396. package/dist/better-auth/plugin/payload/components/sign-in.d.ts +0 -4
  397. package/dist/better-auth/plugin/payload/components/sign-in.d.ts.map +0 -1
  398. package/dist/better-auth/plugin/payload/components/sign-in.js +0 -384
  399. package/dist/better-auth/plugin/payload/components/sign-up.d.ts +0 -7
  400. package/dist/better-auth/plugin/payload/components/sign-up.d.ts.map +0 -1
  401. package/dist/better-auth/plugin/payload/components/sign-up.js +0 -503
  402. package/dist/better-auth/plugin/payload/components/ui/button.d.ts +0 -11
  403. package/dist/better-auth/plugin/payload/components/ui/button.d.ts.map +0 -1
  404. package/dist/better-auth/plugin/payload/components/ui/button.js +0 -42
  405. package/dist/better-auth/plugin/payload/components/ui/card.d.ts +0 -10
  406. package/dist/better-auth/plugin/payload/components/ui/card.d.ts.map +0 -1
  407. package/dist/better-auth/plugin/payload/components/ui/card.js +0 -55
  408. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +0 -5
  409. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts.map +0 -1
  410. package/dist/better-auth/plugin/payload/components/ui/checkbox.js +0 -23
  411. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +0 -3
  412. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts.map +0 -1
  413. package/dist/better-auth/plugin/payload/components/ui/cn.js +0 -7
  414. package/dist/better-auth/plugin/payload/components/ui/input.d.ts +0 -4
  415. package/dist/better-auth/plugin/payload/components/ui/input.d.ts.map +0 -1
  416. package/dist/better-auth/plugin/payload/components/ui/input.js +0 -14
  417. package/dist/better-auth/plugin/payload/components/ui/label.d.ts +0 -5
  418. package/dist/better-auth/plugin/payload/components/ui/label.d.ts.map +0 -1
  419. package/dist/better-auth/plugin/payload/components/ui/label.js +0 -15
  420. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +0 -3
  421. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts.map +0 -1
  422. package/dist/better-auth/plugin/payload/components/ui/password-input.js +0 -55
  423. /package/dist/better-auth/plugin/lib/{password.d.ts → sanitize-better-auth-options/utils/password.d.ts} +0 -0
@@ -1,796 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { format } from 'prettier';
3
- import { getPayloadPath } from '../generate-schema/utils';
4
- import { generateSchema } from '../generate-schema';
5
- const PAYLOAD_TEST_DIR_PATH = getPayloadPath('./test/test_payload1');
6
- const PAYLOAD_TEST_DIR_PATH2 = getPayloadPath('./test/test_payload2');
7
- const PAYLOAD_TEST_DIR_PATH3 = getPayloadPath('./test/test_payload3');
8
- describe(`Handle schema generation`, async ()=>{
9
- it('should generate the correct schema with existing schema', async ()=>{
10
- const generate_schema = await generateSchema({
11
- plugins: [
12
- {
13
- schema: {
14
- testTable: {
15
- fields: {
16
- hello: {
17
- type: 'boolean',
18
- required: false
19
- },
20
- hello2: {
21
- type: 'string',
22
- required: true
23
- }
24
- }
25
- }
26
- },
27
- id: 'test'
28
- }
29
- ]
30
- }, {
31
- outputDir: PAYLOAD_TEST_DIR_PATH
32
- });
33
- // console.log(generate_schema);
34
- const hard_coded_schema = await format(`/**
35
- * EXAMPLE COLLECTIONS FOR BETTER AUTH
36
- *
37
- * Below is what your Payload collections should look like.
38
- * Please copy these to your actual collection configs.
39
- * Make sure to add an authStrategy for the users collection if there is one.
40
- *
41
- * Example auth strategy:
42
- * auth: {
43
- * disableLocalStrategy: true,
44
- * strategies: [
45
- * betterAuthStrategy(),
46
- * // Add other strategies as needed
47
- * ],
48
- * },
49
- */
50
- import type { CollectionConfig } from "payload";
51
-
52
- const User: CollectionConfig = {
53
- slug: "user",
54
- admin: {
55
- useAsTitle: "name",
56
- },
57
- fields: [
58
- {
59
- name: "name",
60
- type: "text",
61
- required: true,
62
- },
63
- {
64
- name: "email",
65
- type: "email",
66
- required: true,
67
- unique: true,
68
- },
69
- {
70
- name: "emailVerified",
71
- type: "checkbox",
72
- required: true,
73
- },
74
- {
75
- name: "image",
76
- type: "upload",
77
- relationTo: "media",
78
- },
79
- ],
80
- timestamps: true,
81
- } as const;
82
-
83
- const Session: CollectionConfig = {
84
- slug: "session",
85
- admin: {
86
- useAsTitle: "expiresAt",
87
- },
88
- fields: [
89
- {
90
- name: "expiresAt",
91
- type: "date",
92
- required: true,
93
- },
94
- {
95
- name: "token",
96
- type: "text",
97
- required: true,
98
- unique: true,
99
- },
100
- {
101
- name: "ipAddress",
102
- type: "text",
103
- },
104
- {
105
- name: "userAgent",
106
- type: "text",
107
- },
108
- {
109
- name: "userId",
110
- type: "relationship",
111
- required: true,
112
- relationTo: "user",
113
- },
114
- ],
115
- timestamps: true,
116
- } as const;
117
-
118
- const Account: CollectionConfig = {
119
- slug: "account",
120
- admin: {
121
- useAsTitle: "accountId",
122
- },
123
- fields: [
124
- {
125
- name: "accountId",
126
- type: "text",
127
- required: true,
128
- },
129
- {
130
- name: "providerId",
131
- type: "text",
132
- required: true,
133
- },
134
- {
135
- name: "userId",
136
- type: "relationship",
137
- required: true,
138
- relationTo: "user",
139
- },
140
- {
141
- name: "accessToken",
142
- type: "text",
143
- },
144
- {
145
- name: "refreshToken",
146
- type: "text",
147
- },
148
- {
149
- name: "idToken",
150
- type: "text",
151
- },
152
- {
153
- name: "accessTokenExpiresAt",
154
- type: "date",
155
- },
156
- {
157
- name: "refreshTokenExpiresAt",
158
- type: "date",
159
- },
160
- {
161
- name: "scope",
162
- type: "text",
163
- },
164
- {
165
- name: "password",
166
- type: "text",
167
- },
168
- ],
169
- timestamps: true,
170
- } as const;
171
-
172
- const Verification: CollectionConfig = {
173
- slug: "verification",
174
- admin: {
175
- useAsTitle: "identifier",
176
- },
177
- fields: [
178
- {
179
- name: "identifier",
180
- type: "text",
181
- required: true,
182
- },
183
- {
184
- name: "value",
185
- type: "text",
186
- required: true,
187
- },
188
- {
189
- name: "expiresAt",
190
- type: "date",
191
- required: true,
192
- },
193
- ],
194
- timestamps: true,
195
- } as const;
196
-
197
- const TestTable: CollectionConfig = {
198
- slug: "testTable",
199
- admin: {
200
- useAsTitle: "hello",
201
- },
202
- fields: [
203
- {
204
- name: "hello",
205
- type: "checkbox",
206
- },
207
- {
208
- name: "hello2",
209
- type: "text",
210
- required: true,
211
- },
212
- ],
213
- timestamps: true,
214
- } as const;
215
-
216
- export { User, Session, Account, Verification, TestTable };
217
-
218
- `, {
219
- filepath: 'schema.ts'
220
- });
221
- // if (generate_schema !== hard_coded_schema) {
222
- // console.log(`\n\n\n--------------------------------- Generated:`);
223
- // console.log(generate_schema);
224
- // console.log(`--------------------------------- Hard-coded:`);
225
- // console.log(hard_coded_schema);
226
- // console.log(`---------------------------------\n\n\n`);
227
- // }
228
- expect(generate_schema).toEqual(hard_coded_schema);
229
- });
230
- // it("should generate the correct schema based on multiple plugins", async () => {
231
- // const generate_schema = await generateSchema(
232
- // {
233
- // plugins: [
234
- // {
235
- // schema: {
236
- // user: {
237
- // fields: {},
238
- // },
239
- // admins: {
240
- // fields: {},
241
- // },
242
- // },
243
- // id: "test",
244
- // },
245
- // ],
246
- // },
247
- // {
248
- // payload_dir_path: PAYLOAD_TEST_DIR_PATH2,
249
- // }
250
- // );
251
- // const hard_coded_schema = await format(
252
- // `/**
253
- // * EXAMPLE COLLECTIONS FOR BETTER AUTH
254
- // *
255
- // * Below is what your Payload collections should look like.
256
- // * Please copy these to your actual collection configs.
257
- // * Make sure to add an authStrategy for the users collection if there is one.
258
- // *
259
- // * Example auth strategy:
260
- // * auth: {
261
- // * disableLocalStrategy: true,
262
- // * strategies: [
263
- // * betterAuthStrategy(),
264
- // * // Add other strategies as needed
265
- // * ],
266
- // * },
267
- // */
268
- // import type { CollectionConfig } from "payload";
269
- // const User: CollectionConfig = {
270
- // slug: "user",
271
- // admin: {
272
- // useAsTitle: "name",
273
- // },
274
- // fields: [
275
- // {
276
- // name: "name",
277
- // type: "text",
278
- // required: true,
279
- // },
280
- // {
281
- // name: "email",
282
- // type: "email",
283
- // required: true,
284
- // unique: true,
285
- // },
286
- // {
287
- // name: "emailVerified",
288
- // type: "checkbox",
289
- // required: true,
290
- // defaultValue: false,
291
- // },
292
- // {
293
- // name: "image",
294
- // type: "upload",
295
- // relationTo: "media",
296
- // },
297
- // ],
298
- // timestamps: true,
299
- // } as const;
300
- // const Session: CollectionConfig = {
301
- // slug: "session",
302
- // admin: {
303
- // useAsTitle: "expiresAt",
304
- // },
305
- // fields: [
306
- // {
307
- // name: "expiresAt",
308
- // type: "date",
309
- // required: true,
310
- // },
311
- // {
312
- // name: "token",
313
- // type: "text",
314
- // required: true,
315
- // unique: true,
316
- // },
317
- // {
318
- // name: "ipAddress",
319
- // type: "text",
320
- // },
321
- // {
322
- // name: "userAgent",
323
- // type: "text",
324
- // },
325
- // {
326
- // name: "userId",
327
- // type: "relationship",
328
- // relationTo: "user",
329
- // required: true,
330
- // },
331
- // ],
332
- // timestamps: true,
333
- // } as const;
334
- // const Account: CollectionConfig = {
335
- // slug: "account",
336
- // admin: {
337
- // useAsTitle: "accountId",
338
- // },
339
- // fields: [
340
- // {
341
- // name: "accountId",
342
- // type: "text",
343
- // required: true,
344
- // },
345
- // {
346
- // name: "providerId",
347
- // type: "text",
348
- // required: true,
349
- // },
350
- // {
351
- // name: "userId",
352
- // type: "relationship",
353
- // relationTo: "user",
354
- // required: true,
355
- // },
356
- // {
357
- // name: "accessToken",
358
- // type: "text",
359
- // },
360
- // {
361
- // name: "refreshToken",
362
- // type: "text",
363
- // },
364
- // {
365
- // name: "idToken",
366
- // type: "text",
367
- // },
368
- // {
369
- // name: "accessTokenExpiresAt",
370
- // type: "date",
371
- // },
372
- // {
373
- // name: "refreshTokenExpiresAt",
374
- // type: "date",
375
- // },
376
- // {
377
- // name: "scope",
378
- // type: "text",
379
- // },
380
- // {
381
- // name: "password",
382
- // type: "text",
383
- // },
384
- // ],
385
- // timestamps: true,
386
- // } as const;
387
- // const Verification: CollectionConfig = {
388
- // slug: "verification",
389
- // admin: {
390
- // useAsTitle: "identifier",
391
- // },
392
- // fields: [
393
- // {
394
- // name: "identifier",
395
- // type: "text",
396
- // required: true,
397
- // },
398
- // {
399
- // name: "value",
400
- // type: "text",
401
- // required: true,
402
- // },
403
- // {
404
- // name: "expiresAt",
405
- // type: "date",
406
- // required: true,
407
- // },
408
- // ],
409
- // timestamps: true,
410
- // } as const;
411
- // const Admins: CollectionConfig = {
412
- // slug: "admins",
413
- // admin: {
414
- // useAsTitle: "id",
415
- // },
416
- // fields: [],
417
- // timestamps: true,
418
- // } as const;
419
- // export { User, Session, Account, Verification, Admins };
420
- // `,
421
- // { filepath: "schema.ts" }
422
- // );
423
- // if (generate_schema !== hard_coded_schema) {
424
- // console.log(`\n\n\n--------------------------------- Generated:`);
425
- // console.log(generate_schema);
426
- // console.log(`--------------------------------- Hard-coded:`);
427
- // console.log(hard_coded_schema);
428
- // console.log(`---------------------------------\n\n\n`);
429
- // }
430
- // expect(generate_schema).toBe(hard_coded_schema);
431
- // });
432
- // it(`should generate the correct schema based on multiple different field types`, async () => {
433
- // const generate_schema = await generateSchema(
434
- // {
435
- // plugins: [
436
- // {
437
- // id: "admin",
438
- // schema: {
439
- // admin: {
440
- // fields: {
441
- // name: {
442
- // type: "string",
443
- // required: true,
444
- // },
445
- // id: {
446
- // type: "string",
447
- // required: true,
448
- // },
449
- // isAdmin: {
450
- // type: "boolean",
451
- // required: true,
452
- // },
453
- // status: {
454
- // type: "string",
455
- // required: false,
456
- // },
457
- // date: {
458
- // type: "date",
459
- // },
460
- // number: {
461
- // type: "number",
462
- // },
463
- // str_array: {
464
- // type: "string[]",
465
- // },
466
- // num_array: {
467
- // type: "number[]",
468
- // },
469
- // },
470
- // },
471
- // },
472
- // },
473
- // ],
474
- // },
475
- // {
476
- // payload_dir_path: PAYLOAD_TEST_DIR_PATH3,
477
- // }
478
- // );
479
- // const hard_coded_schema = await format(
480
- // `/**
481
- // * EXAMPLE COLLECTIONS FOR BETTER AUTH
482
- // *
483
- // * Below is what your Payload collections should look like.
484
- // * Please copy these to your actual collection configs.
485
- // * Make sure to add an authStrategy for the users collection if there is one.
486
- // *
487
- // * Example auth strategy:
488
- // * auth: {
489
- // * disableLocalStrategy: true,
490
- // * strategies: [
491
- // * betterAuthStrategy(),
492
- // * // Add other strategies as needed
493
- // * ],
494
- // * },
495
- // */
496
- // import type { CollectionConfig } from "payload";
497
- // const User: CollectionConfig = {
498
- // slug: "user",
499
- // admin: {
500
- // useAsTitle: "name",
501
- // },
502
- // fields: [
503
- // {
504
- // name: "name",
505
- // type: "text",
506
- // required: true,
507
- // },
508
- // {
509
- // name: "email",
510
- // type: "email",
511
- // required: true,
512
- // unique: true,
513
- // },
514
- // {
515
- // name: "emailVerified",
516
- // type: "checkbox",
517
- // required: true,
518
- // defaultValue: false,
519
- // },
520
- // {
521
- // name: "image",
522
- // type: "upload",
523
- // relationTo: "media",
524
- // },
525
- // ],
526
- // timestamps: true,
527
- // } as const;
528
- // const Session: CollectionConfig = {
529
- // slug: "session",
530
- // admin: {
531
- // useAsTitle: "expiresAt",
532
- // },
533
- // fields: [
534
- // {
535
- // name: "expiresAt",
536
- // type: "date",
537
- // required: true,
538
- // },
539
- // {
540
- // name: "token",
541
- // type: "text",
542
- // required: true,
543
- // unique: true,
544
- // },
545
- // {
546
- // name: "ipAddress",
547
- // type: "text",
548
- // },
549
- // {
550
- // name: "userAgent",
551
- // type: "text",
552
- // },
553
- // {
554
- // name: "userId",
555
- // type: "relationship",
556
- // relationTo: "user",
557
- // required: true,
558
- // },
559
- // ],
560
- // timestamps: true,
561
- // } as const;
562
- // const Account: CollectionConfig = {
563
- // slug: "account",
564
- // admin: {
565
- // useAsTitle: "accountId",
566
- // },
567
- // fields: [
568
- // {
569
- // name: "accountId",
570
- // type: "text",
571
- // required: true,
572
- // },
573
- // {
574
- // name: "providerId",
575
- // type: "text",
576
- // required: true,
577
- // },
578
- // {
579
- // name: "userId",
580
- // type: "relationship",
581
- // relationTo: "user",
582
- // required: true,
583
- // },
584
- // {
585
- // name: "accessToken",
586
- // type: "text",
587
- // },
588
- // {
589
- // name: "refreshToken",
590
- // type: "text",
591
- // },
592
- // {
593
- // name: "idToken",
594
- // type: "text",
595
- // },
596
- // {
597
- // name: "accessTokenExpiresAt",
598
- // type: "date",
599
- // },
600
- // {
601
- // name: "refreshTokenExpiresAt",
602
- // type: "date",
603
- // },
604
- // {
605
- // name: "scope",
606
- // type: "text",
607
- // },
608
- // {
609
- // name: "password",
610
- // type: "text",
611
- // },
612
- // ],
613
- // timestamps: true,
614
- // } as const;
615
- // const Verification: CollectionConfig = {
616
- // slug: "verification",
617
- // admin: {
618
- // useAsTitle: "identifier",
619
- // },
620
- // fields: [
621
- // {
622
- // name: "identifier",
623
- // type: "text",
624
- // required: true,
625
- // },
626
- // {
627
- // name: "value",
628
- // type: "text",
629
- // required: true,
630
- // },
631
- // {
632
- // name: "expiresAt",
633
- // type: "date",
634
- // required: true,
635
- // },
636
- // ],
637
- // timestamps: true,
638
- // } as const;
639
- // const Admin: CollectionConfig = {
640
- // slug: "admin",
641
- // admin: {
642
- // useAsTitle: "name",
643
- // },
644
- // fields: [
645
- // {
646
- // name: "name",
647
- // type: "text",
648
- // required: true,
649
- // },
650
- // {
651
- // name: "isAdmin",
652
- // type: "checkbox",
653
- // required: true,
654
- // },
655
- // {
656
- // name: "status",
657
- // type: "text",
658
- // },
659
- // {
660
- // name: "date",
661
- // type: "date",
662
- // },
663
- // {
664
- // name: "number",
665
- // type: "number",
666
- // },
667
- // {
668
- // name: "str_array",
669
- // type: "text",
670
- // },
671
- // {
672
- // name: "num_array",
673
- // type: "text",
674
- // },
675
- // ],
676
- // timestamps: true,
677
- // } as const;
678
- // export { User, Session, Account, Verification, Admin };
679
- // `,
680
- // { filepath: "schema.ts" }
681
- // );
682
- // if (generate_schema !== hard_coded_schema) {
683
- // console.log(`\n\n\n--------------------------------- Generated:`);
684
- // console.log(generate_schema);
685
- // console.log(`--------------------------------- Hard-coded:`);
686
- // console.log(hard_coded_schema);
687
- // console.log(`---------------------------------\n\n\n`);
688
- // }
689
- // expect(generate_schema).toBe(hard_coded_schema);
690
- // });
691
- // test.skip("should support .index method after `defineTable`", async () => {
692
- // const generate_schema = await generateSchema(
693
- // {
694
- // plugins: [
695
- // {
696
- // schema: {
697
- // testTable: {
698
- // fields: {},
699
- // },
700
- // },
701
- // id: "test",
702
- // },
703
- // ],
704
- // },
705
- // {
706
- // payload_dir_path: PAYLOAD_TEST_DIR_PATH3,
707
- // }
708
- // );
709
- // const hard_coded_schema = await format(
710
- // [
711
- // `import {defineSchema,defineTable} from "convex/server";`,
712
- // `import {v} from "convex/values";`,
713
- // ``,
714
- // `export default defineSchema({`,
715
- // default_tables,
716
- // `testTable: defineTable({`,
717
- // `}).index("by_something", ["email"]),`,
718
- // `});`,
719
- // ].join("\n"),
720
- // { filepath: "schema.ts" }
721
- // );
722
- // if (generate_schema !== hard_coded_schema) {
723
- // console.log(`\n\n\n--------------------------------- Generated:`);
724
- // console.log(generate_schema);
725
- // console.log(`--------------------------------- Hard-coded:`);
726
- // console.log(hard_coded_schema);
727
- // console.log(`---------------------------------\n\n\n`);
728
- // }
729
- // expect(generate_schema).toBe(hard_coded_schema);
730
- // });
731
- // it(`should generate references correctly`, async () => {
732
- // const generate_schema = await generateSchema(
733
- // {
734
- // plugins: [
735
- // {
736
- // id: "admin",
737
- // schema: {
738
- // admin: {
739
- // fields: {
740
- // id: {
741
- // type: "string",
742
- // required: true,
743
- // },
744
- // reference_optional: {
745
- // type: "string",
746
- // references: {
747
- // field: "something",
748
- // model: "something_else",
749
- // },
750
- // },
751
- // reference_required: {
752
- // type: "string",
753
- // required: true,
754
- // references: {
755
- // field: "something2",
756
- // model: "something2_else",
757
- // },
758
- // },
759
- // },
760
- // },
761
- // },
762
- // },
763
- // ],
764
- // },
765
- // {
766
- // payload_dir_path: PAYLOAD_TEST_DIR_PATH3,
767
- // }
768
- // );
769
- // const hard_coded_schema = await format(
770
- // [
771
- // `import {defineSchema,defineTable} from "convex/server";`,
772
- // `import {v} from "convex/values";`,
773
- // ``,
774
- // `export default defineSchema({`,
775
- // default_tables,
776
- // `admin: defineTable({`,
777
- // `id: v.id("admin"),`,
778
- // `reference_optional: v.id("something_else"),`,
779
- // `reference_required: v.id("something2_else"),`,
780
- // `}),`,
781
- // `});`,
782
- // ].join("\n"),
783
- // { filepath: "schema.ts" }
784
- // );
785
- // if (generate_schema !== hard_coded_schema) {
786
- // console.log(`\n\n\n--------------------------------- Generated:`);
787
- // console.log(generate_schema);
788
- // console.log(`--------------------------------- Hard-coded:`);
789
- // console.log(hard_coded_schema);
790
- // console.log(`---------------------------------\n\n\n`);
791
- // }
792
- // expect(generate_schema).toBe(hard_coded_schema);
793
- // });
794
- });
795
-
796
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9hZGFwdGVyL3Rlc3Qvc2NoZW1hLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHRlc3QgfSBmcm9tICd2aXRlc3QnXG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdwcmV0dGllcidcbmltcG9ydCB7IGdldFBheWxvYWRQYXRoIH0gZnJvbSAnLi4vZ2VuZXJhdGUtc2NoZW1hL3V0aWxzJ1xuaW1wb3J0IHsgZ2VuZXJhdGVTY2hlbWEgfSBmcm9tICcuLi9nZW5lcmF0ZS1zY2hlbWEnXG5cbmNvbnN0IFBBWUxPQURfVEVTVF9ESVJfUEFUSCA9IGdldFBheWxvYWRQYXRoKCcuL3Rlc3QvdGVzdF9wYXlsb2FkMScpXG5jb25zdCBQQVlMT0FEX1RFU1RfRElSX1BBVEgyID0gZ2V0UGF5bG9hZFBhdGgoJy4vdGVzdC90ZXN0X3BheWxvYWQyJylcbmNvbnN0IFBBWUxPQURfVEVTVF9ESVJfUEFUSDMgPSBnZXRQYXlsb2FkUGF0aCgnLi90ZXN0L3Rlc3RfcGF5bG9hZDMnKVxuXG5kZXNjcmliZShgSGFuZGxlIHNjaGVtYSBnZW5lcmF0aW9uYCwgYXN5bmMgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGdlbmVyYXRlIHRoZSBjb3JyZWN0IHNjaGVtYSB3aXRoIGV4aXN0aW5nIHNjaGVtYScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnZW5lcmF0ZV9zY2hlbWEgPSBhd2FpdCBnZW5lcmF0ZVNjaGVtYShcbiAgICAgIHtcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICB0ZXN0VGFibGU6IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgIGhlbGxvOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGhlbGxvMjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWQ6ICd0ZXN0JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3V0cHV0RGlyOiBQQVlMT0FEX1RFU1RfRElSX1BBVEgsXG4gICAgICB9LFxuICAgIClcblxuICAgIC8vIGNvbnNvbGUubG9nKGdlbmVyYXRlX3NjaGVtYSk7XG5cbiAgICBjb25zdCBoYXJkX2NvZGVkX3NjaGVtYSA9IGF3YWl0IGZvcm1hdChcbiAgICAgIGAvKipcbiAqIEVYQU1QTEUgQ09MTEVDVElPTlMgRk9SIEJFVFRFUiBBVVRIXG4gKlxuICogQmVsb3cgaXMgd2hhdCB5b3VyIFBheWxvYWQgY29sbGVjdGlvbnMgc2hvdWxkIGxvb2sgbGlrZS5cbiAqIFBsZWFzZSBjb3B5IHRoZXNlIHRvIHlvdXIgYWN0dWFsIGNvbGxlY3Rpb24gY29uZmlncy5cbiAqIE1ha2Ugc3VyZSB0byBhZGQgYW4gYXV0aFN0cmF0ZWd5IGZvciB0aGUgdXNlcnMgY29sbGVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuXG4gKlxuICogRXhhbXBsZSBhdXRoIHN0cmF0ZWd5OlxuICogYXV0aDoge1xuICogICBkaXNhYmxlTG9jYWxTdHJhdGVneTogdHJ1ZSxcbiAqICAgc3RyYXRlZ2llczogW1xuICogICAgIGJldHRlckF1dGhTdHJhdGVneSgpLFxuICogICAgIC8vIEFkZCBvdGhlciBzdHJhdGVnaWVzIGFzIG5lZWRlZFxuICogICBdLFxuICogfSxcbiAqL1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSBcInBheWxvYWRcIjtcblxuY29uc3QgVXNlcjogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgc2x1ZzogXCJ1c2VyXCIsXG4gIGFkbWluOiB7XG4gICAgdXNlQXNUaXRsZTogXCJuYW1lXCIsXG4gIH0sXG4gIGZpZWxkczogW1xuICAgIHtcbiAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICAgIHR5cGU6IFwiZW1haWxcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdW5pcXVlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJlbWFpbFZlcmlmaWVkXCIsXG4gICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VcIixcbiAgICAgIHR5cGU6IFwidXBsb2FkXCIsXG4gICAgICByZWxhdGlvblRvOiBcIm1lZGlhXCIsXG4gICAgfSxcbiAgXSxcbiAgdGltZXN0YW1wczogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFNlc3Npb246IENvbGxlY3Rpb25Db25maWcgPSB7XG4gIHNsdWc6IFwic2Vzc2lvblwiLFxuICBhZG1pbjoge1xuICAgIHVzZUFzVGl0bGU6IFwiZXhwaXJlc0F0XCIsXG4gIH0sXG4gIGZpZWxkczogW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiZXhwaXJlc0F0XCIsXG4gICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0b2tlblwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIHVuaXF1ZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaXBBZGRyZXNzXCIsXG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidXNlckFnZW50XCIsXG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidXNlcklkXCIsXG4gICAgICB0eXBlOiBcInJlbGF0aW9uc2hpcFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICByZWxhdGlvblRvOiBcInVzZXJcIixcbiAgICB9LFxuICBdLFxuICB0aW1lc3RhbXBzOiB0cnVlLFxufSBhcyBjb25zdDtcblxuY29uc3QgQWNjb3VudDogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgc2x1ZzogXCJhY2NvdW50XCIsXG4gIGFkbWluOiB7XG4gICAgdXNlQXNUaXRsZTogXCJhY2NvdW50SWRcIixcbiAgfSxcbiAgZmllbGRzOiBbXG4gICAge1xuICAgICAgbmFtZTogXCJhY2NvdW50SWRcIixcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInByb3ZpZGVySWRcIixcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInVzZXJJZFwiLFxuICAgICAgdHlwZTogXCJyZWxhdGlvbnNoaXBcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgcmVsYXRpb25UbzogXCJ1c2VyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFjY2Vzc1Rva2VuXCIsXG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVmcmVzaFRva2VuXCIsXG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaWRUb2tlblwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFjY2Vzc1Rva2VuRXhwaXJlc0F0XCIsXG4gICAgICB0eXBlOiBcImRhdGVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVmcmVzaFRva2VuRXhwaXJlc0F0XCIsXG4gICAgICB0eXBlOiBcImRhdGVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2NvcGVcIixcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwYXNzd29yZFwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgfSxcbiAgXSxcbiAgdGltZXN0YW1wczogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFZlcmlmaWNhdGlvbjogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgc2x1ZzogXCJ2ZXJpZmljYXRpb25cIixcbiAgYWRtaW46IHtcbiAgICB1c2VBc1RpdGxlOiBcImlkZW50aWZpZXJcIixcbiAgfSxcbiAgZmllbGRzOiBbXG4gICAge1xuICAgICAgbmFtZTogXCJpZGVudGlmaWVyXCIsXG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2YWx1ZVwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZXhwaXJlc0F0XCIsXG4gICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHRpbWVzdGFtcHM6IHRydWUsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBUZXN0VGFibGU6IENvbGxlY3Rpb25Db25maWcgPSB7XG4gIHNsdWc6IFwidGVzdFRhYmxlXCIsXG4gIGFkbWluOiB7XG4gICAgdXNlQXNUaXRsZTogXCJoZWxsb1wiLFxuICB9LFxuICBmaWVsZHM6IFtcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbGxvXCIsXG4gICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbGxvMlwiLFxuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0aW1lc3RhbXBzOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHsgVXNlciwgU2Vzc2lvbiwgQWNjb3VudCwgVmVyaWZpY2F0aW9uLCBUZXN0VGFibGUgfTtcblxuYCxcbiAgICAgIHsgZmlsZXBhdGg6ICdzY2hlbWEudHMnIH0sXG4gICAgKVxuXG4gICAgLy8gaWYgKGdlbmVyYXRlX3NjaGVtYSAhPT0gaGFyZF9jb2RlZF9zY2hlbWEpIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGBcXG5cXG5cXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJhdGVkOmApO1xuICAgIC8vICAgY29uc29sZS5sb2coZ2VuZXJhdGVfc2NoZW1hKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFyZC1jb2RlZDpgKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGhhcmRfY29kZWRfc2NoZW1hKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cXG5cXG5gKTtcbiAgICAvLyB9XG4gICAgZXhwZWN0KGdlbmVyYXRlX3NjaGVtYSkudG9FcXVhbChoYXJkX2NvZGVkX3NjaGVtYSlcbiAgfSlcblxuICAvLyAgIGl0KFwic2hvdWxkIGdlbmVyYXRlIHRoZSBjb3JyZWN0IHNjaGVtYSBiYXNlZCBvbiBtdWx0aXBsZSBwbHVnaW5zXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gICAgIGNvbnN0IGdlbmVyYXRlX3NjaGVtYSA9IGF3YWl0IGdlbmVyYXRlU2NoZW1hKFxuICAvLyAgICAgICB7XG4gIC8vICAgICAgICAgcGx1Z2luczogW1xuICAvLyAgICAgICAgICAge1xuICAvLyAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgLy8gICAgICAgICAgICAgICB1c2VyOiB7XG4gIC8vICAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAvLyAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgICAgYWRtaW5zOiB7XG4gIC8vICAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAvLyAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgIGlkOiBcInRlc3RcIixcbiAgLy8gICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgXSxcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgICAge1xuICAvLyAgICAgICAgIHBheWxvYWRfZGlyX3BhdGg6IFBBWUxPQURfVEVTVF9ESVJfUEFUSDIsXG4gIC8vICAgICAgIH1cbiAgLy8gICAgICk7XG5cbiAgLy8gICAgIGNvbnN0IGhhcmRfY29kZWRfc2NoZW1hID0gYXdhaXQgZm9ybWF0KFxuICAvLyAgICAgICBgLyoqXG4gIC8vICAqIEVYQU1QTEUgQ09MTEVDVElPTlMgRk9SIEJFVFRFUiBBVVRIXG4gIC8vICAqXG4gIC8vICAqIEJlbG93IGlzIHdoYXQgeW91ciBQYXlsb2FkIGNvbGxlY3Rpb25zIHNob3VsZCBsb29rIGxpa2UuXG4gIC8vICAqIFBsZWFzZSBjb3B5IHRoZXNlIHRvIHlvdXIgYWN0dWFsIGNvbGxlY3Rpb24gY29uZmlncy5cbiAgLy8gICogTWFrZSBzdXJlIHRvIGFkZCBhbiBhdXRoU3RyYXRlZ3kgZm9yIHRoZSB1c2VycyBjb2xsZWN0aW9uIGlmIHRoZXJlIGlzIG9uZS5cbiAgLy8gICpcbiAgLy8gICogRXhhbXBsZSBhdXRoIHN0cmF0ZWd5OlxuICAvLyAgKiBhdXRoOiB7XG4gIC8vICAqICAgZGlzYWJsZUxvY2FsU3RyYXRlZ3k6IHRydWUsXG4gIC8vICAqICAgc3RyYXRlZ2llczogW1xuICAvLyAgKiAgICAgYmV0dGVyQXV0aFN0cmF0ZWd5KCksXG4gIC8vICAqICAgICAvLyBBZGQgb3RoZXIgc3RyYXRlZ2llcyBhcyBuZWVkZWRcbiAgLy8gICogICBdLFxuICAvLyAgKiB9LFxuICAvLyAgKi9cbiAgLy8gaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSBcInBheWxvYWRcIjtcblxuICAvLyBjb25zdCBVc2VyOiBDb2xsZWN0aW9uQ29uZmlnID0ge1xuICAvLyAgIHNsdWc6IFwidXNlclwiLFxuICAvLyAgIGFkbWluOiB7XG4gIC8vICAgICB1c2VBc1RpdGxlOiBcIm5hbWVcIixcbiAgLy8gICB9LFxuICAvLyAgIGZpZWxkczogW1xuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJlbWFpbFwiLFxuICAvLyAgICAgICB0eXBlOiBcImVtYWlsXCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgICB1bmlxdWU6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcImVtYWlsVmVyaWZpZWRcIixcbiAgLy8gICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiaW1hZ2VcIixcbiAgLy8gICAgICAgdHlwZTogXCJ1cGxvYWRcIixcbiAgLy8gICAgICAgcmVsYXRpb25UbzogXCJtZWRpYVwiLFxuICAvLyAgICAgfSxcbiAgLy8gICBdLFxuICAvLyAgIHRpbWVzdGFtcHM6IHRydWUsXG4gIC8vIH0gYXMgY29uc3Q7XG5cbiAgLy8gY29uc3QgU2Vzc2lvbjogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgLy8gICBzbHVnOiBcInNlc3Npb25cIixcbiAgLy8gICBhZG1pbjoge1xuICAvLyAgICAgdXNlQXNUaXRsZTogXCJleHBpcmVzQXRcIixcbiAgLy8gICB9LFxuICAvLyAgIGZpZWxkczogW1xuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcImV4cGlyZXNBdFwiLFxuICAvLyAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInRva2VuXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgICAgdW5pcXVlOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJpcEFkZHJlc3NcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInVzZXJBZ2VudFwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwidXNlcklkXCIsXG4gIC8vICAgICAgIHR5cGU6IFwicmVsYXRpb25zaGlwXCIsXG4gIC8vICAgICAgIHJlbGF0aW9uVG86IFwidXNlclwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgXSxcbiAgLy8gICB0aW1lc3RhbXBzOiB0cnVlLFxuICAvLyB9IGFzIGNvbnN0O1xuXG4gIC8vIGNvbnN0IEFjY291bnQ6IENvbGxlY3Rpb25Db25maWcgPSB7XG4gIC8vICAgc2x1ZzogXCJhY2NvdW50XCIsXG4gIC8vICAgYWRtaW46IHtcbiAgLy8gICAgIHVzZUFzVGl0bGU6IFwiYWNjb3VudElkXCIsXG4gIC8vICAgfSxcbiAgLy8gICBmaWVsZHM6IFtcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJhY2NvdW50SWRcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJwcm92aWRlcklkXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwidXNlcklkXCIsXG4gIC8vICAgICAgIHR5cGU6IFwicmVsYXRpb25zaGlwXCIsXG4gIC8vICAgICAgIHJlbGF0aW9uVG86IFwidXNlclwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiYWNjZXNzVG9rZW5cIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInJlZnJlc2hUb2tlblwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiaWRUb2tlblwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiYWNjZXNzVG9rZW5FeHBpcmVzQXRcIixcbiAgLy8gICAgICAgdHlwZTogXCJkYXRlXCIsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInJlZnJlc2hUb2tlbkV4cGlyZXNBdFwiLFxuICAvLyAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwic2NvcGVcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInBhc3N3b3JkXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgfSxcbiAgLy8gICBdLFxuICAvLyAgIHRpbWVzdGFtcHM6IHRydWUsXG4gIC8vIH0gYXMgY29uc3Q7XG5cbiAgLy8gY29uc3QgVmVyaWZpY2F0aW9uOiBDb2xsZWN0aW9uQ29uZmlnID0ge1xuICAvLyAgIHNsdWc6IFwidmVyaWZpY2F0aW9uXCIsXG4gIC8vICAgYWRtaW46IHtcbiAgLy8gICAgIHVzZUFzVGl0bGU6IFwiaWRlbnRpZmllclwiLFxuICAvLyAgIH0sXG4gIC8vICAgZmllbGRzOiBbXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiaWRlbnRpZmllclwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInZhbHVlXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiZXhwaXJlc0F0XCIsXG4gIC8vICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgXSxcbiAgLy8gICB0aW1lc3RhbXBzOiB0cnVlLFxuICAvLyB9IGFzIGNvbnN0O1xuXG4gIC8vIGNvbnN0IEFkbWluczogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgLy8gICBzbHVnOiBcImFkbWluc1wiLFxuICAvLyAgIGFkbWluOiB7XG4gIC8vICAgICB1c2VBc1RpdGxlOiBcImlkXCIsXG4gIC8vICAgfSxcbiAgLy8gICBmaWVsZHM6IFtdLFxuICAvLyAgIHRpbWVzdGFtcHM6IHRydWUsXG4gIC8vIH0gYXMgY29uc3Q7XG5cbiAgLy8gZXhwb3J0IHsgVXNlciwgU2Vzc2lvbiwgQWNjb3VudCwgVmVyaWZpY2F0aW9uLCBBZG1pbnMgfTtcbiAgLy8gYCxcbiAgLy8gICAgICAgeyBmaWxlcGF0aDogXCJzY2hlbWEudHNcIiB9XG4gIC8vICAgICApO1xuXG4gIC8vICAgICBpZiAoZ2VuZXJhdGVfc2NoZW1hICE9PSBoYXJkX2NvZGVkX3NjaGVtYSkge1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhgXFxuXFxuXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYXRlZDpgKTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coZ2VuZXJhdGVfc2NoZW1hKTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIYXJkLWNvZGVkOmApO1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhoYXJkX2NvZGVkX3NjaGVtYSk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cXG5cXG5gKTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgZXhwZWN0KGdlbmVyYXRlX3NjaGVtYSkudG9CZShoYXJkX2NvZGVkX3NjaGVtYSk7XG4gIC8vICAgfSk7XG5cbiAgLy8gICBpdChgc2hvdWxkIGdlbmVyYXRlIHRoZSBjb3JyZWN0IHNjaGVtYSBiYXNlZCBvbiBtdWx0aXBsZSBkaWZmZXJlbnQgZmllbGQgdHlwZXNgLCBhc3luYyAoKSA9PiB7XG4gIC8vICAgICBjb25zdCBnZW5lcmF0ZV9zY2hlbWEgPSBhd2FpdCBnZW5lcmF0ZVNjaGVtYShcbiAgLy8gICAgICAge1xuICAvLyAgICAgICAgIHBsdWdpbnM6IFtcbiAgLy8gICAgICAgICAgIHtcbiAgLy8gICAgICAgICAgICAgaWQ6IFwiYWRtaW5cIixcbiAgLy8gICAgICAgICAgICAgc2NoZW1hOiB7XG4gIC8vICAgICAgICAgICAgICAgYWRtaW46IHtcbiAgLy8gICAgICAgICAgICAgICAgIGZpZWxkczoge1xuICAvLyAgICAgICAgICAgICAgICAgICBuYW1lOiB7XG4gIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgLy8gICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgICAgICAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAvLyAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICAgICAgICBpc0FkbWluOiB7XG4gIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gIC8vICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgICAgICAgIHN0YXR1czoge1xuICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gIC8vICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAvLyAgICAgICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICAgICAgICBkYXRlOiB7XG4gIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gIC8vICAgICAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgICAgICAgIG51bWJlcjoge1xuICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gIC8vICAgICAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgICAgICAgIHN0cl9hcnJheToge1xuICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nW11cIixcbiAgLy8gICAgICAgICAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICAgICAgICAgICAgbnVtX2FycmF5OiB7XG4gIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJbXVwiLFxuICAvLyAgICAgICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICBdLFxuICAvLyAgICAgICB9LFxuICAvLyAgICAgICB7XG4gIC8vICAgICAgICAgcGF5bG9hZF9kaXJfcGF0aDogUEFZTE9BRF9URVNUX0RJUl9QQVRIMyxcbiAgLy8gICAgICAgfVxuICAvLyAgICAgKTtcblxuICAvLyAgICAgY29uc3QgaGFyZF9jb2RlZF9zY2hlbWEgPSBhd2FpdCBmb3JtYXQoXG4gIC8vICAgICAgIGAvKipcbiAgLy8gICogRVhBTVBMRSBDT0xMRUNUSU9OUyBGT1IgQkVUVEVSIEFVVEhcbiAgLy8gICpcbiAgLy8gICogQmVsb3cgaXMgd2hhdCB5b3VyIFBheWxvYWQgY29sbGVjdGlvbnMgc2hvdWxkIGxvb2sgbGlrZS5cbiAgLy8gICogUGxlYXNlIGNvcHkgdGhlc2UgdG8geW91ciBhY3R1YWwgY29sbGVjdGlvbiBjb25maWdzLlxuICAvLyAgKiBNYWtlIHN1cmUgdG8gYWRkIGFuIGF1dGhTdHJhdGVneSBmb3IgdGhlIHVzZXJzIGNvbGxlY3Rpb24gaWYgdGhlcmUgaXMgb25lLlxuICAvLyAgKlxuICAvLyAgKiBFeGFtcGxlIGF1dGggc3RyYXRlZ3k6XG4gIC8vICAqIGF1dGg6IHtcbiAgLy8gICogICBkaXNhYmxlTG9jYWxTdHJhdGVneTogdHJ1ZSxcbiAgLy8gICogICBzdHJhdGVnaWVzOiBbXG4gIC8vICAqICAgICBiZXR0ZXJBdXRoU3RyYXRlZ3koKSxcbiAgLy8gICogICAgIC8vIEFkZCBvdGhlciBzdHJhdGVnaWVzIGFzIG5lZWRlZFxuICAvLyAgKiAgIF0sXG4gIC8vICAqIH0sXG4gIC8vICAqL1xuICAvLyBpbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25Db25maWcgfSBmcm9tIFwicGF5bG9hZFwiO1xuXG4gIC8vIGNvbnN0IFVzZXI6IENvbGxlY3Rpb25Db25maWcgPSB7XG4gIC8vICAgc2x1ZzogXCJ1c2VyXCIsXG4gIC8vICAgYWRtaW46IHtcbiAgLy8gICAgIHVzZUFzVGl0bGU6IFwibmFtZVwiLFxuICAvLyAgIH0sXG4gIC8vICAgZmllbGRzOiBbXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gIC8vICAgICAgIHR5cGU6IFwiZW1haWxcIixcbiAgLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICAgIHVuaXF1ZTogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiZW1haWxWZXJpZmllZFwiLFxuICAvLyAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJpbWFnZVwiLFxuICAvLyAgICAgICB0eXBlOiBcInVwbG9hZFwiLFxuICAvLyAgICAgICByZWxhdGlvblRvOiBcIm1lZGlhXCIsXG4gIC8vICAgICB9LFxuICAvLyAgIF0sXG4gIC8vICAgdGltZXN0YW1wczogdHJ1ZSxcbiAgLy8gfSBhcyBjb25zdDtcblxuICAvLyBjb25zdCBTZXNzaW9uOiBDb2xsZWN0aW9uQ29uZmlnID0ge1xuICAvLyAgIHNsdWc6IFwic2Vzc2lvblwiLFxuICAvLyAgIGFkbWluOiB7XG4gIC8vICAgICB1c2VBc1RpdGxlOiBcImV4cGlyZXNBdFwiLFxuICAvLyAgIH0sXG4gIC8vICAgZmllbGRzOiBbXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiZXhwaXJlc0F0XCIsXG4gIC8vICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwidG9rZW5cIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgICB1bmlxdWU6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcImlwQWRkcmVzc1wiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwidXNlckFnZW50XCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJ1c2VySWRcIixcbiAgLy8gICAgICAgdHlwZTogXCJyZWxhdGlvbnNoaXBcIixcbiAgLy8gICAgICAgcmVsYXRpb25UbzogXCJ1c2VyXCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICBdLFxuICAvLyAgIHRpbWVzdGFtcHM6IHRydWUsXG4gIC8vIH0gYXMgY29uc3Q7XG5cbiAgLy8gY29uc3QgQWNjb3VudDogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgLy8gICBzbHVnOiBcImFjY291bnRcIixcbiAgLy8gICBhZG1pbjoge1xuICAvLyAgICAgdXNlQXNUaXRsZTogXCJhY2NvdW50SWRcIixcbiAgLy8gICB9LFxuICAvLyAgIGZpZWxkczogW1xuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcImFjY291bnRJZFwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInByb3ZpZGVySWRcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJ1c2VySWRcIixcbiAgLy8gICAgICAgdHlwZTogXCJyZWxhdGlvbnNoaXBcIixcbiAgLy8gICAgICAgcmVsYXRpb25UbzogXCJ1c2VyXCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJhY2Nlc3NUb2tlblwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwicmVmcmVzaFRva2VuXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJpZFRva2VuXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJhY2Nlc3NUb2tlbkV4cGlyZXNBdFwiLFxuICAvLyAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwicmVmcmVzaFRva2VuRXhwaXJlc0F0XCIsXG4gIC8vICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJzY29wZVwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwicGFzc3dvcmRcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICB9LFxuICAvLyAgIF0sXG4gIC8vICAgdGltZXN0YW1wczogdHJ1ZSxcbiAgLy8gfSBhcyBjb25zdDtcblxuICAvLyBjb25zdCBWZXJpZmljYXRpb246IENvbGxlY3Rpb25Db25maWcgPSB7XG4gIC8vICAgc2x1ZzogXCJ2ZXJpZmljYXRpb25cIixcbiAgLy8gICBhZG1pbjoge1xuICAvLyAgICAgdXNlQXNUaXRsZTogXCJpZGVudGlmaWVyXCIsXG4gIC8vICAgfSxcbiAgLy8gICBmaWVsZHM6IFtcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJpZGVudGlmaWVyXCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwidmFsdWVcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJleHBpcmVzQXRcIixcbiAgLy8gICAgICAgdHlwZTogXCJkYXRlXCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICBdLFxuICAvLyAgIHRpbWVzdGFtcHM6IHRydWUsXG4gIC8vIH0gYXMgY29uc3Q7XG5cbiAgLy8gY29uc3QgQWRtaW46IENvbGxlY3Rpb25Db25maWcgPSB7XG4gIC8vICAgc2x1ZzogXCJhZG1pblwiLFxuICAvLyAgIGFkbWluOiB7XG4gIC8vICAgICB1c2VBc1RpdGxlOiBcIm5hbWVcIixcbiAgLy8gICB9LFxuICAvLyAgIGZpZWxkczogW1xuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgLy8gICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHtcbiAgLy8gICAgICAgbmFtZTogXCJpc0FkbWluXCIsXG4gIC8vICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgLy8gICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInN0YXR1c1wiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwiZGF0ZVwiLFxuICAvLyAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwibnVtYmVyXCIsXG4gIC8vICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gIC8vICAgICB9LFxuICAvLyAgICAge1xuICAvLyAgICAgICBuYW1lOiBcInN0cl9hcnJheVwiLFxuICAvLyAgICAgICB0eXBlOiBcInRleHRcIixcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7XG4gIC8vICAgICAgIG5hbWU6IFwibnVtX2FycmF5XCIsXG4gIC8vICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAvLyAgICAgfSxcbiAgLy8gICBdLFxuICAvLyAgIHRpbWVzdGFtcHM6IHRydWUsXG4gIC8vIH0gYXMgY29uc3Q7XG5cbiAgLy8gZXhwb3J0IHsgVXNlciwgU2Vzc2lvbiwgQWNjb3VudCwgVmVyaWZpY2F0aW9uLCBBZG1pbiB9O1xuICAvLyAgICAgICBgLFxuICAvLyAgICAgICB7IGZpbGVwYXRoOiBcInNjaGVtYS50c1wiIH1cbiAgLy8gICAgICk7XG5cbiAgLy8gICAgIGlmIChnZW5lcmF0ZV9zY2hlbWEgIT09IGhhcmRfY29kZWRfc2NoZW1hKSB7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGBcXG5cXG5cXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJhdGVkOmApO1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhnZW5lcmF0ZV9zY2hlbWEpO1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmQtY29kZWQ6YCk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGhhcmRfY29kZWRfc2NoZW1hKTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblxcblxcbmApO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBleHBlY3QoZ2VuZXJhdGVfc2NoZW1hKS50b0JlKGhhcmRfY29kZWRfc2NoZW1hKTtcbiAgLy8gICB9KTtcblxuICAvLyAgIHRlc3Quc2tpcChcInNob3VsZCBzdXBwb3J0IC5pbmRleCBtZXRob2QgYWZ0ZXIgYGRlZmluZVRhYmxlYFwiLCBhc3luYyAoKSA9PiB7XG4gIC8vICAgICBjb25zdCBnZW5lcmF0ZV9zY2hlbWEgPSBhd2FpdCBnZW5lcmF0ZVNjaGVtYShcbiAgLy8gICAgICAge1xuICAvLyAgICAgICAgIHBsdWdpbnM6IFtcbiAgLy8gICAgICAgICAgIHtcbiAgLy8gICAgICAgICAgICAgc2NoZW1hOiB7XG4gIC8vICAgICAgICAgICAgICAgdGVzdFRhYmxlOiB7XG4gIC8vICAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAvLyAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgIGlkOiBcInRlc3RcIixcbiAgLy8gICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgXSxcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgICAge1xuICAvLyAgICAgICAgIHBheWxvYWRfZGlyX3BhdGg6IFBBWUxPQURfVEVTVF9ESVJfUEFUSDMsXG4gIC8vICAgICAgIH1cbiAgLy8gICAgICk7XG5cbiAgLy8gICAgIGNvbnN0IGhhcmRfY29kZWRfc2NoZW1hID0gYXdhaXQgZm9ybWF0KFxuICAvLyAgICAgICBbXG4gIC8vICAgICAgICAgYGltcG9ydCB7ZGVmaW5lU2NoZW1hLGRlZmluZVRhYmxlfSBmcm9tIFwiY29udmV4L3NlcnZlclwiO2AsXG4gIC8vICAgICAgICAgYGltcG9ydCB7dn0gZnJvbSBcImNvbnZleC92YWx1ZXNcIjtgLFxuICAvLyAgICAgICAgIGBgLFxuICAvLyAgICAgICAgIGBleHBvcnQgZGVmYXVsdCBkZWZpbmVTY2hlbWEoe2AsXG4gIC8vICAgICAgICAgZGVmYXVsdF90YWJsZXMsXG4gIC8vICAgICAgICAgYHRlc3RUYWJsZTogZGVmaW5lVGFibGUoe2AsXG4gIC8vICAgICAgICAgYH0pLmluZGV4KFwiYnlfc29tZXRoaW5nXCIsIFtcImVtYWlsXCJdKSxgLFxuICAvLyAgICAgICAgIGB9KTtgLFxuICAvLyAgICAgICBdLmpvaW4oXCJcXG5cIiksXG4gIC8vICAgICAgIHsgZmlsZXBhdGg6IFwic2NoZW1hLnRzXCIgfVxuICAvLyAgICAgKTtcblxuICAvLyAgICAgaWYgKGdlbmVyYXRlX3NjaGVtYSAhPT0gaGFyZF9jb2RlZF9zY2hlbWEpIHtcbiAgLy8gICAgICAgY29uc29sZS5sb2coYFxcblxcblxcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5lcmF0ZWQ6YCk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGdlbmVyYXRlX3NjaGVtYSk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFyZC1jb2RlZDpgKTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coaGFyZF9jb2RlZF9zY2hlbWEpO1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXFxuXFxuYCk7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGV4cGVjdChnZW5lcmF0ZV9zY2hlbWEpLnRvQmUoaGFyZF9jb2RlZF9zY2hlbWEpO1xuICAvLyAgIH0pO1xuXG4gIC8vICAgaXQoYHNob3VsZCBnZW5lcmF0ZSByZWZlcmVuY2VzIGNvcnJlY3RseWAsIGFzeW5jICgpID0+IHtcbiAgLy8gICAgIGNvbnN0IGdlbmVyYXRlX3NjaGVtYSA9IGF3YWl0IGdlbmVyYXRlU2NoZW1hKFxuICAvLyAgICAgICB7XG4gIC8vICAgICAgICAgcGx1Z2luczogW1xuICAvLyAgICAgICAgICAge1xuICAvLyAgICAgICAgICAgICBpZDogXCJhZG1pblwiLFxuICAvLyAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgLy8gICAgICAgICAgICAgICBhZG1pbjoge1xuICAvLyAgICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gIC8vICAgICAgICAgICAgICAgICAgIGlkOiB7XG4gIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgLy8gICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgLy8gICAgICAgICAgICAgICAgICAgfSxcblxuICAvLyAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Vfb3B0aW9uYWw6IHtcbiAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAvLyAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHtcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBcInNvbWV0aGluZ1wiLFxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IFwic29tZXRoaW5nX2Vsc2VcIixcbiAgLy8gICAgICAgICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfcmVxdWlyZWQ6IHtcbiAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAvLyAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAvLyAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHtcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBcInNvbWV0aGluZzJcIixcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBcInNvbWV0aGluZzJfZWxzZVwiLFxuICAvLyAgICAgICAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgICAgICB9LFxuICAvLyAgICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICB9LFxuICAvLyAgICAgICAgIF0sXG4gIC8vICAgICAgIH0sXG4gIC8vICAgICAgIHtcbiAgLy8gICAgICAgICBwYXlsb2FkX2Rpcl9wYXRoOiBQQVlMT0FEX1RFU1RfRElSX1BBVEgzLFxuICAvLyAgICAgICB9XG4gIC8vICAgICApO1xuXG4gIC8vICAgICBjb25zdCBoYXJkX2NvZGVkX3NjaGVtYSA9IGF3YWl0IGZvcm1hdChcbiAgLy8gICAgICAgW1xuICAvLyAgICAgICAgIGBpbXBvcnQge2RlZmluZVNjaGVtYSxkZWZpbmVUYWJsZX0gZnJvbSBcImNvbnZleC9zZXJ2ZXJcIjtgLFxuICAvLyAgICAgICAgIGBpbXBvcnQge3Z9IGZyb20gXCJjb252ZXgvdmFsdWVzXCI7YCxcbiAgLy8gICAgICAgICBgYCxcbiAgLy8gICAgICAgICBgZXhwb3J0IGRlZmF1bHQgZGVmaW5lU2NoZW1hKHtgLFxuICAvLyAgICAgICAgIGRlZmF1bHRfdGFibGVzLFxuICAvLyAgICAgICAgIGBhZG1pbjogZGVmaW5lVGFibGUoe2AsXG4gIC8vICAgICAgICAgYGlkOiB2LmlkKFwiYWRtaW5cIiksYCxcbiAgLy8gICAgICAgICBgcmVmZXJlbmNlX29wdGlvbmFsOiB2LmlkKFwic29tZXRoaW5nX2Vsc2VcIiksYCxcbiAgLy8gICAgICAgICBgcmVmZXJlbmNlX3JlcXVpcmVkOiB2LmlkKFwic29tZXRoaW5nMl9lbHNlXCIpLGAsXG4gIC8vICAgICAgICAgYH0pLGAsXG4gIC8vICAgICAgICAgYH0pO2AsXG4gIC8vICAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgLy8gICAgICAgeyBmaWxlcGF0aDogXCJzY2hlbWEudHNcIiB9XG4gIC8vICAgICApO1xuXG4gIC8vICAgICBpZiAoZ2VuZXJhdGVfc2NoZW1hICE9PSBoYXJkX2NvZGVkX3NjaGVtYSkge1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhgXFxuXFxuXFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYXRlZDpgKTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coZ2VuZXJhdGVfc2NoZW1hKTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIYXJkLWNvZGVkOmApO1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhoYXJkX2NvZGVkX3NjaGVtYSk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cXG5cXG5gKTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGV4cGVjdChnZW5lcmF0ZV9zY2hlbWEpLnRvQmUoaGFyZF9jb2RlZF9zY2hlbWEpO1xuICAvLyAgIH0pO1xufSlcbiJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImV4cGVjdCIsIml0IiwiZm9ybWF0IiwiZ2V0UGF5bG9hZFBhdGgiLCJnZW5lcmF0ZVNjaGVtYSIsIlBBWUxPQURfVEVTVF9ESVJfUEFUSCIsIlBBWUxPQURfVEVTVF9ESVJfUEFUSDIiLCJQQVlMT0FEX1RFU1RfRElSX1BBVEgzIiwiZ2VuZXJhdGVfc2NoZW1hIiwicGx1Z2lucyIsInNjaGVtYSIsInRlc3RUYWJsZSIsImZpZWxkcyIsImhlbGxvIiwidHlwZSIsInJlcXVpcmVkIiwiaGVsbG8yIiwiaWQiLCJvdXRwdXREaXIiLCJoYXJkX2NvZGVkX3NjaGVtYSIsImZpbGVwYXRoIiwidG9FcXVhbCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxFQUFFQyxNQUFNLEVB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