pepr 0.52.2 → 0.52.3-nightly.1

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 (88) hide show
  1. package/dist/cli/banner.d.ts +1 -1
  2. package/dist/cli/banner.d.ts.map +1 -1
  3. package/dist/cli/{build.helpers.d.ts → build/build.helpers.d.ts} +5 -5
  4. package/dist/cli/build/build.helpers.d.ts.map +1 -0
  5. package/dist/cli/build/buildModule.d.ts +11 -0
  6. package/dist/cli/build/buildModule.d.ts.map +1 -0
  7. package/dist/cli/build/index.d.ts +3 -0
  8. package/dist/cli/build/index.d.ts.map +1 -0
  9. package/dist/cli/build/loadModule.d.ts +11 -0
  10. package/dist/cli/build/loadModule.d.ts.map +1 -0
  11. package/dist/cli/crd/generate/generators.d.ts +1 -28
  12. package/dist/cli/crd/generate/generators.d.ts.map +1 -1
  13. package/dist/cli/deploy/buildAndDeploy.d.ts +5 -0
  14. package/dist/cli/deploy/buildAndDeploy.d.ts.map +1 -0
  15. package/dist/cli/deploy/imagePullSecret.d.ts +16 -0
  16. package/dist/cli/deploy/imagePullSecret.d.ts.map +1 -0
  17. package/dist/cli/deploy/index.d.ts +3 -0
  18. package/dist/cli/deploy/index.d.ts.map +1 -0
  19. package/dist/cli/deploy/userConfirmation.d.ts +4 -0
  20. package/dist/cli/deploy/userConfirmation.d.ts.map +1 -0
  21. package/dist/cli/dev.d.ts.map +1 -1
  22. package/dist/cli/init/templates.d.ts +0 -1
  23. package/dist/cli/init/templates.d.ts.map +1 -1
  24. package/dist/cli/monitor.d.ts +3 -0
  25. package/dist/cli/monitor.d.ts.map +1 -1
  26. package/dist/cli/types.d.ts +14 -0
  27. package/dist/cli/types.d.ts.map +1 -1
  28. package/dist/cli/uuid.d.ts.map +1 -1
  29. package/dist/cli.js +1198 -1215
  30. package/dist/controller.js +24 -11
  31. package/dist/lib/assets/assets.d.ts.map +1 -1
  32. package/dist/lib/assets/environment.d.ts +1 -0
  33. package/dist/lib/assets/environment.d.ts.map +1 -1
  34. package/dist/lib/assets/loader.d.ts.map +1 -1
  35. package/dist/lib/assets/webhooks.d.ts.map +1 -1
  36. package/dist/lib/assets/yaml/generateAllYaml.d.ts +1 -2
  37. package/dist/lib/assets/yaml/generateAllYaml.d.ts.map +1 -1
  38. package/dist/lib/core/storage.d.ts +2 -1
  39. package/dist/lib/core/storage.d.ts.map +1 -1
  40. package/dist/lib/filter/adjudicators/binding.d.ts +2 -1
  41. package/dist/lib/filter/adjudicators/binding.d.ts.map +1 -1
  42. package/dist/lib/filter/adjudicators/kubernetesObject.d.ts +0 -1
  43. package/dist/lib/filter/adjudicators/kubernetesObject.d.ts.map +1 -1
  44. package/dist/lib/processors/mutate-processor.d.ts +2 -1
  45. package/dist/lib/processors/mutate-processor.d.ts.map +1 -1
  46. package/dist/lib/types.d.ts +0 -4
  47. package/dist/lib/types.d.ts.map +1 -1
  48. package/dist/lib.js +7 -7
  49. package/dist/lib.js.map +2 -2
  50. package/dist/runtime/controller.d.ts +1 -1
  51. package/dist/runtime/controller.d.ts.map +1 -1
  52. package/package.json +10 -11
  53. package/src/cli/banner.ts +25 -59
  54. package/src/cli/{build.helpers.ts → build/build.helpers.ts} +15 -21
  55. package/src/cli/build/buildModule.ts +160 -0
  56. package/src/cli/build/index.ts +155 -0
  57. package/src/cli/build/loadModule.ts +54 -0
  58. package/src/cli/crd/generate/generators.ts +6 -6
  59. package/src/cli/deploy/buildAndDeploy.ts +48 -0
  60. package/src/cli/deploy/imagePullSecret.ts +68 -0
  61. package/src/cli/deploy/index.ts +40 -0
  62. package/src/cli/deploy/userConfirmation.ts +16 -0
  63. package/src/cli/dev.ts +4 -3
  64. package/src/cli/monitor.ts +2 -2
  65. package/src/cli/types.ts +26 -0
  66. package/src/cli/uuid.ts +5 -6
  67. package/src/lib/assets/assets.ts +5 -1
  68. package/src/lib/assets/deploy.ts +1 -1
  69. package/src/lib/assets/environment.ts +8 -1
  70. package/src/lib/assets/loader.ts +0 -6
  71. package/src/lib/assets/webhooks.ts +5 -8
  72. package/src/lib/assets/yaml/generateAllYaml.ts +1 -1
  73. package/src/lib/controller/index.ts +3 -3
  74. package/src/lib/controller/store.ts +1 -1
  75. package/src/lib/core/capability.ts +3 -3
  76. package/src/lib/core/storage.ts +1 -1
  77. package/src/lib/filter/adjudicators/binding.ts +2 -1
  78. package/src/lib/filter/adjudicators/kubernetesObject.ts +1 -1
  79. package/src/lib/processors/mutate-processor.ts +1 -1
  80. package/src/lib/types.ts +0 -4
  81. package/src/runtime/controller.ts +8 -14
  82. package/dist/cli/build.d.ts +0 -34
  83. package/dist/cli/build.d.ts.map +0 -1
  84. package/dist/cli/build.helpers.d.ts.map +0 -1
  85. package/dist/cli/deploy.d.ts +0 -21
  86. package/dist/cli/deploy.d.ts.map +0 -1
  87. package/src/cli/build.ts +0 -375
  88. package/src/cli/deploy.ts +0 -169
package/dist/cli.js CHANGED
@@ -7315,73 +7315,33 @@ var require_dist = __commonJS({
7315
7315
  });
7316
7316
 
7317
7317
  // src/cli/banner.ts
7318
- var banner = `\x1B[107;40m\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7319
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7320
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7321
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7322
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7323
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7324
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7325
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7326
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m/\x1B[38;5;m/\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m*\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;m,\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m/\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;234m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7327
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;234m \x1B[38;5;235m.\x1B[38;5;236m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;095m*\x1B[38;5;095m*\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;089m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;m.\x1B[38;5;234m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;089m*\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7328
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;233m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;235m.\x1B[38;5;089m*\x1B[38;5;m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;m,\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;236m.\x1B[38;5;m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m*\x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7329
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;089m*\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;236m.\x1B[38;5;131m*\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;237m,\x1B[38;5;233m \x1B[38;5;235m.\x1B[38;5;m,\x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7330
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;052m.\x1B[38;5;089m,\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;089m*\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;238m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;052m,\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7331
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;235m.\x1B[38;5;052m.\x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;089m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;089m*\x1B[38;5;125m*\x1B[38;5;131m/\x1B[38;5;095m*\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7332
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;m,\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7333
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;089m,\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7334
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m*\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7335
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;232m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;236m.\x1B[38;5;234m \x1B[38;5;234m.\x1B[38;5;095m*\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;089m*\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;237m,\x1B[38;5;131m*\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;125m*\x1B[38;5;052m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7336
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;247m(\x1B[38;5;251m%\x1B[38;5;232m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;089m,\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7337
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;236m.\x1B[38;5;236m.\x1B[38;5;236m.\x1B[38;5;089m*\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;240m*\x1B[38;5;241m*\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;245m(\x1B[38;5;007m%\x1B[38;5;016m \x1B[38;5;237m,\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;053m,\x1B[38;5;052m.\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7338
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;245m(\x1B[38;5;252m%\x1B[38;5;239m*\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;089m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;244m(\x1B[38;5;015m@\x1B[38;5;015m@\x1B[38;5;252m&\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;240m*\x1B[38;5;188m&\x1B[38;5;016m \x1B[38;5;236m.\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7339
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;238m,\x1B[38;5;235m.\x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;252m&\x1B[38;5;255m@\x1B[38;5;248m#\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;232m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;102m(\x1B[38;5;253m&\x1B[38;5;016m \x1B[38;5;238m,\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;236m,\x1B[38;5;236m.\x1B[38;5;235m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7340
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;248m#\x1B[38;5;253m&\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;234m \x1B[38;5;089m*\x1B[38;5;131m*\x1B[38;5;089m*\x1B[38;5;089m,\x1B[38;5;237m,\x1B[38;5;236m.\x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7341
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;233m \x1B[38;5;233m \x1B[38;5;241m*\x1B[38;5;244m/\x1B[38;5;241m*\x1B[38;5;235m.\x1B[38;5;236m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;237m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;095m*\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;125m*\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;131m/\x1B[38;5;095m*\x1B[38;5;236m,\x1B[38;5;236m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7342
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;089m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;089m*\x1B[38;5;237m,\x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;236m.\x1B[38;5;052m,\x1B[38;5;053m,\x1B[38;5;095m*\x1B[38;5;131m*\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;237m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m*\x1B[38;5;167m(\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;109m#\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;109m#\x1B[38;5;066m(\x1B[38;5;066m/\x1B[38;5;059m*\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;052m,\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;m,\x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7343
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;235m.\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;052m,\x1B[38;5;232m \x1B[38;5;235m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;234m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;232m \x1B[38;5;066m/\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;152m%\x1B[38;5;116m#\x1B[38;5;109m#\x1B[38;5;109m#\x1B[38;5;152m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;152m%\x1B[38;5;109m#\x1B[38;5;066m(\x1B[38;5;239m*\x1B[38;5;237m,\x1B[38;5;236m.\x1B[38;5;089m,\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;095m*\x1B[38;5;236m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7344
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;234m.\x1B[38;5;m,\x1B[38;5;m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;016m \x1B[38;5;089m*\x1B[38;5;167m/\x1B[38;5;232m \x1B[38;5;237m,\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;001m.\x1B[38;5;023m,\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;066m/\x1B[38;5;152m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;109m#\x1B[38;5;232m \x1B[38;5;233m \x1B[38;5;240m*\x1B[38;5;066m(\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;109m#\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;236m.\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;237m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7345
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;089m,\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;m*\x1B[38;5;089m,\x1B[38;5;236m,\x1B[38;5;m.\x1B[38;5;236m.\x1B[38;5;239m*\x1B[38;5;059m*\x1B[38;5;059m*\x1B[38;5;073m(\x1B[38;5;109m#\x1B[38;5;073m(\x1B[38;5;235m.\x1B[38;5;233m \x1B[38;5;232m \x1B[38;5;237m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;236m.\x1B[38;5;235m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;089m*\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;131m*\x1B[38;5;236m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;089m,\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;001m,\x1B[38;5;234m.\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;239m*\x1B[38;5;066m/\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;073m(\x1B[38;5;238m,\x1B[38;5;235m.\x1B[38;5;234m.\x1B[38;5;239m,\x1B[38;5;109m#\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;066m(\x1B[38;5;239m,\x1B[38;5;232m \x1B[38;5;m.\x1B[38;5;m,\x1B[38;5;m*\x1B[38;5;233m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7346
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;234m \x1B[38;5;m*\x1B[38;5;131m*\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;239m*\x1B[38;5;109m#\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;109m#\x1B[38;5;073m(\x1B[38;5;109m#\x1B[38;5;116m%\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;109m#\x1B[38;5;016m \x1B[38;5;235m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;089m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;095m*\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;233m \x1B[38;5;236m.\x1B[38;5;152m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;073m(\x1B[38;5;235m.\x1B[38;5;066m/\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;110m#\x1B[38;5;067m(\x1B[38;5;240m*\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;109m(\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;m#\x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;052m.\x1B[38;5;m*\x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7347
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;234m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;066m/\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;241m*\x1B[38;5;238m,\x1B[38;5;235m.\x1B[38;5;238m,\x1B[38;5;066m/\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;109m#\x1B[38;5;066m/\x1B[38;5;116m%\x1B[38;5;116m#\x1B[38;5;240m*\x1B[38;5;233m \x1B[38;5;235m.\x1B[38;5;237m,\x1B[38;5;238m,\x1B[38;5;095m*\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;235m.\x1B[38;5;233m \x1B[38;5;233m \x1B[38;5;052m.\x1B[38;5;053m,\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;237m,\x1B[38;5;234m.\x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;234m \x1B[38;5;234m.\x1B[38;5;052m.\x1B[38;5;053m,\x1B[38;5;053m,\x1B[38;5;089m,\x1B[38;5;m*\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;236m,\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;236m.\x1B[38;5;235m.\x1B[38;5;109m(\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;073m(\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;110m#\x1B[38;5;067m(\x1B[38;5;236m.\x1B[38;5;237m,\x1B[38;5;109m#\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;110m#\x1B[38;5;073m(\x1B[38;5;066m/\x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;240m*\x1B[38;5;239m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7348
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;237m,\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;060m*\x1B[38;5;073m(\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;066m(\x1B[38;5;016m \x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;116m%\x1B[38;5;109m#\x1B[38;5;016m \x1B[38;5;131m/\x1B[38;5;131m*\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;233m \x1B[38;5;052m.\x1B[38;5;052m.\x1B[38;5;232m \x1B[38;5;236m.\x1B[38;5;095m*\x1B[38;5;239m*\x1B[38;5;239m*\x1B[38;5;095m*\x1B[38;5;095m*\x1B[38;5;095m/\x1B[38;5;137m/\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;143m(\x1B[38;5;095m*\x1B[38;5;016m \x1B[38;5;131m*\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;089m,\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;237m,\x1B[38;5;m*\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;116m#\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;066m/\x1B[38;5;109m#\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m#\x1B[38;5;073m(\x1B[38;5;067m(\x1B[38;5;016m \x1B[38;5;237m,\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m%\x1B[38;5;m#\x1B[38;5;m/\x1B[38;5;m/\x1B[38;5;m/\x1B[38;5;m \x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7349
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;238m,\x1B[38;5;066m/\x1B[38;5;066m/\x1B[38;5;109m#\x1B[38;5;152m&\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;073m(\x1B[38;5;016m \x1B[38;5;066m/\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;066m/\x1B[38;5;153m&\x1B[38;5;116m%\x1B[38;5;235m.\x1B[38;5;001m,\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;234m \x1B[38;5;m/\x1B[38;5;222m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;179m#\x1B[38;5;016m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;234m.\x1B[38;5;232m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;089m,\x1B[38;5;236m.\x1B[38;5;236m.\x1B[38;5;m*\x1B[38;5;109m#\x1B[38;5;152m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;153m&\x1B[38;5;109m#\x1B[38;5;234m.\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;073m(\x1B[38;5;073m(\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;066m/\x1B[38;5;159m&\x1B[38;5;152m&\x1B[38;5;066m(\x1B[38;5;236m.\x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7350
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;110m#\x1B[38;5;159m&\x1B[38;5;240m*\x1B[38;5;016m \x1B[38;5;066m/\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;241m*\x1B[38;5;066m/\x1B[38;5;116m%\x1B[38;5;159m&\x1B[38;5;109m#\x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;234m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;016m \x1B[38;5;101m/\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;180m#\x1B[38;5;235m.\x1B[38;5;237m,\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m*\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;073m(\x1B[38;5;m%\x1B[38;5;m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;116m%\x1B[38;5;073m#\x1B[38;5;066m/\x1B[38;5;238m,\x1B[38;5;152m%\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;m&\x1B[38;5;m&\x1B[38;5;m&\x1B[38;5;m&\x1B[38;5;m#\x1B[38;5;m(\x1B[38;5;073m(\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7351
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;m/\x1B[38;5;066m/\x1B[38;5;066m/\x1B[38;5;240m*\x1B[38;5;240m*\x1B[38;5;242m/\x1B[38;5;067m(\x1B[38;5;109m#\x1B[38;5;116m%\x1B[38;5;116m%\x1B[38;5;016m \x1B[38;5;067m(\x1B[38;5;110m#\x1B[38;5;109m#\x1B[38;5;236m.\x1B[38;5;m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m*\x1B[38;5;016m \x1B[38;5;179m#\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;137m(\x1B[38;5;016m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;238m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;237m,\x1B[38;5;241m*\x1B[38;5;110m#\x1B[38;5;116m%\x1B[38;5;073m(\x1B[38;5;067m(\x1B[38;5;232m \x1B[38;5;066m(\x1B[38;5;066m/\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m*\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;m*\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7352
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;233m \x1B[38;5;m.\x1B[38;5;238m,\x1B[38;5;239m,\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;089m*\x1B[38;5;233m \x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;180m%\x1B[38;5;238m,\x1B[38;5;052m.\x1B[38;5;167m/\x1B[38;5;089m,\x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m*\x1B[38;5;232m \x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m.\x1B[38;5;016m \x1B[38;5;m*\x1B[38;5;m*\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;016m \x1B[38;5;m#\x1B[38;5;159m&\x1B[38;5;m%\x1B[38;5;m*\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7353
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;234m \x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;052m.\x1B[38;5;234m.\x1B[38;5;237m,\x1B[38;5;237m,\x1B[38;5;238m,\x1B[38;5;238m,\x1B[38;5;238m,\x1B[38;5;238m,\x1B[38;5;240m*\x1B[38;5;240m*\x1B[38;5;240m*\x1B[38;5;239m*\x1B[38;5;239m,\x1B[38;5;238m,\x1B[38;5;238m,\x1B[38;5;101m/\x1B[38;5;095m*\x1B[38;5;232m \x1B[38;5;235m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;016m \x1B[38;5;131m*\x1B[38;5;131m/\x1B[38;5;233m \x1B[38;5;232m \x1B[38;5;240m*\x1B[38;5;m*\x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m(\x1B[38;5;m&\x1B[38;5;159m&\x1B[38;5;m%\x1B[38;5;m(\x1B[38;5;m/\x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7354
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m,\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;131m*\x1B[38;5;089m*\x1B[38;5;053m,\x1B[38;5;233m \x1B[38;5;052m.\x1B[38;5;053m,\x1B[38;5;m \x1B[38;5;m#\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;143m(\x1B[38;5;236m.\x1B[38;5;232m \x1B[38;5;233m \x1B[38;5;233m \x1B[38;5;052m.\x1B[38;5;052m.\x1B[38;5;052m.\x1B[38;5;089m,\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;237m,\x1B[38;5;236m.\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;237m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m(\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;m%\x1B[38;5;m(\x1B[38;5;m/\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7355
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;016m \x1B[38;5;101m/\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;101m/\x1B[38;5;232m \x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;234m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;m \x1B[38;5;236m,\x1B[38;5;m/\x1B[38;5;m(\x1B[38;5;241m*\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m*\x1B[38;5;m \x1B[38;5;066m/\x1B[38;5;m&\x1B[38;5;m/\x1B[38;5;m&\x1B[38;5;159m&\x1B[38;5;m#\x1B[38;5;m(\x1B[38;5;m*\x1B[38;5;238m,\x1B[38;5;m/\x1B[38;5;m*\x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7356
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;233m \x1B[38;5;m,\x1B[38;5;089m,\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;m.\x1B[38;5;m,\x1B[38;5;m \x1B[38;5;249m%\x1B[38;5;255m@\x1B[38;5;m#\x1B[38;5;m \x1B[38;5;222m%\x1B[38;5;143m(\x1B[38;5;016m \x1B[38;5;243m/\x1B[38;5;254m@\x1B[38;5;243m/\x1B[38;5;016m \x1B[38;5;m,\x1B[38;5;m.\x1B[38;5;131m*\x1B[38;5;m.\x1B[38;5;233m \x1B[38;5;052m \x1B[38;5;052m,\x1B[38;5;125m*\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;237m,\x1B[38;5;016m \x1B[38;5;235m.\x1B[38;5;234m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m&\x1B[38;5;m&\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;073m(\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;159m&\x1B[38;5;110m#\x1B[38;5;m/\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7357
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m,\x1B[38;5;052m.\x1B[38;5;242m/\x1B[38;5;188m&\x1B[38;5;251m%\x1B[38;5;243m/\x1B[38;5;253m&\x1B[38;5;015m@\x1B[38;5;243m/\x1B[38;5;247m#\x1B[38;5;015m@\x1B[38;5;243m/\x1B[38;5;101m/\x1B[38;5;143m(\x1B[38;5;016m \x1B[38;5;231m@\x1B[38;5;251m%\x1B[38;5;234m \x1B[38;5;015m@\x1B[38;5;015m@\x1B[38;5;102m(\x1B[38;5;239m*\x1B[38;5;255m@\x1B[38;5;015m@\x1B[38;5;015m@\x1B[38;5;247m#\x1B[38;5;016m \x1B[38;5;237m,\x1B[38;5;235m.\x1B[38;5;234m \x1B[38;5;m.\x1B[38;5;m.\x1B[38;5;m,\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;237m,\x1B[38;5;089m*\x1B[38;5;131m*\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;095m*\x1B[38;5;234m.\x1B[38;5;m.\x1B[38;5;m#\x1B[38;5;116m%\x1B[38;5;073m(\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;233m \x1B[38;5;m%\x1B[38;5;m%\x1B[38;5;m.\x1B[38;5;236m.\x1B[38;5;237m,\x1B[38;5;236m.\x1B[38;5;235m.\x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7358
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m*\x1B[38;5;131m/\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;246m(\x1B[38;5;015m@\x1B[38;5;253m&\x1B[38;5;016m \x1B[38;5;242m/\x1B[38;5;240m*\x1B[38;5;m \x1B[38;5;016m \x1B[38;5;137m(\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;101m/\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;241m/\x1B[38;5;244m(\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;252m&\x1B[38;5;015m@\x1B[38;5;245m(\x1B[38;5;016m \x1B[38;5;m(\x1B[38;5;179m#\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;143m#\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;089m*\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;235m.\x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7359
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;m*\x1B[38;5;m \x1B[38;5;233m \x1B[38;5;052m.\x1B[38;5;053m,\x1B[38;5;233m \x1B[38;5;m.\x1B[38;5;239m*\x1B[38;5;240m*\x1B[38;5;240m*\x1B[38;5;240m*\x1B[38;5;101m/\x1B[38;5;137m(\x1B[38;5;143m(\x1B[38;5;179m#\x1B[38;5;179m#\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;179m#\x1B[38;5;240m*\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;238m,\x1B[38;5;240m*\x1B[38;5;240m*\x1B[38;5;239m,\x1B[38;5;238m,\x1B[38;5;235m.\x1B[38;5;016m \x1B[38;5;237m,\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m#\x1B[38;5;m%\x1B[38;5;240m*\x1B[38;5;m \x1B[38;5;m/\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;238m,\x1B[38;5;m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;233m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7360
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;179m#\x1B[38;5;137m(\x1B[38;5;236m.\x1B[38;5;016m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;016m \x1B[38;5;053m,\x1B[38;5;238m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;238m,\x1B[38;5;m#\x1B[38;5;066m/\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;066m/\x1B[38;5;m%\x1B[38;5;240m*\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m*\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;m(\x1B[38;5;053m,\x1B[38;5;m \x1B[38;5;m*\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7361
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;234m.\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;052m.\x1B[38;5;234m.\x1B[38;5;179m#\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;180m%\x1B[38;5;179m#\x1B[38;5;137m(\x1B[38;5;237m,\x1B[38;5;232m \x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;234m \x1B[38;5;052m.\x1B[38;5;089m,\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;089m*\x1B[38;5;m,\x1B[38;5;236m.\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;234m.\x1B[38;5;066m/\x1B[38;5;240m*\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;235m.\x1B[38;5;235m.\x1B[38;5;m,\x1B[38;5;m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;m/\x1B[38;5;237m,\x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7362
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;016m \x1B[38;5;095m/\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;186m%\x1B[38;5;222m%\x1B[38;5;179m#\x1B[38;5;137m(\x1B[38;5;101m/\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;016m \x1B[38;5;052m.\x1B[38;5;089m,\x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;238m,\x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7363
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;232m \x1B[38;5;m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;125m*\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;233m \x1B[38;5;235m.\x1B[38;5;239m*\x1B[38;5;101m/\x1B[38;5;137m(\x1B[38;5;143m(\x1B[38;5;179m#\x1B[38;5;180m#\x1B[38;5;180m%\x1B[38;5;186m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m#\x1B[38;5;180m#\x1B[38;5;179m#\x1B[38;5;143m#\x1B[38;5;143m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;238m,\x1B[38;5;236m,\x1B[38;5;234m.\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;237m,\x1B[38;5;232m \x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;m*\x1B[38;5;233m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7364
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;125m*\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;237m,\x1B[38;5;016m \x1B[38;5;095m*\x1B[38;5;180m%\x1B[38;5;180m#\x1B[38;5;143m#\x1B[38;5;143m(\x1B[38;5;143m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;143m(\x1B[38;5;143m#\x1B[38;5;179m#\x1B[38;5;179m#\x1B[38;5;180m%\x1B[38;5;222m%\x1B[38;5;222m%\x1B[38;5;179m#\x1B[38;5;137m(\x1B[38;5;143m(\x1B[38;5;240m*\x1B[38;5;m \x1B[38;5;m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;016m \x1B[38;5;232m \x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;131m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;m/\x1B[38;5;m,\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7365
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;131m*\x1B[38;5;131m/\x1B[38;5;131m*\x1B[38;5;131m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;089m*\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;236m,\x1B[38;5;233m \x1B[38;5;235m.\x1B[38;5;095m/\x1B[38;5;143m(\x1B[38;5;179m#\x1B[38;5;180m#\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;186m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;180m%\x1B[38;5;179m#\x1B[38;5;179m#\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;101m/\x1B[38;5;232m \x1B[38;5;052m.\x1B[38;5;131m*\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;131m/\x1B[38;5;238m,\x1B[38;5;234m.\x1B[38;5;232m \x1B[38;5;233m \x1B[38;5;235m.\x1B[38;5;053m,\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;089m,\x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;125m*\x1B[38;5;125m*\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;131m*\x1B[38;5;089m*\x1B[38;5;089m,\x1B[38;5;236m.\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7366
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;016m \x1B[38;5;102m(\x1B[38;5;m@\x1B[38;5;243m/\x1B[38;5;237m,\x1B[38;5;253m&\x1B[38;5;251m%\x1B[38;5;016m \x1B[38;5;059m*\x1B[38;5;255m@\x1B[38;5;250m%\x1B[38;5;016m \x1B[38;5;236m.\x1B[38;5;240m*\x1B[38;5;016m \x1B[38;5;131m*\x1B[38;5;167m(\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m/\x1B[38;5;167m(\x1B[38;5;131m/\x1B[38;5;089m,\x1B[38;5;089m,\x1B[38;5;233m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;235m.\x1B[38;5;m*\x1B[38;5;m/\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;143m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;137m(\x1B[38;5;137m/\x1B[38;5;236m.\x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;089m*\x1B[38;5;089m*\x1B[38;5;016m \x1B[38;5;052m.\x1B[38;5;131m/\x1B[38;5;052m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;131m/\x1B[38;5;131m/\x1B[38;5;237m,\x1B[38;5;m \x1B[38;5;235m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7367
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m*\x1B[38;5;m \x1B[38;5;m/\x1B[38;5;m@\x1B[38;5;244m/\x1B[38;5;241m/\x1B[38;5;015m@\x1B[38;5;015m@\x1B[38;5;237m,\x1B[38;5;248m#\x1B[38;5;015m@\x1B[38;5;254m@\x1B[38;5;016m \x1B[38;5;251m%\x1B[38;5;015m@\x1B[38;5;015m@\x1B[38;5;246m(\x1B[38;5;016m \x1B[38;5;131m*\x1B[38;5;167m/\x1B[38;5;m/\x1B[38;5;131m/\x1B[38;5;131m*\x1B[38;5;m,\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m,\x1B[38;5;m,\x1B[38;5;m,\x1B[38;5;m,\x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m(\x1B[38;5;015m@\x1B[38;5;250m%\x1B[38;5;238m,\x1B[38;5;254m&\x1B[38;5;015m@\x1B[38;5;247m#\x1B[38;5;239m*\x1B[38;5;255m@\x1B[38;5;015m@\x1B[38;5;255m@\x1B[38;5;242m/\x1B[38;5;235m.\x1B[38;5;252m&\x1B[38;5;015m@\x1B[38;5;m%\x1B[38;5;016m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7368
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m,\x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;016m \x1B[38;5;233m \x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;235m.\x1B[38;5;m%\x1B[38;5;m&\x1B[38;5;m*\x1B[38;5;m%\x1B[38;5;m@\x1B[38;5;252m&\x1B[38;5;016m \x1B[38;5;253m&\x1B[38;5;015m@\x1B[38;5;015m@\x1B[38;5;188m&\x1B[38;5;m \x1B[38;5;m#\x1B[38;5;m@\x1B[38;5;m%\x1B[38;5;244m(\x1B[38;5;016m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7369
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m.\x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7370
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7371
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7372
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7373
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7374
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7375
- \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m \x1B[38;5;m
7376
- \x1B[0m
7318
+ var banner = `
7319
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;1;0;0m \x1B[0m\x1B[38;2;14;5;7m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;130;43;64m-\x1B[0m\x1B[38;2;131;45;65m-\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7320
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;102;33;49m:\x1B[0m\x1B[38;2;44;15;22m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;85;28;41m:\x1B[0m\x1B[38;2;99;33;49m:\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;94;32;46m:\x1B[0m\x1B[38;2;77;26;38m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;48;15;22m.\x1B[0m\x1B[38;2;70;23;35m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;86;29;43m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7321
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;178;58;88m=\x1B[0m\x1B[38;2;206;69;101m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;27;8;13m \x1B[0m\x1B[38;2;31;8;14m \x1B[0m\x1B[38;2;39;13;19m \x1B[0m\x1B[38;2;190;63;93m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;72;24;36m.\x1B[0m\x1B[38;2;148;49;72m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;210;70;103m=\x1B[0m\x1B[38;2;173;57;85m=\x1B[0m\x1B[38;2;17;3;8m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7322
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;116;22;55m:\x1B[0m\x1B[38;2;58;12;28m.\x1B[0m\x1B[38;2;91;31;45m:\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;204;68;101m=\x1B[0m\x1B[38;2;166;56;82m-\x1B[0m\x1B[38;2;140;29;67m-\x1B[0m\x1B[38;2;130;25;62m:\x1B[0m\x1B[38;2;3;0;1m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7323
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;203;68;100m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;204;68;101m=\x1B[0m\x1B[38;2;167;56;82m-\x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;12;4;4m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7324
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;161;54;79m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;39;13;19m \x1B[0m\x1B[38;2;204;68;101m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;127;43;62m-\x1B[0m\x1B[38;2;105;20;51m:\x1B[0m\x1B[38;2;110;21;53m:\x1B[0m\x1B[38;2;110;21;53m:\x1B[0m\x1B[38;2;51;9;25m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7325
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;58;18;27m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;180;60;89m=\x1B[0m\x1B[38;2;66;22;33m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;10;10;10m \x1B[0m\x1B[38;2;36;36;36m.\x1B[0m\x1B[38;2;146;138;140m+\x1B[0m\x1B[38;2;158;40;77m-\x1B[0m\x1B[38;2;143;44;70m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;207;69;102m=\x1B[0m\x1B[38;2;76;24;35m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;19;5;10m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7326
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;66;66;66m:\x1B[0m\x1B[38;2;67;67;67m:\x1B[0m\x1B[38;2;123;113;117m=\x1B[0m\x1B[38;2;167;45;82m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;183;61;90m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;112;112;112m=\x1B[0m\x1B[38;2;113;113;113m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;204;204;204m#\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;208;70;103m=\x1B[0m\x1B[38;2;185;62;91m=\x1B[0m\x1B[38;2;91;31;45m:\x1B[0m\x1B[38;2;25;5;11m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7327
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;114;114;114m=\x1B[0m\x1B[38;2;72;13;34m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;126;42;62m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;72;72;72m:\x1B[0m\x1B[38;2;89;76;79m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;80;27;40m.\x1B[0m\x1B[38;2;91;31;45m:\x1B[0m\x1B[38;2;91;31;45m:\x1B[0m\x1B[38;2;91;31;45m:\x1B[0m\x1B[38;2;91;31;45m:\x1B[0m\x1B[38;2;186;63;92m=\x1B[0m\x1B[38;2;93;32;48m:\x1B[0m\x1B[38;2;2;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7328
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;26;5;12m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;66;22;32m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;152;51;75m-\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;66;22;33m.\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;124;41;61m:\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;57;19;28m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;183;61;90m=\x1B[0m\x1B[38;2;31;45;45m.\x1B[0m\x1B[38;2;59;88;89m-\x1B[0m\x1B[38;2;63;94;94m-\x1B[0m\x1B[38;2;52;74;75m:\x1B[0m\x1B[38;2;52;74;75m:\x1B[0m\x1B[38;2;66;79;81m:\x1B[0m\x1B[38;2;197;123;146m*\x1B[0m\x1B[38;2;154;63;86m-\x1B[0m\x1B[38;2;146;48;71m-\x1B[0m\x1B[38;2;65;22;32m.\x1B[0m\x1B[38;2;86;29;43m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7329
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;111;36;55m:\x1B[0m\x1B[38;2;39;13;19m \x1B[0m\x1B[38;2;31;9;14m \x1B[0m\x1B[38;2;137;45;68m-\x1B[0m\x1B[38;2;68;23;34m.\x1B[0m\x1B[38;2;175;59;86m=\x1B[0m\x1B[38;2;42;14;21m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;173;57;84m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;172;57;84m=\x1B[0m\x1B[38;2;39;13;19m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;48;14;22m.\x1B[0m\x1B[38;2;84;28;41m.\x1B[0m\x1B[38;2;114;165;165m+\x1B[0m\x1B[38;2;147;213;215m#\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;104;152;152m+\x1B[0m\x1B[38;2;139;201;202m#\x1B[0m\x1B[38;2;154;224;226m#\x1B[0m\x1B[38;2;134;193;194m*\x1B[0m\x1B[38;2;161;232;233m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;158;228;229m%\x1B[0m\x1B[38;2;39;46;47m.\x1B[0m\x1B[38;2;189;86;112m+\x1B[0m\x1B[38;2;20;6;9m \x1B[0m\x1B[38;2;5;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7330
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;32;16;16m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;164;62;86m=\x1B[0m\x1B[38;2;87;40;52m:\x1B[0m\x1B[38;2;12;18;18m \x1B[0m\x1B[38;2;162;235;236m%\x1B[0m\x1B[38;2;155;223;224m#\x1B[0m\x1B[38;2;164;237;238m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;103;149;150m+\x1B[0m\x1B[38;2;41;15;22m.\x1B[0m\x1B[38;2;197;66;97m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;198;66;98m=\x1B[0m\x1B[38;2;130;41;63m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;202;68;100m=\x1B[0m\x1B[38;2;196;66;97m=\x1B[0m\x1B[38;2;196;66;97m=\x1B[0m\x1B[38;2;150;49;74m-\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;11;5;7m \x1B[0m\x1B[38;2;60;19;28m.\x1B[0m\x1B[38;2;196;66;97m=\x1B[0m\x1B[38;2;134;193;194m*\x1B[0m\x1B[38;2;160;231;232m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;117;177;189m*\x1B[0m\x1B[38;2;155;223;224m#\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;163;235;237m%\x1B[0m\x1B[38;2;89;137;149m=\x1B[0m\x1B[38;2;7;10;11m \x1B[0m\x1B[38;2;155;224;225m#\x1B[0m\x1B[38;2;160;231;232m%\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;34;11;16m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7331
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;2;1;1m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;8;12;12m \x1B[0m\x1B[38;2;103;149;150m+\x1B[0m\x1B[38;2;11;17;17m \x1B[0m\x1B[38;2;119;179;192m*\x1B[0m\x1B[38;2;155;223;224m#\x1B[0m\x1B[38;2;164;237;238m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;89;128;129m=\x1B[0m\x1B[38;2;156;225;226m#\x1B[0m\x1B[38;2;155;223;224m#\x1B[0m\x1B[38;2;43;47;49m.\x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;2;1;1m \x1B[0m\x1B[38;2;5;1;3m \x1B[0m\x1B[38;2;63;43;25m.\x1B[0m\x1B[38;2;184;145;81m+\x1B[0m\x1B[38;2;102;20;49m:\x1B[0m\x1B[38;2;127;24;61m:\x1B[0m\x1B[38;2;185;58;91m=\x1B[0m\x1B[38;2;153;51;75m-\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;122;41;59m:\x1B[0m\x1B[38;2;201;67;99m=\x1B[0m\x1B[38;2;21;6;9m \x1B[0m\x1B[38;2;155;223;224m#\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;72;105;106m-\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;164;237;238m%\x1B[0m\x1B[38;2;99;154;169m+\x1B[0m\x1B[38;2;12;18;19m \x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;164;237;238m%\x1B[0m\x1B[38;2;162;234;236m%\x1B[0m\x1B[38;2;99;154;169m+\x1B[0m\x1B[38;2;6;8;8m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7332
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;20;31;34m.\x1B[0m\x1B[38;2;33;48;48m.\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;149;215;216m#\x1B[0m\x1B[38;2;64;98;106m-\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;131;190;194m*\x1B[0m\x1B[38;2;75;57;64m:\x1B[0m\x1B[38;2;20;6;9m \x1B[0m\x1B[38;2;200;65;98m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;230;193;120m#\x1B[0m\x1B[38;2;230;193;120m#\x1B[0m\x1B[38;2;230;193;120m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;167;56;83m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;169;56;83m=\x1B[0m\x1B[38;2;40;13;20m \x1B[0m\x1B[38;2;39;13;19m \x1B[0m\x1B[38;2;129;143;150m+\x1B[0m\x1B[38;2;135;195;196m*\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;127;190;201m*\x1B[0m\x1B[38;2;98;143;145m+\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;165;238;239m%\x1B[0m\x1B[38;2;164;237;238m%\x1B[0m\x1B[38;2;106;164;180m+\x1B[0m\x1B[38;2;28;41;43m.\x1B[0m\x1B[38;2;112;161;162m+\x1B[0m\x1B[38;2;39;58;58m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7333
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;8;12;12m \x1B[0m\x1B[38;2;40;60;63m:\x1B[0m\x1B[38;2;92;131;133m=\x1B[0m\x1B[38;2;54;77;78m:\x1B[0m\x1B[38;2;60;90;90m-\x1B[0m\x1B[38;2;86;133;146m=\x1B[0m\x1B[38;2;80;119;124m=\x1B[0m\x1B[38;2;170;57;84m=\x1B[0m\x1B[38;2;205;69;101m=\x1B[0m\x1B[38;2;65;55;35m:\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;46;38;25m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;3;3;3m \x1B[0m\x1B[38;2;115;166;166m+\x1B[0m\x1B[38;2;52;74;75m:\x1B[0m\x1B[38;2;60;94;102m-\x1B[0m\x1B[38;2;31;45;45m.\x1B[0m\x1B[38;2;41;61;61m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;11;17;18m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;92;132;133m=\x1B[0m\x1B[38;2;42;66;71m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7334
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;94;32;46m:\x1B[0m\x1B[38;2;162;49;79m-\x1B[0m\x1B[38;2;167;45;81m-\x1B[0m\x1B[38;2;135;36;65m-\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;238;201;129m#\x1B[0m\x1B[38;2;214;181;115m*\x1B[0m\x1B[38;2;128;108;68m-\x1B[0m\x1B[38;2;11;8;4m \x1B[0m\x1B[38;2;4;1;1m \x1B[0m\x1B[38;2;125;40;61m:\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;1;0;0m \x1B[0m\x1B[38;2;124;42;61m:\x1B[0m\x1B[38;2;2;0;1m \x1B[0m\x1B[38;2;58;87;90m-\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;151;217;218m#\x1B[0m\x1B[38;2;129;193;203m*\x1B[0m\x1B[38;2;32;50;54m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7335
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;59;11;28m.\x1B[0m\x1B[38;2;194;61;95m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;173;58;85m=\x1B[0m\x1B[38;2;8;7;7m \x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;155;131;84m=\x1B[0m\x1B[38;2;78;25;37m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;113;37;55m:\x1B[0m\x1B[38;2;92;31;45m:\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;149;49;73m-\x1B[0m\x1B[38;2;55;18;27m.\x1B[0m\x1B[38;2;12;19;21m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;109;157;158m+\x1B[0m\x1B[38;2;145;213;219m#\x1B[0m\x1B[38;2;96;144;152m+\x1B[0m\x1B[38;2;38;58;64m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7336
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;89;17;43m.\x1B[0m\x1B[38;2;67;45;53m:\x1B[0m\x1B[38;2;118;117;117m=\x1B[0m\x1B[38;2;199;199;199m#\x1B[0m\x1B[38;2;183;183;183m#\x1B[0m\x1B[38;2;53;45;29m.\x1B[0m\x1B[38;2;53;45;31m.\x1B[0m\x1B[38;2;102;102;102m-\x1B[0m\x1B[38;2;224;224;224m%\x1B[0m\x1B[38;2;51;51;51m.\x1B[0m\x1B[38;2;255;255;255m@\x1B[0m\x1B[38;2;77;17;39m.\x1B[0m\x1B[38;2;177;80;89m=\x1B[0m\x1B[38;2;47;38;25m.\x1B[0m\x1B[38;2;161;54;79m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;210;71;103m+\x1B[0m\x1B[38;2;192;64;94m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;180;60;89m=\x1B[0m\x1B[38;2;58;19;29m.\x1B[0m\x1B[38;2;36;57;61m:\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;114;164;165m+\x1B[0m\x1B[38;2;29;43;43m.\x1B[0m\x1B[38;2;67;24;35m.\x1B[0m\x1B[38;2;99;144;149m+\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7337
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;2;0;0m \x1B[0m\x1B[38;2;208;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;81;25;38m.\x1B[0m\x1B[38;2;94;68;74m-\x1B[0m\x1B[38;2;34;6;16m \x1B[0m\x1B[38;2;49;41;26m.\x1B[0m\x1B[38;2;234;198;126m#\x1B[0m\x1B[38;2;199;168;107m*\x1B[0m\x1B[38;2;195;165;105m*\x1B[0m\x1B[38;2;8;6;4m \x1B[0m\x1B[38;2;115;98;62m-\x1B[0m\x1B[38;2;60;59;56m:\x1B[0m\x1B[38;2;221;187;119m*\x1B[0m\x1B[38;2;234;197;124m#\x1B[0m\x1B[38;2;96;75;41m:\x1B[0m\x1B[38;2;210;70;104m+\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;43;14;21m.\x1B[0m\x1B[38;2;11;16;17m \x1B[0m\x1B[38;2;80;115;116m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;5m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;42;14;20m \x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;141;47;70m-\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7338
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;79;27;39m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;135;26;65m:\x1B[0m\x1B[38;2;48;40;26m.\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;210;172;102m*\x1B[0m\x1B[38;2;79;26;39m.\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;81;16;39m.\x1B[0m\x1B[38;2;164;54;80m-\x1B[0m\x1B[38;2;14;6;9m \x1B[0m\x1B[38;2;13;4;6m \x1B[0m\x1B[38;2;16;5;9m \x1B[0m\x1B[38;2;73;93;95m-\x1B[0m\x1B[38;2;30;9;16m \x1B[0m\x1B[38;2;117;154;157m+\x1B[0m\x1B[38;2;43;13;20m \x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;204;68;100m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7339
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;177;51;86m=\x1B[0m\x1B[38;2;104;22;50m:\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;239;202;129m#\x1B[0m\x1B[38;2;209;172;101m*\x1B[0m\x1B[38;2;108;86;47m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;108;35;53m:\x1B[0m\x1B[38;2;82;16;39m.\x1B[0m\x1B[38;2;208;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;208;70;102m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;16;4;6m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7340
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;9;3;4m \x1B[0m\x1B[38;2;60;16;26m.\x1B[0m\x1B[38;2;199;67;98m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;203;67;100m=\x1B[0m\x1B[38;2;161;42;79m-\x1B[0m\x1B[38;2;110;21;53m:\x1B[0m\x1B[38;2;17;13;5m \x1B[0m\x1B[38;2;178;148;90m+\x1B[0m\x1B[38;2;194;164;105m*\x1B[0m\x1B[38;2;194;164;105m*\x1B[0m\x1B[38;2;194;164;105m*\x1B[0m\x1B[38;2;197;166;106m*\x1B[0m\x1B[38;2;191;157;93m+\x1B[0m\x1B[38;2;190;152;83m+\x1B[0m\x1B[38;2;30;11;14m \x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;51;15;23m.\x1B[0m\x1B[38;2;96;20;46m:\x1B[0m\x1B[38;2;135;26;65m:\x1B[0m\x1B[38;2;140;29;68m-\x1B[0m\x1B[38;2;161;41;78m-\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;168;46;82m-\x1B[0m\x1B[38;2;40;13;20m \x1B[0m\x1B[38;2;37;12;19m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7341
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;178;178;178m*\x1B[0m\x1B[38;2;73;73;73m:\x1B[0m\x1B[38;2;147;146;146m+\x1B[0m\x1B[38;2;175;175;175m*\x1B[0m\x1B[38;2;103;90;93m-\x1B[0m\x1B[38;2;148;122;128m+\x1B[0m\x1B[38;2;125;41;61m:\x1B[0m\x1B[38;2;209;70;103m=\x1B[0m\x1B[38;2;186;56;91m=\x1B[0m\x1B[38;2;61;12;29m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;118;94;51m-\x1B[0m\x1B[38;2;59;48;26m.\x1B[0m\x1B[38;2;59;48;26m.\x1B[0m\x1B[38;2;59;48;26m.\x1B[0m\x1B[38;2;59;48;26m.\x1B[0m\x1B[38;2;114;107;94m=\x1B[0m\x1B[38;2;100;57;68m:\x1B[0m\x1B[38;2;241;197;207m%\x1B[0m\x1B[38;2;206;162;173m#\x1B[0m\x1B[38;2;135;92;102m=\x1B[0m\x1B[38;2;135;92;102m=\x1B[0m\x1B[38;2;63;31;38m.\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;6;0;0m \x1B[0m\x1B[38;2;61;10;29m.\x1B[0m\x1B[38;2;115;22;54m:\x1B[0m\x1B[38;2;108;19;51m:\x1B[0m\x1B[38;2;26;3;13m \x1B[0m\x1B[38;2;3;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7342
+ \x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;7;7;7m \x1B[0m\x1B[38;2;50;50;50m.\x1B[0m\x1B[38;2;255;255;255m@\x1B[0m\x1B[38;2;203;203;203m#\x1B[0m\x1B[38;2;114;114;114m=\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;111;111;111m=\x1B[0m\x1B[38;2;42;42;42m.\x1B[0m\x1B[38;2;40;40;40m.\x1B[0m\x1B[38;2;118;118;118m=\x1B[0m\x1B[38;2;45;45;45m.\x1B[0m\x1B[38;2;111;111;111m=\x1B[0m\x1B[38;2;100;100;100m-\x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m\x1B[38;2;0;0;0m \x1B[0m
7377
7343
  `;
7378
7344
 
7379
- // src/cli/build.ts
7380
- var import_child_process3 = require("child_process");
7381
- var import_esbuild2 = require("esbuild");
7382
- var import_fs10 = require("fs");
7383
- var import_path4 = require("path");
7384
-
7385
7345
  // src/lib/assets/assets.ts
7386
7346
  var import_crypto = __toESM(require("crypto"));
7387
7347
 
@@ -7784,10 +7744,17 @@ async function createDirectoryIfNotExists(path4) {
7784
7744
  }
7785
7745
 
7786
7746
  // src/lib/assets/environment.ts
7747
+ function getLogLevel(config) {
7748
+ const fromEnv = process.env.LOG_LEVEL;
7749
+ if (fromEnv) {
7750
+ return fromEnv;
7751
+ }
7752
+ return config.logLevel || "info";
7753
+ }
7787
7754
  function genEnv(config, watchMode = false, ignoreWatchMode = false) {
7788
7755
  const noWatchDef = {
7789
7756
  PEPR_PRETTY_LOG: "false",
7790
- LOG_LEVEL: config.logLevel || "info"
7757
+ LOG_LEVEL: getLogLevel(config)
7791
7758
  };
7792
7759
  const def = {
7793
7760
  PEPR_WATCH_MODE: watchMode ? "true" : "false",
@@ -8366,7 +8333,7 @@ function helmLayout(basePath, unique) {
8366
8333
  // src/lib/assets/loader.ts
8367
8334
  var import_child_process = require("child_process");
8368
8335
  function loadCapabilities(path4) {
8369
- return new Promise((resolve6, reject) => {
8336
+ return new Promise((resolve7, reject) => {
8370
8337
  const program2 = (0, import_child_process.fork)(path4, {
8371
8338
  env: {
8372
8339
  ...process.env,
@@ -8377,10 +8344,7 @@ function loadCapabilities(path4) {
8377
8344
  });
8378
8345
  program2.on("message", (message) => {
8379
8346
  const capabilities = message.valueOf();
8380
- for (const capability of capabilities) {
8381
- console.info(`Registered Pepr Capability "${capability.name}"`);
8382
- }
8383
- resolve6(capabilities);
8347
+ resolve7(capabilities);
8384
8348
  });
8385
8349
  program2.on("error", (error) => {
8386
8350
  reject(error);
@@ -8484,6 +8448,10 @@ var Assets = class {
8484
8448
  zarfYamlChart = (zarfYamlGenerator, path4) => zarfYamlGenerator(this, path4, "charts");
8485
8449
  allYaml = async (yamlGenerationFunction, getControllerManifests, imagePullSecret) => {
8486
8450
  this.capabilities = await loadCapabilities(this.path);
8451
+ this.capabilities.flatMap((capability) => {
8452
+ logger_default.info(`Module ${this.config.uuid} has capability: ${capability.name}`);
8453
+ logger_default.info(`Registered Pepr Capability "${capability.name}"`);
8454
+ });
8487
8455
  for (const capability of this.capabilities) {
8488
8456
  namespaceComplianceValidator(capability, this.alwaysIgnore?.namespaces);
8489
8457
  namespaceComplianceValidator(
@@ -8629,539 +8597,219 @@ var Assets = class {
8629
8597
  };
8630
8598
  };
8631
8599
 
8632
- // src/cli/init/templates.ts
8633
- var import_client_node3 = require("@kubernetes/client-node");
8634
- var import_util = require("util");
8635
- var import_uuid = require("uuid");
8636
- var import_fs5 = require("fs");
8637
- var import_path2 = __toESM(require("path"));
8600
+ // src/cli/build/index.ts
8601
+ var import_commander = require("commander");
8638
8602
 
8639
- // src/templates/pepr.code-snippets.json
8640
- var pepr_code_snippets_default = {
8641
- "Create a new Pepr capability": {
8642
- prefix: "create pepr capability",
8643
- body: [
8644
- "import { Capability, a } from 'pepr';",
8645
- "",
8646
- "export const ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/} = new Capability({",
8647
- " name: '${TM_FILENAME_BASE}',",
8648
- " description: '${1:A brief description of this capability.}',",
8649
- " namespaces: [${2:}],",
8650
- "});",
8651
- "",
8652
- "// Use the 'When' function to create a new action",
8653
- "const { When } = ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/};",
8654
- "",
8655
- "// When(a.<Kind>).Is<Event>().Then(change => change.<changes>",
8656
- "When(${3:})"
8657
- ],
8658
- description: "Creates a new Pepr capability with a specified description, optional namespaces, and adds a When statement for the specified value."
8659
- }
8660
- };
8603
+ // src/lib/included-files.ts
8604
+ var import_fs4 = require("fs");
8605
+ async function createDockerfile(version3, description, includedFiles) {
8606
+ const file = `
8607
+ # Use an official Node.js runtime as the base image
8608
+ FROM ghcr.io/defenseunicorns/pepr/controller:v${version3}
8609
+
8610
+ LABEL description="${description}"
8611
+
8612
+ # Add the included files to the image
8613
+ ${includedFiles.map((f) => `ADD ${f} ${f}`).join("\n")}
8614
+
8615
+ `;
8616
+ await import_fs4.promises.writeFile("Dockerfile.controller", file, { encoding: "utf-8" });
8617
+ }
8661
8618
 
8662
- // src/templates/.prettierrc.json
8663
- var prettierrc_default = {
8664
- arrowParens: "avoid",
8665
- bracketSameLine: false,
8666
- bracketSpacing: true,
8667
- embeddedLanguageFormatting: "auto",
8668
- insertPragma: false,
8669
- printWidth: 100,
8670
- quoteProps: "as-needed",
8671
- requirePragma: false,
8672
- semi: true,
8673
- tabWidth: 2,
8674
- useTabs: false,
8675
- vueIndentScriptAndStyle: false
8676
- };
8619
+ // src/cli/build/build.helpers.ts
8620
+ var import_child_process2 = require("child_process");
8621
+ var import_esbuild = require("esbuild");
8622
+ var import_path2 = require("path");
8623
+ var import_fs6 = require("fs");
8677
8624
 
8678
- // src/templates/capabilities/hello-pepr.samples.json
8679
- var hello_pepr_samples_default = [
8680
- {
8681
- apiVersion: "v1",
8682
- kind: "Namespace",
8683
- metadata: {
8684
- name: "pepr-demo",
8685
- labels: {
8686
- "keep-me": "please",
8687
- "remove-me": "please"
8688
- }
8689
- }
8690
- },
8691
- {
8692
- apiVersion: "v1",
8693
- kind: "Namespace",
8694
- metadata: {
8695
- name: "pepr-demo-2"
8696
- }
8697
- },
8698
- {
8699
- apiVersion: "v1",
8700
- kind: "Secret",
8701
- metadata: {
8702
- name: "secret-1",
8703
- namespace: "pepr-demo"
8704
- },
8705
- data: {
8706
- example: "dW5pY29ybiBtYWdpYw==",
8707
- "binary-data": "iCZQUg8xYucNUqD+8lyl2YcKjYYygvTtiDSEV9b9WKUkxSSLFJTgIWMJ9GcFFYs4T9JCdda51u74jfq8yHzRuEASl60EdTS/NfWgIIFTGqcNRfqMw+vgpyTMmCyJVaJEDFq6AA==",
8708
- "ascii-with-white-space": "VGhpcyBpcyBzb21lIHJhbmRvbSB0ZXh0OgoKICAgIC0gd2l0aCBsaW5lIGJyZWFrcwogICAgLSBhbmQgdGFicw=="
8709
- }
8710
- },
8711
- {
8712
- apiVersion: "v1",
8713
- kind: "ConfigMap",
8714
- metadata: {
8715
- name: "example-1",
8716
- namespace: "pepr-demo"
8717
- },
8718
- data: {
8719
- key: "ex-1-val"
8720
- }
8721
- },
8722
- {
8723
- apiVersion: "v1",
8724
- kind: "ConfigMap",
8725
- metadata: {
8726
- name: "example-2",
8727
- namespace: "pepr-demo"
8728
- },
8729
- data: {
8730
- key: "ex-2-val"
8731
- }
8732
- },
8733
- {
8734
- apiVersion: "v1",
8735
- kind: "ConfigMap",
8736
- metadata: {
8737
- name: "example-evil-cm",
8738
- namespace: "pepr-demo",
8739
- annotations: {
8740
- evil: "true"
8625
+ // src/lib/assets/yaml/generateAllYaml.ts
8626
+ var import_crypto2 = __toESM(require("crypto"));
8627
+ var import_client_node3 = require("@kubernetes/client-node");
8628
+
8629
+ // src/lib/assets/k8sObjects.ts
8630
+ var import_zlib = require("zlib");
8631
+ function getNamespace(namespaceLabels) {
8632
+ if (namespaceLabels) {
8633
+ return {
8634
+ apiVersion: "v1",
8635
+ kind: "Namespace",
8636
+ metadata: {
8637
+ name: "pepr-system",
8638
+ labels: namespaceLabels ?? {}
8741
8639
  }
8742
- },
8743
- data: {
8744
- key: "ex-evil-cm-val"
8745
- }
8746
- },
8747
- {
8748
- apiVersion: "v1",
8749
- kind: "ConfigMap",
8750
- metadata: {
8751
- name: "example-3",
8752
- namespace: "pepr-demo",
8753
- labels: {
8754
- change: "by-label"
8640
+ };
8641
+ } else {
8642
+ return {
8643
+ apiVersion: "v1",
8644
+ kind: "Namespace",
8645
+ metadata: {
8646
+ name: "pepr-system"
8755
8647
  }
8756
- },
8757
- data: {
8758
- key: "ex-3-val"
8759
- }
8760
- },
8761
- {
8762
- apiVersion: "v1",
8763
- kind: "ConfigMap",
8764
- metadata: {
8765
- name: "example-4",
8766
- namespace: "pepr-demo"
8767
- },
8768
- data: {
8769
- key: "ex-4-val"
8770
- }
8771
- },
8772
- {
8773
- apiVersion: "v1",
8774
- kind: "ConfigMap",
8775
- metadata: {
8776
- name: "example-4a",
8777
- namespace: "pepr-demo-2"
8778
- },
8779
- data: {
8780
- key: "ex-4-val"
8781
- }
8782
- },
8783
- {
8784
- apiVersion: "v1",
8785
- kind: "ConfigMap",
8648
+ };
8649
+ }
8650
+ }
8651
+ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
8652
+ const { name: name2, image, config } = assets;
8653
+ if (!isWatcher(assets.capabilities)) {
8654
+ return null;
8655
+ }
8656
+ const app = `${name2}-watcher`;
8657
+ const deploy = {
8658
+ apiVersion: "apps/v1",
8659
+ kind: "Deployment",
8786
8660
  metadata: {
8787
- name: "example-5",
8788
- namespace: "pepr-demo",
8661
+ name: app,
8662
+ namespace: "pepr-system",
8663
+ annotations: {
8664
+ "pepr.dev/description": config.description || ""
8665
+ },
8789
8666
  labels: {
8790
- "chuck-norris": "test"
8667
+ app,
8668
+ "pepr.dev/controller": "watcher",
8669
+ "pepr.dev/uuid": config.uuid
8791
8670
  }
8792
8671
  },
8793
- data: {
8794
- key: "ex-5-val"
8795
- }
8796
- },
8797
- {
8798
- apiVersion: "apiextensions.k8s.io/v1",
8799
- kind: "CustomResourceDefinition",
8800
- metadata: {
8801
- name: "unicorns.pepr.dev"
8802
- },
8803
8672
  spec: {
8804
- group: "pepr.dev",
8805
- versions: [
8806
- {
8807
- name: "v1",
8808
- served: true,
8809
- storage: true,
8810
- schema: {
8811
- openAPIV3Schema: {
8812
- type: "object",
8813
- properties: {
8814
- spec: {
8815
- type: "object",
8816
- properties: {
8817
- message: {
8818
- type: "string"
8819
- },
8820
- counter: {
8821
- type: "number"
8822
- }
8823
- }
8824
- }
8825
- }
8826
- }
8827
- }
8828
- }
8829
- ],
8830
- scope: "Namespaced",
8831
- names: {
8832
- plural: "unicorns",
8833
- singular: "unicorn",
8834
- kind: "Unicorn"
8673
+ replicas: 1,
8674
+ strategy: {
8675
+ type: "Recreate"
8676
+ },
8677
+ selector: {
8678
+ matchLabels: {
8679
+ app,
8680
+ "pepr.dev/controller": "watcher"
8681
+ }
8682
+ },
8683
+ template: {
8684
+ metadata: {
8685
+ annotations: {
8686
+ buildTimestamp: `${buildTimestamp}`
8687
+ },
8688
+ labels: {
8689
+ app,
8690
+ "pepr.dev/controller": "watcher"
8691
+ }
8692
+ },
8693
+ spec: {
8694
+ terminationGracePeriodSeconds: 5,
8695
+ serviceAccountName: name2,
8696
+ securityContext: {
8697
+ runAsUser: image.includes("private") ? 1e3 : 65532,
8698
+ runAsGroup: 65532,
8699
+ runAsNonRoot: true,
8700
+ fsGroup: 65532
8701
+ },
8702
+ containers: [
8703
+ {
8704
+ name: "watcher",
8705
+ image,
8706
+ imagePullPolicy: "IfNotPresent",
8707
+ args: ["/app/node_modules/pepr/dist/controller.js", hash],
8708
+ readinessProbe: {
8709
+ httpGet: {
8710
+ path: "/healthz",
8711
+ port: 3e3,
8712
+ scheme: "HTTPS"
8713
+ },
8714
+ initialDelaySeconds: 10
8715
+ },
8716
+ livenessProbe: {
8717
+ httpGet: {
8718
+ path: "/healthz",
8719
+ port: 3e3,
8720
+ scheme: "HTTPS"
8721
+ },
8722
+ initialDelaySeconds: 10
8723
+ },
8724
+ ports: [
8725
+ {
8726
+ containerPort: 3e3
8727
+ }
8728
+ ],
8729
+ resources: {
8730
+ requests: {
8731
+ memory: "256Mi",
8732
+ cpu: "200m"
8733
+ },
8734
+ limits: {
8735
+ memory: "512Mi",
8736
+ cpu: "500m"
8737
+ }
8738
+ },
8739
+ securityContext: {
8740
+ runAsUser: image.includes("private") ? 1e3 : 65532,
8741
+ runAsGroup: 65532,
8742
+ runAsNonRoot: true,
8743
+ allowPrivilegeEscalation: false,
8744
+ capabilities: {
8745
+ drop: ["ALL"]
8746
+ }
8747
+ },
8748
+ volumeMounts: [
8749
+ {
8750
+ name: "tls-certs",
8751
+ mountPath: "/etc/certs",
8752
+ readOnly: true
8753
+ },
8754
+ {
8755
+ name: "module",
8756
+ mountPath: `/app/load`,
8757
+ readOnly: true
8758
+ }
8759
+ ],
8760
+ env: genEnv(config, true)
8761
+ }
8762
+ ],
8763
+ volumes: [
8764
+ {
8765
+ name: "tls-certs",
8766
+ secret: {
8767
+ secretName: `${name2}-tls`
8768
+ }
8769
+ },
8770
+ {
8771
+ name: "module",
8772
+ secret: {
8773
+ secretName: `${name2}-module`
8774
+ }
8775
+ }
8776
+ ]
8777
+ }
8835
8778
  }
8836
8779
  }
8780
+ };
8781
+ if (imagePullSecret) {
8782
+ deploy.spec.template.spec.imagePullSecrets = [{ name: imagePullSecret }];
8837
8783
  }
8838
- ];
8839
-
8840
- // src/templates/settings.json
8841
- var settings_default = {
8842
- "debug.javascript.terminalOptions": {
8843
- enableTurboSourcemaps: true,
8844
- resolveSourceMapLocations: [
8845
- "${workspaceFolder}/**",
8846
- "node_modules/kubernetes-fluent-client/**",
8847
- "node_modules/pepr/**"
8848
- ]
8849
- }
8850
- };
8851
-
8852
- // src/templates/tsconfig.module.json
8853
- var tsconfig_module_default = {
8854
- compilerOptions: {
8855
- allowSyntheticDefaultImports: true,
8856
- declaration: true,
8857
- declarationMap: true,
8858
- emitDeclarationOnly: true,
8859
- esModuleInterop: true,
8860
- lib: ["ES2022"],
8861
- module: "NodeNext",
8862
- moduleResolution: "NodeNext",
8863
- outDir: "dist",
8864
- resolveJsonModule: true,
8865
- rootDir: ".",
8866
- strict: false,
8867
- target: "ES2022",
8868
- useUnknownInCatchVariables: false
8869
- },
8870
- include: ["**/*.ts"]
8871
- };
8872
-
8873
- // src/templates/data.json
8874
- var gitIgnore = "# Ignore node_modules and Pepr build artifacts\nnode_modules\ndist\ninsecure*\n";
8875
- var readmeMd = '# Pepr Module\n\nThis is a Pepr Module. [Pepr](https://github.com/defenseunicorns/pepr) is a type-safe Kubernetes middleware system.\n\nThe `capabilities` directory contains all the capabilities for this module. By default,\na capability is a single typescript file in the format of `capability-name.ts` that is\nimported in the root `pepr.ts` file as `import { HelloPepr } from "./capabilities/hello-pepr";`.\nBecause this is typescript, you can organize this however you choose, e.g. creating a sub-folder\nper-capability or common logic in shared files or folders.\n\nExample Structure:\n\n```text\nModule Root\n\u251C\u2500\u2500 package.json\n\u251C\u2500\u2500 pepr.ts\n\u2514\u2500\u2500 capabilities\n \u251C\u2500\u2500 example-one.ts\n \u251C\u2500\u2500 example-three.ts\n \u2514\u2500\u2500 example-two.ts\n```\n';
8876
- var peprTS = 'import { PeprModule } from "pepr";\n// cfg loads your pepr configuration from package.json\nimport cfg from "./package.json";\n\n// HelloPepr is a demo capability that is included with Pepr. Comment or delete the line below to remove it.\nimport { HelloPepr } from "./capabilities/hello-pepr";\n\n/**\n * This is the main entrypoint for this Pepr module. It is run when the module is started.\n * This is where you register your Pepr configurations and capabilities.\n */\nnew PeprModule(cfg, [\n // "HelloPepr" is a demo capability that is included with Pepr. Comment or delete the line below to remove it.\n HelloPepr,\n\n // Your additional capabilities go here\n]);\n';
8877
- var helloPeprTS = 'import {\n Capability,\n K8s,\n Log,\n PeprMutateRequest,\n RegisterKind,\n a,\n fetch,\n fetchStatus,\n kind,\n} from "pepr";\nimport { MockAgent, setGlobalDispatcher } from "undici";\n\n/**\n * The HelloPepr Capability is an example capability to demonstrate some general concepts of Pepr.\n * To test this capability you run `pepr dev`and then run the following command:\n * `kubectl apply -f capabilities/hello-pepr.samples.yaml`\n */\nexport const HelloPepr = new Capability({\n name: "hello-pepr",\n description: "A simple example capability to show how things work.",\n namespaces: ["pepr-demo", "pepr-demo-2"],\n});\n\n// Use the \'When\' function to create a new action, use \'Store\' to persist data\nconst { When, Store } = HelloPepr;\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Namespace) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action removes the label `remove-me` when a Namespace is created.\n * Note we don\'t need to specify the namespace here, because we\'ve already specified\n * it in the Capability definition above.\n */\nWhen(a.Namespace)\n .IsCreated()\n .Mutate(ns => ns.RemoveLabel("remove-me"));\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Watch Action with K8s SSA (Namespace) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action watches for the `pepr-demo-2` namespace to be created, then creates a ConfigMap with\n * the name `pepr-ssa-demo` and adds the namespace UID to the ConfigMap data. Because Pepr uses\n * server-side apply for this operation, the ConfigMap will be created or updated if it already exists.\n */\nWhen(a.Namespace)\n .IsCreated()\n .WithName("pepr-demo-2")\n .Watch(async ns => {\n Log.info("Namespace pepr-demo-2 was created.");\n\n try {\n // Apply the ConfigMap using K8s server-side apply\n await K8s(kind.ConfigMap).Apply({\n metadata: {\n name: "pepr-ssa-demo",\n namespace: "pepr-demo-2",\n },\n data: {\n "ns-uid": ns.metadata.uid,\n },\n });\n } catch (error) {\n // You can use the Log object to log messages to the Pepr controller pod\n Log.error(error, "Failed to apply ConfigMap using server-side apply.");\n }\n\n // You can share data between actions using the Store, including between different types of actions\n Store.setItem("watch-data", "This data was stored by a Watch Action.");\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 1) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This is a single action. They can be in the same file or put imported from other files.\n * In this example, when a ConfigMap is created with the name `example-1`, then add a label and annotation.\n *\n * Equivalent to manually running:\n * `kubectl label configmap example-1 pepr=was-here`\n * `kubectl annotate configmap example-1 pepr.dev=annotations-work-too`\n */\nWhen(a.ConfigMap)\n .IsCreated()\n .WithName("example-1")\n .Mutate(request => {\n request.SetLabel("pepr", "was-here").SetAnnotation("pepr.dev", "annotations-work-too");\n\n // Use the Store to persist data between requests and Pepr controller pods\n Store.setItem("example-1", "was-here");\n\n // This data is written asynchronously and can be read back via `Store.getItem()` or `Store.subscribe()`\n Store.setItem("example-1-data", JSON.stringify(request.Raw.data));\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate & Validate Actions (CM Example 2) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This combines 3 different types of actions: \'Mutate\', \'Validate\', and \'Watch\'. The order\n * of the actions is required, but each action is optional. In this example, when a ConfigMap is created\n * with the name `example-2`, then add a label and annotation, validate that the ConfigMap has the label\n * `pepr`, and log the request.\n */\nWhen(a.ConfigMap)\n .IsCreated()\n .WithName("example-2")\n .Mutate(request => {\n // This Mutate Action will mutate the request before it is persisted to the cluster\n\n // Use `request.Merge()` to merge the new data with the existing data\n request.Merge({\n metadata: {\n labels: {\n pepr: "was-here",\n },\n annotations: {\n "pepr.dev": "annotations-work-too",\n },\n },\n });\n })\n .Validate(request => {\n // This Validate Action will validate the request before it is persisted to the cluster\n\n // Approve the request if the ConfigMap has the label \'pepr\'\n if (request.HasLabel("pepr")) {\n return request.Approve();\n }\n\n // Otherwise, deny the request with an error message (optional)\n return request.Deny("ConfigMap must have label \'pepr\'");\n })\n .Watch((cm, phase) => {\n // This Watch Action will watch the ConfigMap after it has been persisted to the cluster\n Log.info(cm, `ConfigMap was ${phase} with the name example-2`);\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 2a) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action shows a simple validation that will deny any ConfigMap that has the\n * annotation `evil`. Note that the `Deny()` function takes an optional second parameter that is a\n * user-defined status code to return.\n */\nWhen(a.ConfigMap)\n .IsCreated()\n .Validate(request => {\n if (request.HasAnnotation("evil")) {\n return request.Deny("No evil CM annotations allowed.", 400);\n }\n\n return request.Approve();\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 3) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action combines different styles. Unlike the previous actions, this one will look\n * for any ConfigMap in the `pepr-demo` namespace that has the label `change=by-label` during either\n * CREATE or UPDATE. Note that all conditions added such as `WithName()`, `WithLabel()`, `InNamespace()`,\n * are ANDs so all conditions must be true for the request to be processed.\n */\nWhen(a.ConfigMap)\n .IsCreatedOrUpdated()\n .WithLabel("change", "by-label")\n .Mutate(request => {\n // The K8s object e are going to mutate\n const cm = request.Raw;\n\n // Get the username and uid of the K8s request\n const { username, uid } = request.Request.userInfo;\n\n // Store some data about the request in the configmap\n cm.data["username"] = username;\n cm.data["uid"] = uid;\n\n // You can still mix other ways of making changes too\n request.SetAnnotation("pepr.dev", "making-waves");\n });\n\n// This action validates the label `change=by-label` is deleted\nWhen(a.ConfigMap)\n .IsDeleted()\n .WithLabel("change", "by-label")\n .Validate(request => {\n // Log and then always approve the request\n Log.info("CM with label \'change=by-label\' was deleted.");\n return request.Approve();\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 4) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action show how you can use the `Mutate()` function without an inline function.\n * This is useful if you want to keep your actions small and focused on a single task,\n * or if you want to reuse the same function in multiple actions.\n */\nWhen(a.ConfigMap).IsCreated().WithName("example-4").Mutate(example4Cb);\n\n// This function uses the complete type definition, but is not required.\nfunction example4Cb(cm: PeprMutateRequest<a.ConfigMap>): void {\n cm.SetLabel("pepr.dev/first", "true");\n cm.SetLabel("pepr.dev/second", "true");\n cm.SetLabel("pepr.dev/third", "true");\n}\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 4a) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This is the same as Example 4, except this only operates on a CM in the `pepr-demo-2` namespace.\n * Note because the Capability defines namespaces, the namespace specified here must be one of those.\n * Alternatively, you can remove the namespace from the Capability definition and specify it here.\n */\nWhen(a.ConfigMap).IsCreated().InNamespace("pepr-demo-2").WithName("example-4a").Mutate(example4Cb);\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 5) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action is a bit more complex. It will look for any ConfigMap in the `pepr-demo`\n * namespace that has the label `chuck-norris` during CREATE. When it finds one, it will fetch a\n * random Chuck Norris joke from the API and add it to the ConfigMap. This is a great example of how\n * you can use Pepr to make changes to your K8s objects based on external data.\n *\n * Note the use of the `async` keyword. This is required for any action that uses `await` or `fetch()`.\n *\n * Also note we are passing a type to the `fetch()` function. This is optional, but it will help you\n * avoid mistakes when working with the data returned from the API. You can also use the `as` keyword to\n * cast the data returned from the API.\n *\n * These are equivalent:\n * ```ts\n * const joke = await fetch<TheChuckNorrisJoke>("https://icanhazdadjoke.com/");\n * const joke = await fetch("https://icanhazdadjoke.com/") as TheChuckNorrisJoke;\n * ```\n *\n * Alternatively, you can drop the type completely:\n *\n * ```ts\n * fetch("https://icanhazdadjoke.com")\n * ```\n */\ninterface TheChuckNorrisJoke {\n id: string;\n joke: string;\n status: number;\n}\n\nWhen(a.ConfigMap)\n .IsCreatedOrUpdated()\n .WithLabel("chuck-norris")\n .Mutate(cm => cm.SetLabel("got-jokes", "true"))\n .Watch(async cm => {\n const jokeURL = "https://icanhazdadjoke.com";\n\n const mockAgent: MockAgent = new MockAgent();\n setGlobalDispatcher(mockAgent);\n const mockClient = mockAgent.get(jokeURL);\n mockClient.intercept({ path: "/", method: "GET" }).reply(\n 200,\n {\n id: "R7UfaahVfFd",\n joke: "Funny joke goes here.",\n status: 200,\n },\n {\n headers: {\n "Content-Type": "application/json; charset=utf-8",\n },\n },\n );\n\n // Try/catch is not needed as a response object will always be returned\n const response = await fetch<TheChuckNorrisJoke>(jokeURL, {\n headers: {\n Accept: "application/json",\n },\n });\n\n // Instead, check the `response.ok` field\n if (response.ok) {\n const { joke } = response.data;\n // Add Joke to the Store\n await Store.setItemAndWait(jokeURL, joke);\n // Add the Chuck Norris joke to the configmap\n try {\n await K8s(kind.ConfigMap).Apply({\n metadata: {\n name: cm.metadata.name,\n namespace: cm.metadata.namespace,\n },\n data: {\n "chuck-says": Store.getItem(jokeURL),\n },\n });\n } catch (error) {\n Log.error(error, "Failed to apply ConfigMap using server-side apply.", {\n cm,\n });\n }\n }\n\n // You can also assert on different HTTP response codes\n if (response.status === fetchStatus.NOT_FOUND) {\n // Do something else\n return;\n }\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Secret Base64 Handling) *\n * ---------------------------------------------------------------------------------------------------\n *\n * The K8s JS client provides incomplete support for base64 encoding/decoding handling for secrets,\n * unlike the GO client. To make this less painful, Pepr automatically handles base64 encoding/decoding\n * secret data before and after the action is executed.\n */\nWhen(a.Secret)\n .IsCreated()\n .WithName("secret-1")\n .Mutate(request => {\n const secret = request.Raw;\n\n // This will be encoded at the end of all processing back to base64: "Y2hhbmdlLXdpdGhvdXQtZW5jb2Rpbmc="\n secret.data.magic = "change-without-encoding";\n\n // You can modify the data directly, and it will be encoded at the end of all processing\n secret.data.example += " - modified by Pepr";\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Untyped Custom Resource) *\n * ---------------------------------------------------------------------------------------------------\n *\n * Out of the box, Pepr supports all the standard Kubernetes objects. However, you can also create\n * your own types. This is useful if you are working with an Operator that creates custom resources.\n * There are two ways to do this, the first is to use the `When()` function with a `GenericKind`,\n * the second is to create a new class that extends `GenericKind` and use the `RegisterKind()` function.\n *\n * This example shows how to use the `When()` function with a `GenericKind`. Note that you\n * must specify the `group`, `version`, and `kind` of the object (if applicable). This is how Pepr knows\n * if the action should be triggered or not. Since we are using a `GenericKind`,\n * Pepr will not be able to provide any intellisense for the object, so you will need to refer to the\n * Kubernetes API documentation for the object you are working with.\n *\n * You will need to wait for the CRD in `hello-pepr.samples.yaml` to be created, then you can apply\n *\n * ```yaml\n * apiVersion: pepr.dev/v1\n * kind: Unicorn\n * metadata:\n * name: example-1\n * namespace: pepr-demo\n * spec:\n * message: replace-me\n * counter: 0\n * ```\n */\nWhen(a.GenericKind, {\n group: "pepr.dev",\n version: "v1",\n kind: "Unicorn",\n})\n .IsCreated()\n .WithName("example-1")\n .Mutate(request => {\n request.Merge({\n spec: {\n message: "Hello Pepr without type data!",\n counter: Math.random(),\n },\n });\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Typed Custom Resource) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This example shows how to use the `RegisterKind()` function to create a new type. This is useful\n * if you are working with an Operator that creates custom resources and you want to have intellisense\n * for the object. Note that you must specify the `group`, `version`, and `kind` of the object (if applicable)\n * as this is how Pepr knows if the action should be triggered or not.\n *\n * Once you register a new Kind with Pepr, you can use the `When()` function with the new Kind. Ideally,\n * you should register custom Kinds at the top of your Capability file or Pepr Module so they are available\n * to all actions, but we are putting it here for demonstration purposes.\n *\n * You will need to wait for the CRD in `hello-pepr.samples.yaml` to be created, then you can apply\n *\n * ```yaml\n * apiVersion: pepr.dev/v1\n * kind: Unicorn\n * metadata:\n * name: example-2\n * namespace: pepr-demo\n * spec:\n * message: replace-me\n * counter: 0\n * ```*\n */\nclass UnicornKind extends a.GenericKind {\n spec: {\n /**\n * JSDoc comments can be added to explain more details about the field.\n *\n * @example\n * ```ts\n * request.Raw.spec.message = "Hello Pepr!";\n * ```\n * */\n message: string;\n counter: number;\n };\n}\n\nRegisterKind(UnicornKind, {\n group: "pepr.dev",\n version: "v1",\n kind: "Unicorn",\n});\n\nWhen(UnicornKind)\n .IsCreated()\n .WithName("example-2")\n .Mutate(request => {\n request.Merge({\n spec: {\n message: "Hello Pepr with type data!",\n counter: Math.random(),\n },\n });\n });\n\n/**\n * A callback function that is called once the Pepr Store is fully loaded.\n */\nStore.onReady(data => {\n Log.info(data, "Pepr Store Ready");\n});\n';
8878
- var packageJSON = { name: "pepr", description: "Kubernetes application engine", author: "Defense Unicorns", homepage: "https://github.com/defenseunicorns/pepr", license: "Apache-2.0", bin: "dist/cli.js", repository: "defenseunicorns/pepr", engines: { node: ">=18.0.0" }, files: ["/dist", "/src", "!src/**/*.test.ts", "!src/fixtures/**", "!dist/**/*.test.d.ts*"], version: "0.52.2", main: "dist/lib.js", types: "dist/lib.d.ts", scripts: { build: "tsc -p config/tsconfig.root.json && node build.mjs && npm pack", "build:image": "npm run build && docker buildx build --output type=docker --tag pepr:dev .", "build:image:unicorn": "npm run build && docker buildx build --output type=docker --tag pepr/private:dev $(node scripts/read-unicorn-build-args.mjs) .", ci: "npm ci", "format:check": "npm run format:src && npm run format:tests && npm run format:markdown && npm run format:integration && npm run format:prettier -- --check", "format:fix": "npm run format:src -- --fix && npm run format:markdown -- --fix && npm run format:integration -- --fix && npm run format:prettier -- --write", "format:integration": "eslint --config config/eslint.integration.config.mjs integration/cli integration/helpers", "format:markdown": 'npx -y markdownlint-cli --config config/.markdownlint.json --ignore adr --ignore integration/testroot --ignore pepr-test-module --ignore node_modules "**/*.md"', "format:prettier": "prettier --config config/.prettierrc src integration/cli/**/*.ts integration/helpers/**/*.ts", "format:src": "eslint --config config/eslint.root.config.mjs 'src/**/*.ts' --ignore-pattern '**/*.test.ts' --ignore-pattern 'src/templates/**'", "format:tests": "eslint --config config/eslint.test.config.mjs 'src/**/*.test.ts'", "gen-data-json": "node hack/build-template-data.js", prebuild: "rm -fr dist/* && npm run gen-data-json", prepare: `if [ "$NODE_ENV" != 'production' ]; then husky; fi`, "set:version": "node scripts/set-version.js", test: "npm run test:unit && npm run test:journey && npm run test:journey-wasm", "test:artifacts": "npm run build && vitest run src/build-artifact.test.ts", "test:docs": "vitest run --config=config/vitest.integration.config.ts integration/cli/docs/*.test.ts", "test:integration": "npm run test:integration:prep && npm run test:integration:run", "test:integration:prep": "./integration/prep.sh", "test:integration:run": "vitest run --config=config/vitest.integration.config.ts integration", "test:journey": "npm run test:journey:k3d && npm run build && npm run test:journey:image && npm run test:journey:run", "test:journey-wasm": "npm run test:journey:k3d && npm run build && npm run test:journey:image && npm run test:journey:run-wasm", "test:journey-wasm:unicorn": "npm run test:journey:k3d && npm run build && npm run test:journey:image:unicorn && npm run test:journey:run-wasm", "test:journey:image": "npm run build && docker buildx build --output type=docker --tag pepr:dev . && k3d image import pepr:dev -c pepr-dev", "test:journey:image:unicorn": "npm run build && docker buildx build --output type=docker --tag pepr/private:dev $(node scripts/read-unicorn-build-args.mjs) . && k3d image import pepr/private:dev -c pepr-dev", "test:journey:k3d": "k3d cluster delete pepr-dev && k3d cluster create pepr-dev --k3s-arg '--debug@server:0' --wait && kubectl rollout status deployment -n kube-system", "test:journey:run": "vitest run --config=config/vitest.journey.config.ts journey/entrypoint.test.ts", "test:journey:run-wasm": "vitest run --config=config/vitest.journey.config.ts journey/entrypoint-wasm.test.ts", "test:journey:unicorn": "npm run test:journey:k3d && npm run test:journey:image:unicorn && npm run test:journey:run", "test:unit": "npm run gen-data-json && NODE_OPTIONS=--no-deprecation vitest --config config/vitest.root.config.ts run --coverage", "test:upgrade:unicorn": "npm run test:journey:k3d && npm run test:journey:image:unicorn && vitest run integration/cluster/upgrade.test.ts", "test:upgrade:upstream": "npm run test:journey:k3d && npm run test:journey:image && vitest run integration/cluster/upgrade.test.ts" }, dependencies: { "@types/ramda": "0.30.2", commander: "14.0.0", express: "5.1.0", "fast-json-patch": "3.1.1", heredoc: "^1.3.1", "http-status-codes": "^2.3.0", "json-pointer": "^0.6.2", "kubernetes-fluent-client": "3.9.0", pino: "9.7.0", "pino-pretty": "13.0.0", "prom-client": "15.1.3", ramda: "0.31.3", sigstore: "3.1.0", "ts-morph": "^26.0.0" }, devDependencies: { "@commitlint/cli": "19.8.1", "@commitlint/config-conventional": "19.8.1", "@fast-check/vitest": "^0.2.1", "@types/eslint": "9.6.1", "@types/express": "5.0.3", "@types/json-pointer": "^1.0.34", "@types/node": "24.x.x", "@types/node-forge": "1.3.13", "@types/uuid": "10.0.0", "@types/ws": "^8.18.1", "@vitest/coverage-v8": "^3.2.3", "fast-check": "^4.0.0", globals: "^16.0.0", husky: "^9.1.6", "js-yaml": "^4.1.0", shellcheck: "^3.0.0", tsx: "^4.20.3", undici: "^7.0.1", vitest: "^3.2.3" }, overrides: { glob: "^9.0.0" }, peerDependencies: { "@types/prompts": "2.4.9", "@typescript-eslint/eslint-plugin": "8.33.0", "@typescript-eslint/parser": "8.33.0", esbuild: "0.25.5", eslint: "^9.26.0", "node-forge": "1.3.1", prettier: "3.5.3", prompts: "2.4.2", typescript: "5.8.3", uuid: "11.1.0" } };
8879
-
8880
- // src/cli/init/utils.ts
8881
- var import_fs4 = require("fs");
8882
- function sanitizeName(name2) {
8883
- if (typeof name2 !== "string") {
8884
- throw TypeError(
8885
- `sanitizeName() was called with a non-string value. The value is: ${name2} of type ${typeof name2}`
8886
- );
8887
- }
8888
- let sanitized = name2.toLowerCase().replace(/[^a-z0-9-]+/gi, "-");
8889
- sanitized = sanitized.replace(/^-+|-+$/g, "");
8890
- sanitized = sanitized.replace(/--+/g, "-");
8891
- return sanitized;
8892
- }
8893
- async function createDir(dir) {
8894
- try {
8895
- await import_fs4.promises.mkdir(dir);
8896
- } catch (err) {
8897
- if (err && err.code === "EEXIST") {
8898
- throw new Error(`Directory ${dir} already exists`);
8899
- } else {
8900
- throw err;
8901
- }
8902
- }
8784
+ return deploy;
8903
8785
  }
8904
- function write(path4, data) {
8905
- if (typeof data !== "string") {
8906
- data = JSON.stringify(data, null, 2);
8786
+ function getDeployment(assets, hash, buildTimestamp, imagePullSecret) {
8787
+ const { name: name2, image, config } = assets;
8788
+ const app = name2;
8789
+ if (!isAdmission(assets.capabilities) && !norWatchOrAdmission(assets.capabilities)) {
8790
+ return null;
8907
8791
  }
8908
- return import_fs4.promises.writeFile(path4, data);
8909
- }
8910
-
8911
- // src/cli/init/templates.ts
8912
- var { dependencies, devDependencies, peerDependencies, scripts, version } = packageJSON;
8913
- function genPkgJSON(opts) {
8914
- const uuid = !opts.uuid ? (0, import_uuid.v4)() : opts.uuid;
8915
- const name2 = sanitizeName(opts.name);
8916
- const { typescript } = peerDependencies;
8917
- const data = {
8918
- name: name2,
8919
- version: "0.0.1",
8920
- description: opts.description,
8921
- keywords: ["pepr", "k8s", "policy-engine", "pepr-module", "security"],
8922
- engines: {
8923
- node: ">=20.0.0"
8924
- },
8925
- pepr: {
8926
- uuid,
8927
- onError: opts.errorBehavior,
8928
- webhookTimeout: 10,
8929
- customLabels: {
8930
- namespace: {
8931
- "pepr.dev": ""
8932
- }
8933
- },
8934
- alwaysIgnore: {
8935
- namespaces: []
8936
- },
8937
- admission: {
8938
- alwaysIgnore: {
8939
- namespaces: []
8940
- }
8792
+ const deploy = {
8793
+ apiVersion: "apps/v1",
8794
+ kind: "Deployment",
8795
+ metadata: {
8796
+ name: name2,
8797
+ namespace: "pepr-system",
8798
+ annotations: {
8799
+ "pepr.dev/description": config.description || ""
8941
8800
  },
8942
- watch: {
8943
- alwaysIgnore: {
8944
- namespaces: []
8945
- }
8946
- },
8947
- includedFiles: [],
8948
- env: {}
8949
- },
8950
- scripts: {
8951
- "k3d-setup": scripts["test:journey:k3d"]
8952
- },
8953
- dependencies: {
8954
- pepr: version,
8955
- undici: "^7.0.1"
8956
- },
8957
- devDependencies: {
8958
- typescript
8959
- },
8960
- overrides: {
8961
- "brace-expansion": "1.1.11"
8962
- }
8963
- };
8964
- return {
8965
- data,
8966
- path: "package.json",
8967
- print: (0, import_util.inspect)(data, false, 5, true)
8968
- };
8969
- }
8970
- var peprTSTemplate = {
8971
- path: "pepr.ts",
8972
- data: peprTS
8973
- };
8974
- var readme = {
8975
- path: "README.md",
8976
- data: readmeMd
8977
- };
8978
- var helloPepr = {
8979
- path: "hello-pepr.ts",
8980
- data: helloPeprTS
8981
- };
8982
- var gitignore = {
8983
- path: ".gitignore",
8984
- data: gitIgnore
8985
- };
8986
- var samplesYaml = {
8987
- path: "hello-pepr.samples.yaml",
8988
- data: hello_pepr_samples_default.map((r) => (0, import_client_node3.dumpYaml)(r, { noRefs: true })).join("---\n")
8989
- };
8990
- var snippet = {
8991
- path: "pepr.code-snippets",
8992
- data: pepr_code_snippets_default
8993
- };
8994
- var codeSettings = {
8995
- path: "settings.json",
8996
- data: settings_default
8997
- };
8998
- var tsConfig = {
8999
- path: "tsconfig.json",
9000
- data: tsconfig_module_default
9001
- };
9002
- var prettier = {
9003
- path: ".prettierrc",
9004
- data: prettierrc_default
9005
- };
9006
- var eslint = {
9007
- path: "eslint.config.mjs",
9008
- data: (0, import_fs5.readFileSync)(
9009
- import_path2.default.resolve(
9010
- (() => {
9011
- const fullPath = __dirname;
9012
- const lengthOfSuffix = "pepr/".length;
9013
- const lastPeprIndex = fullPath.lastIndexOf("pepr/");
9014
- return fullPath.substring(0, lastPeprIndex + lengthOfSuffix);
9015
- })(),
9016
- "src/templates/eslint.config.mjs"
9017
- ),
9018
- "utf-8"
9019
- )
9020
- };
9021
-
9022
- // src/cli/build.ts
9023
- var import_commander = require("commander");
9024
-
9025
- // src/cli/format/index.ts
9026
- var import_eslint = require("eslint");
9027
-
9028
- // src/cli/format/format.helpers.ts
9029
- var import_fs6 = require("fs");
9030
- var import_prettier = require("prettier");
9031
- async function formatWithPrettier(results, validateOnly) {
9032
- let hasFailure = false;
9033
- for (const { filePath } of results) {
9034
- const content = await import_fs6.promises.readFile(filePath, "utf8");
9035
- const cfg = await (0, import_prettier.resolveConfig)(filePath);
9036
- const formatted = await (0, import_prettier.format)(content, { filepath: filePath, ...cfg });
9037
- if (validateOnly && formatted !== content) {
9038
- hasFailure = true;
9039
- console.error(`File ${filePath} is not formatted correctly`);
9040
- } else {
9041
- await import_fs6.promises.writeFile(filePath, formatted);
9042
- }
9043
- }
9044
- return hasFailure;
9045
- }
9046
-
9047
- // src/cli/format/index.ts
9048
- function format_default(program2) {
9049
- program2.command("format").description("Lint and format this Pepr module").option("-v, --validate-only", "Do not modify files, only validate formatting.").action(async (opts) => {
9050
- const success = await peprFormat(opts.validateOnly);
9051
- if (success) {
9052
- logger_default.info("Module formatted");
9053
- } else {
9054
- process.exit(1);
9055
- }
9056
- });
9057
- }
9058
- async function peprFormat(validateOnly) {
9059
- {
9060
- try {
9061
- const eslint2 = new import_eslint.ESLint();
9062
- const results = await eslint2.lintFiles(["./**/*.ts"]);
9063
- let hasFailure = false;
9064
- results.forEach(async (result) => {
9065
- const errorCount = result.fatalErrorCount + result.errorCount;
9066
- if (errorCount > 0) {
9067
- hasFailure = true;
9068
- }
9069
- });
9070
- const formatter = await eslint2.loadFormatter("stylish");
9071
- const resultText = await formatter.format(results, {});
9072
- if (resultText) {
9073
- logger_default.info(resultText);
9074
- }
9075
- if (!validateOnly) {
9076
- await import_eslint.ESLint.outputFixes(results);
9077
- }
9078
- hasFailure = hasFailure || await formatWithPrettier(results, validateOnly);
9079
- return !hasFailure;
9080
- } catch (error) {
9081
- logger_default.error(error, `Error formatting module:`);
9082
- return false;
9083
- }
9084
- }
9085
- }
9086
-
9087
- // src/lib/included-files.ts
9088
- var import_fs7 = require("fs");
9089
- async function createDockerfile(version3, description, includedFiles) {
9090
- const file = `
9091
- # Use an official Node.js runtime as the base image
9092
- FROM ghcr.io/defenseunicorns/pepr/controller:v${version3}
9093
-
9094
- LABEL description="${description}"
9095
-
9096
- # Add the included files to the image
9097
- ${includedFiles.map((f) => `ADD ${f} ${f}`).join("\n")}
9098
-
9099
- `;
9100
- await import_fs7.promises.writeFile("Dockerfile.controller", file, { encoding: "utf-8" });
9101
- }
9102
-
9103
- // src/cli/build.helpers.ts
9104
- var import_child_process2 = require("child_process");
9105
- var import_esbuild = require("esbuild");
9106
- var import_path3 = require("path");
9107
- var import_fs9 = require("fs");
9108
-
9109
- // src/lib/assets/yaml/generateAllYaml.ts
9110
- var import_crypto2 = __toESM(require("crypto"));
9111
- var import_client_node4 = require("@kubernetes/client-node");
9112
-
9113
- // src/lib/assets/k8sObjects.ts
9114
- var import_zlib = require("zlib");
9115
- function getNamespace(namespaceLabels) {
9116
- if (namespaceLabels) {
9117
- return {
9118
- apiVersion: "v1",
9119
- kind: "Namespace",
9120
- metadata: {
9121
- name: "pepr-system",
9122
- labels: namespaceLabels ?? {}
9123
- }
9124
- };
9125
- } else {
9126
- return {
9127
- apiVersion: "v1",
9128
- kind: "Namespace",
9129
- metadata: {
9130
- name: "pepr-system"
9131
- }
9132
- };
9133
- }
9134
- }
9135
- function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9136
- const { name: name2, image, config } = assets;
9137
- if (!isWatcher(assets.capabilities)) {
9138
- return null;
9139
- }
9140
- const app = `${name2}-watcher`;
9141
- const deploy = {
9142
- apiVersion: "apps/v1",
9143
- kind: "Deployment",
9144
- metadata: {
9145
- name: app,
9146
- namespace: "pepr-system",
9147
- annotations: {
9148
- "pepr.dev/description": config.description || ""
9149
- },
9150
- labels: {
9151
- app,
9152
- "pepr.dev/controller": "watcher",
9153
- "pepr.dev/uuid": config.uuid
9154
- }
9155
- },
9156
- spec: {
9157
- replicas: 1,
9158
- strategy: {
9159
- type: "Recreate"
9160
- },
9161
- selector: {
9162
- matchLabels: {
9163
- app,
9164
- "pepr.dev/controller": "watcher"
8801
+ labels: {
8802
+ app,
8803
+ "pepr.dev/controller": "admission",
8804
+ "pepr.dev/uuid": config.uuid
8805
+ }
8806
+ },
8807
+ spec: {
8808
+ replicas: 2,
8809
+ selector: {
8810
+ matchLabels: {
8811
+ app,
8812
+ "pepr.dev/controller": "admission"
9165
8813
  }
9166
8814
  },
9167
8815
  template: {
@@ -9171,11 +8819,12 @@ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9171
8819
  },
9172
8820
  labels: {
9173
8821
  app,
9174
- "pepr.dev/controller": "watcher"
8822
+ "pepr.dev/controller": "admission"
9175
8823
  }
9176
8824
  },
9177
8825
  spec: {
9178
8826
  terminationGracePeriodSeconds: 5,
8827
+ priorityClassName: "system-node-critical",
9179
8828
  serviceAccountName: name2,
9180
8829
  securityContext: {
9181
8830
  runAsUser: image.includes("private") ? 1e3 : 65532,
@@ -9185,7 +8834,7 @@ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9185
8834
  },
9186
8835
  containers: [
9187
8836
  {
9188
- name: "watcher",
8837
+ name: "server",
9189
8838
  image,
9190
8839
  imagePullPolicy: "IfNotPresent",
9191
8840
  args: ["/app/node_modules/pepr/dist/controller.js", hash],
@@ -9220,6 +8869,7 @@ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9220
8869
  cpu: "500m"
9221
8870
  }
9222
8871
  },
8872
+ env: genEnv(config),
9223
8873
  securityContext: {
9224
8874
  runAsUser: image.includes("private") ? 1e3 : 65532,
9225
8875
  runAsGroup: 65532,
@@ -9235,13 +8885,17 @@ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9235
8885
  mountPath: "/etc/certs",
9236
8886
  readOnly: true
9237
8887
  },
8888
+ {
8889
+ name: "api-path",
8890
+ mountPath: "/app/api-path",
8891
+ readOnly: true
8892
+ },
9238
8893
  {
9239
8894
  name: "module",
9240
8895
  mountPath: `/app/load`,
9241
8896
  readOnly: true
9242
8897
  }
9243
- ],
9244
- env: genEnv(config, true)
8898
+ ]
9245
8899
  }
9246
8900
  ],
9247
8901
  volumes: [
@@ -9251,6 +8905,12 @@ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9251
8905
  secretName: `${name2}-tls`
9252
8906
  }
9253
8907
  },
8908
+ {
8909
+ name: "api-path",
8910
+ secret: {
8911
+ secretName: `${name2}-api-path`
8912
+ }
8913
+ },
9254
8914
  {
9255
8915
  name: "module",
9256
8916
  secret: {
@@ -9267,611 +8927,824 @@ function getWatcher(assets, hash, buildTimestamp, imagePullSecret) {
9267
8927
  }
9268
8928
  return deploy;
9269
8929
  }
9270
- function getDeployment(assets, hash, buildTimestamp, imagePullSecret) {
9271
- const { name: name2, image, config } = assets;
9272
- const app = name2;
8930
+ function getModuleSecret(name2, data, hash) {
8931
+ const compressed = (0, import_zlib.gzipSync)(data);
8932
+ const path4 = `module-${hash}.js.gz`;
8933
+ const compressedData = compressed.toString("base64");
8934
+ if (secretOverLimit(compressedData)) {
8935
+ const error = new Error(`Module secret for ${name2} is over the 1MB limit`);
8936
+ throw error;
8937
+ } else {
8938
+ return {
8939
+ apiVersion: "v1",
8940
+ kind: "Secret",
8941
+ metadata: {
8942
+ name: `${name2}-module`,
8943
+ namespace: "pepr-system"
8944
+ },
8945
+ type: "Opaque",
8946
+ data: {
8947
+ [path4]: compressed.toString("base64")
8948
+ }
8949
+ };
8950
+ }
8951
+ }
8952
+ function service(name2, assets) {
9273
8953
  if (!isAdmission(assets.capabilities) && !norWatchOrAdmission(assets.capabilities)) {
9274
8954
  return null;
9275
8955
  }
9276
- const deploy = {
9277
- apiVersion: "apps/v1",
9278
- kind: "Deployment",
8956
+ return {
8957
+ apiVersion: "v1",
8958
+ kind: "Service",
9279
8959
  metadata: {
9280
8960
  name: name2,
9281
8961
  namespace: "pepr-system",
9282
- annotations: {
9283
- "pepr.dev/description": config.description || ""
9284
- },
9285
8962
  labels: {
9286
- app,
9287
- "pepr.dev/controller": "admission",
9288
- "pepr.dev/uuid": config.uuid
8963
+ "pepr.dev/controller": "admission"
9289
8964
  }
9290
8965
  },
9291
8966
  spec: {
9292
- replicas: 2,
9293
8967
  selector: {
9294
- matchLabels: {
9295
- app,
9296
- "pepr.dev/controller": "admission"
9297
- }
8968
+ app: name2,
8969
+ "pepr.dev/controller": "admission"
9298
8970
  },
9299
- template: {
9300
- metadata: {
9301
- annotations: {
9302
- buildTimestamp: `${buildTimestamp}`
9303
- },
9304
- labels: {
9305
- app,
9306
- "pepr.dev/controller": "admission"
9307
- }
9308
- },
9309
- spec: {
9310
- terminationGracePeriodSeconds: 5,
9311
- priorityClassName: "system-node-critical",
9312
- serviceAccountName: name2,
9313
- securityContext: {
9314
- runAsUser: image.includes("private") ? 1e3 : 65532,
9315
- runAsGroup: 65532,
9316
- runAsNonRoot: true,
9317
- fsGroup: 65532
9318
- },
9319
- containers: [
9320
- {
9321
- name: "server",
9322
- image,
9323
- imagePullPolicy: "IfNotPresent",
9324
- args: ["/app/node_modules/pepr/dist/controller.js", hash],
9325
- readinessProbe: {
9326
- httpGet: {
9327
- path: "/healthz",
9328
- port: 3e3,
9329
- scheme: "HTTPS"
9330
- },
9331
- initialDelaySeconds: 10
9332
- },
9333
- livenessProbe: {
9334
- httpGet: {
9335
- path: "/healthz",
9336
- port: 3e3,
9337
- scheme: "HTTPS"
9338
- },
9339
- initialDelaySeconds: 10
9340
- },
9341
- ports: [
9342
- {
9343
- containerPort: 3e3
9344
- }
9345
- ],
9346
- resources: {
9347
- requests: {
9348
- memory: "256Mi",
9349
- cpu: "200m"
9350
- },
9351
- limits: {
9352
- memory: "512Mi",
9353
- cpu: "500m"
9354
- }
9355
- },
9356
- env: genEnv(config),
9357
- securityContext: {
9358
- runAsUser: image.includes("private") ? 1e3 : 65532,
9359
- runAsGroup: 65532,
9360
- runAsNonRoot: true,
9361
- allowPrivilegeEscalation: false,
9362
- capabilities: {
9363
- drop: ["ALL"]
9364
- }
9365
- },
9366
- volumeMounts: [
9367
- {
9368
- name: "tls-certs",
9369
- mountPath: "/etc/certs",
9370
- readOnly: true
9371
- },
9372
- {
9373
- name: "api-path",
9374
- mountPath: "/app/api-path",
9375
- readOnly: true
9376
- },
9377
- {
9378
- name: "module",
9379
- mountPath: `/app/load`,
9380
- readOnly: true
9381
- }
9382
- ]
9383
- }
9384
- ],
9385
- volumes: [
9386
- {
9387
- name: "tls-certs",
9388
- secret: {
9389
- secretName: `${name2}-tls`
9390
- }
9391
- },
9392
- {
9393
- name: "api-path",
9394
- secret: {
9395
- secretName: `${name2}-api-path`
9396
- }
9397
- },
9398
- {
9399
- name: "module",
9400
- secret: {
9401
- secretName: `${name2}-module`
9402
- }
9403
- }
9404
- ]
8971
+ ports: [
8972
+ {
8973
+ port: 443,
8974
+ targetPort: 3e3
9405
8975
  }
8976
+ ]
8977
+ }
8978
+ };
8979
+ }
8980
+ function watcherService(name2, assets) {
8981
+ if (!isWatcher(assets.capabilities)) {
8982
+ return null;
8983
+ }
8984
+ return {
8985
+ apiVersion: "v1",
8986
+ kind: "Service",
8987
+ metadata: {
8988
+ name: `${name2}-watcher`,
8989
+ namespace: "pepr-system",
8990
+ labels: {
8991
+ "pepr.dev/controller": "watcher"
9406
8992
  }
8993
+ },
8994
+ spec: {
8995
+ selector: {
8996
+ app: `${name2}-watcher`,
8997
+ "pepr.dev/controller": "watcher"
8998
+ },
8999
+ ports: [
9000
+ {
9001
+ port: 443,
9002
+ targetPort: 3e3
9003
+ }
9004
+ ]
9407
9005
  }
9408
9006
  };
9409
- if (imagePullSecret) {
9410
- deploy.spec.template.spec.imagePullSecrets = [{ name: imagePullSecret }];
9007
+ }
9008
+
9009
+ // src/lib/assets/yaml/generateAllYaml.ts
9010
+ var import_fs5 = require("fs");
9011
+
9012
+ // src/lib/assets/webhooks.ts
9013
+ var import_ramda = require("ramda");
9014
+ var peprIgnoreNamespaces = ["kube-system", "pepr-system"];
9015
+ var validateRule = (binding, isMutateWebhook) => {
9016
+ const { event, kind: kind8, isMutate, isValidate } = binding;
9017
+ if (isMutateWebhook && !isMutate || !isMutateWebhook && !isValidate) {
9018
+ return void 0;
9019
+ }
9020
+ const operations = event === "CREATEORUPDATE" /* CREATE_OR_UPDATE */ ? ["CREATE" /* CREATE */, "UPDATE" /* UPDATE */] : [event];
9021
+ const resource = kind8.plural || `${kind8.kind.toLowerCase()}s`;
9022
+ const ruleObject = {
9023
+ apiGroups: [kind8.group],
9024
+ apiVersions: [kind8.version || "*"],
9025
+ operations,
9026
+ resources: [resource, ...resource === "pods" ? ["pods/ephemeralcontainers"] : []]
9027
+ };
9028
+ return ruleObject;
9029
+ };
9030
+ async function generateWebhookRules(assets, isMutateWebhook) {
9031
+ const { capabilities } = assets;
9032
+ const rules = capabilities.flatMap(
9033
+ (capability) => capability.bindings.map((binding) => validateRule(binding, isMutateWebhook)).filter((rule) => !!rule)
9034
+ );
9035
+ return (0, import_ramda.uniqWith)(import_ramda.equals, rules);
9036
+ }
9037
+ async function webhookConfigGenerator(assets, mutateOrValidate, timeoutSeconds = 10) {
9038
+ const ignore = [];
9039
+ const { name: name2, tls, config, apiPath, host } = assets;
9040
+ const ignoreNS = (0, import_ramda.concat)(
9041
+ peprIgnoreNamespaces,
9042
+ resolveIgnoreNamespaces(
9043
+ config?.alwaysIgnore?.namespaces?.length ? config?.alwaysIgnore?.namespaces : config?.admission?.alwaysIgnore?.namespaces
9044
+ )
9045
+ );
9046
+ if (ignoreNS) {
9047
+ ignore.push({
9048
+ key: "kubernetes.io/metadata.name",
9049
+ operator: "NotIn",
9050
+ values: ignoreNS
9051
+ });
9052
+ }
9053
+ const clientConfig = {
9054
+ caBundle: tls.ca
9055
+ };
9056
+ const fullApiPath = `/${mutateOrValidate}/${apiPath}`;
9057
+ if (host) {
9058
+ clientConfig.url = `https://${host}:3000${fullApiPath}`;
9059
+ } else {
9060
+ clientConfig.service = {
9061
+ name: name2,
9062
+ namespace: "pepr-system",
9063
+ path: fullApiPath
9064
+ };
9065
+ }
9066
+ const isMutate = mutateOrValidate === "mutate" /* MUTATE */;
9067
+ const rules = await generateWebhookRules(assets, isMutate);
9068
+ if (rules.length < 1) {
9069
+ return null;
9070
+ }
9071
+ return {
9072
+ apiVersion: "admissionregistration.k8s.io/v1",
9073
+ kind: isMutate ? "MutatingWebhookConfiguration" : "ValidatingWebhookConfiguration",
9074
+ metadata: { name: name2 },
9075
+ webhooks: [
9076
+ {
9077
+ name: `${name2}.pepr.dev`,
9078
+ admissionReviewVersions: ["v1", "v1beta1"],
9079
+ clientConfig,
9080
+ failurePolicy: config.onError === "reject" ? "Fail" : "Ignore",
9081
+ matchPolicy: "Equivalent",
9082
+ timeoutSeconds,
9083
+ namespaceSelector: {
9084
+ matchExpressions: ignore
9085
+ },
9086
+ rules,
9087
+ // @todo: track side effects state
9088
+ sideEffects: "None"
9089
+ }
9090
+ ]
9091
+ };
9092
+ }
9093
+
9094
+ // src/lib/assets/yaml/generateAllYaml.ts
9095
+ function pushControllerManifests(resources, deployments, services) {
9096
+ if (deployments.watch) {
9097
+ resources.push(deployments.watch);
9098
+ }
9099
+ if (deployments.admission) {
9100
+ resources.push(deployments.admission);
9101
+ }
9102
+ if (services.admission) {
9103
+ resources.push(services.admission);
9104
+ }
9105
+ if (services.watch) {
9106
+ resources.push(services.watch);
9107
+ }
9108
+ return resources;
9109
+ }
9110
+ async function generateAllYaml(assets, deployments, services) {
9111
+ const { name: name2, tls, apiPath, path: path4, config } = assets;
9112
+ const code = await import_fs5.promises.readFile(path4);
9113
+ const hash = import_crypto2.default.createHash("sha256").update(code).digest("hex");
9114
+ let resources = [
9115
+ getNamespace(assets.config.customLabels?.namespace),
9116
+ clusterRole(name2, assets.capabilities, config.rbacMode, config.rbac),
9117
+ clusterRoleBinding(name2),
9118
+ serviceAccount(name2),
9119
+ apiPathSecret(name2, apiPath),
9120
+ tlsSecret(name2, tls),
9121
+ getModuleSecret(name2, code, hash),
9122
+ storeRole(name2),
9123
+ storeRoleBinding(name2)
9124
+ ];
9125
+ resources = pushControllerManifests(resources, deployments, services);
9126
+ const webhooks = {
9127
+ mutate: await webhookConfigGenerator(assets, "mutate" /* MUTATE */, assets.config.webhookTimeout),
9128
+ validate: await webhookConfigGenerator(
9129
+ assets,
9130
+ "validate" /* VALIDATE */,
9131
+ assets.config.webhookTimeout
9132
+ )
9133
+ };
9134
+ const additionalResources = [webhooks.mutate, webhooks.validate].filter(
9135
+ (resource) => resource !== null && resource !== void 0
9136
+ );
9137
+ resources.push(...additionalResources);
9138
+ return resources.map((resource) => (0, import_client_node3.dumpYaml)(resource, { noRefs: true })).join("---\n");
9139
+ }
9140
+
9141
+ // src/lib/assets/yaml/generateZarfYaml.ts
9142
+ var import_client_node4 = require("@kubernetes/client-node");
9143
+ function generateZarfYamlGeneric(assets, path4, type) {
9144
+ const zarfComponentName = process.env.PEPR_CUSTOM_BUILD_NAME ?? "module";
9145
+ const manifestSettings = {
9146
+ name: zarfComponentName,
9147
+ namespace: "pepr-system",
9148
+ files: [path4]
9149
+ };
9150
+ const chartSettings = {
9151
+ name: zarfComponentName,
9152
+ namespace: "pepr-system",
9153
+ version: `${assets.config.appVersion || "0.0.1"}`,
9154
+ localPath: path4
9155
+ };
9156
+ const component = {
9157
+ name: zarfComponentName,
9158
+ required: true,
9159
+ images: [assets.image],
9160
+ [type]: [type === "manifests" ? manifestSettings : chartSettings]
9161
+ };
9162
+ const zarfCfg = {
9163
+ kind: "ZarfPackageConfig",
9164
+ metadata: {
9165
+ name: assets.name,
9166
+ description: `Pepr Module: ${assets.config.description}`,
9167
+ url: "https://github.com/defenseunicorns/pepr",
9168
+ version: `${assets.config.appVersion || "0.0.1"}`
9169
+ },
9170
+ components: [component]
9171
+ };
9172
+ return (0, import_client_node4.dumpYaml)(zarfCfg, { noRefs: true });
9173
+ }
9174
+
9175
+ // src/cli/build/build.helpers.ts
9176
+ function assignImage(imageOptions) {
9177
+ const { customImage, registryInfo, peprVersion, registry } = imageOptions;
9178
+ if (customImage) {
9179
+ return customImage;
9180
+ }
9181
+ if (registryInfo) {
9182
+ return `${registryInfo}/custom-pepr-controller:${peprVersion}`;
9183
+ }
9184
+ if (registry) {
9185
+ return checkIronBankImage(registry, "", peprVersion);
9186
+ }
9187
+ return "";
9188
+ }
9189
+ function determineRbacMode(opts, cfg) {
9190
+ if (opts.rbacMode) {
9191
+ return opts.rbacMode;
9192
+ }
9193
+ if (cfg.pepr.rbacMode && cfg.pepr.rbacMode !== "scoped") {
9194
+ return "admin";
9195
+ }
9196
+ return cfg.pepr.rbacMode || "admin";
9197
+ }
9198
+ async function createOutputDirectory(outputDir) {
9199
+ try {
9200
+ const dir = outputDir === "" ? "dist" : outputDir;
9201
+ await createDirectoryIfNotExists(dir);
9202
+ return dir;
9203
+ } catch (error) {
9204
+ console.error(`Error creating output directory: ${error.message}`);
9205
+ process.exit(1);
9206
+ }
9207
+ }
9208
+ function checkIronBankImage(registry, image, peprVersion) {
9209
+ return registry === "Iron Bank" ? `registry1.dso.mil/ironbank/opensource/defenseunicorns/pepr/controller:v${peprVersion}` : image;
9210
+ }
9211
+ function validImagePullSecret(imagePullSecretName) {
9212
+ return sanitizeResourceName(imagePullSecretName) === imagePullSecretName;
9213
+ }
9214
+ async function handleCustomImageBuild(includedFiles, peprVersion, description, image) {
9215
+ if (includedFiles.length > 0) {
9216
+ await createDockerfile(peprVersion, description, includedFiles);
9217
+ (0, import_child_process2.execSync)(`docker build --tag ${image} -f Dockerfile.controller .`, {
9218
+ stdio: "inherit"
9219
+ });
9220
+ (0, import_child_process2.execSync)(`docker push ${image}`, { stdio: "inherit" });
9411
9221
  }
9412
- return deploy;
9413
9222
  }
9414
- function getModuleSecret(name2, data, hash) {
9415
- const compressed = (0, import_zlib.gzipSync)(data);
9416
- const path4 = `module-${hash}.js.gz`;
9417
- const compressedData = compressed.toString("base64");
9418
- if (secretOverLimit(compressedData)) {
9419
- const error = new Error(`Module secret for ${name2} is over the 1MB limit`);
9420
- throw error;
9223
+ function handleValidCapabilityNames(capabilities) {
9224
+ try {
9225
+ validateCapabilityNames(capabilities);
9226
+ } catch (e) {
9227
+ console.error(`Error loading capability:`, e);
9228
+ process.exit(1);
9229
+ }
9230
+ }
9231
+ async function watchForChanges(ctxCfg, reloader) {
9232
+ const ctx = await (0, import_esbuild.context)(ctxCfg);
9233
+ if (reloader) {
9234
+ await ctx.watch();
9421
9235
  } else {
9422
- return {
9423
- apiVersion: "v1",
9424
- kind: "Secret",
9425
- metadata: {
9426
- name: `${name2}-module`,
9427
- namespace: "pepr-system"
9236
+ await ctx.rebuild();
9237
+ await ctx.dispose();
9238
+ }
9239
+ return ctx;
9240
+ }
9241
+ async function generateYamlAndWriteToDisk(obj) {
9242
+ const { uuid, imagePullSecret, outputDir, assets, zarf } = obj;
9243
+ const yamlFile = `pepr-module-${uuid}.yaml`;
9244
+ const chartPath = `${uuid}-chart`;
9245
+ const yamlPath = (0, import_path2.resolve)(outputDir, yamlFile);
9246
+ try {
9247
+ const yaml = await assets.allYaml(
9248
+ generateAllYaml,
9249
+ {
9250
+ getDeploymentFunction: getDeployment,
9251
+ getWatcherFunction: getWatcher,
9252
+ getServiceFunction: service,
9253
+ getWatcherServiceFunction: watcherService
9428
9254
  },
9429
- type: "Opaque",
9430
- data: {
9431
- [path4]: compressed.toString("base64")
9432
- }
9433
- };
9255
+ imagePullSecret
9256
+ );
9257
+ const zarfPath = (0, import_path2.resolve)(outputDir, "zarf.yaml");
9258
+ let localZarf = "";
9259
+ if (zarf === "chart") {
9260
+ localZarf = assets.zarfYamlChart(generateZarfYamlGeneric, chartPath);
9261
+ } else {
9262
+ localZarf = assets.zarfYaml(generateZarfYamlGeneric, yamlFile);
9263
+ }
9264
+ await import_fs6.promises.writeFile(yamlPath, yaml);
9265
+ await import_fs6.promises.writeFile(zarfPath, localZarf);
9266
+ await assets.generateHelmChart(webhookConfigGenerator, getWatcher, getModuleSecret, outputDir);
9267
+ console.info(`K8s resource for the module saved to ${yamlPath}`);
9268
+ } catch (error) {
9269
+ console.error(`Error generating YAML: ${error}`);
9270
+ process.exit(1);
9434
9271
  }
9435
9272
  }
9436
- function service(name2, assets) {
9437
- if (!isAdmission(assets.capabilities) && !norWatchOrAdmission(assets.capabilities)) {
9438
- return null;
9273
+
9274
+ // src/cli/build/buildModule.ts
9275
+ var import_child_process3 = require("child_process");
9276
+ var import_esbuild2 = require("esbuild");
9277
+ var import_path4 = require("path");
9278
+
9279
+ // src/cli/init/templates.ts
9280
+ var import_client_node5 = require("@kubernetes/client-node");
9281
+ var import_util = require("util");
9282
+ var import_uuid = require("uuid");
9283
+ var import_fs8 = require("fs");
9284
+ var import_path3 = __toESM(require("path"));
9285
+
9286
+ // src/templates/pepr.code-snippets.json
9287
+ var pepr_code_snippets_default = {
9288
+ "Create a new Pepr capability": {
9289
+ prefix: "create pepr capability",
9290
+ body: [
9291
+ "import { Capability, a } from 'pepr';",
9292
+ "",
9293
+ "export const ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/} = new Capability({",
9294
+ " name: '${TM_FILENAME_BASE}',",
9295
+ " description: '${1:A brief description of this capability.}',",
9296
+ " namespaces: [${2:}],",
9297
+ "});",
9298
+ "",
9299
+ "// Use the 'When' function to create a new action",
9300
+ "const { When } = ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/};",
9301
+ "",
9302
+ "// When(a.<Kind>).Is<Event>().Then(change => change.<changes>",
9303
+ "When(${3:})"
9304
+ ],
9305
+ description: "Creates a new Pepr capability with a specified description, optional namespaces, and adds a When statement for the specified value."
9439
9306
  }
9440
- return {
9307
+ };
9308
+
9309
+ // src/templates/.prettierrc.json
9310
+ var prettierrc_default = {
9311
+ arrowParens: "avoid",
9312
+ bracketSameLine: false,
9313
+ bracketSpacing: true,
9314
+ embeddedLanguageFormatting: "auto",
9315
+ insertPragma: false,
9316
+ printWidth: 100,
9317
+ quoteProps: "as-needed",
9318
+ requirePragma: false,
9319
+ semi: true,
9320
+ tabWidth: 2,
9321
+ useTabs: false,
9322
+ vueIndentScriptAndStyle: false
9323
+ };
9324
+
9325
+ // src/templates/capabilities/hello-pepr.samples.json
9326
+ var hello_pepr_samples_default = [
9327
+ {
9441
9328
  apiVersion: "v1",
9442
- kind: "Service",
9329
+ kind: "Namespace",
9443
9330
  metadata: {
9444
- name: name2,
9445
- namespace: "pepr-system",
9331
+ name: "pepr-demo",
9446
9332
  labels: {
9447
- "pepr.dev/controller": "admission"
9333
+ "keep-me": "please",
9334
+ "remove-me": "please"
9448
9335
  }
9336
+ }
9337
+ },
9338
+ {
9339
+ apiVersion: "v1",
9340
+ kind: "Namespace",
9341
+ metadata: {
9342
+ name: "pepr-demo-2"
9343
+ }
9344
+ },
9345
+ {
9346
+ apiVersion: "v1",
9347
+ kind: "Secret",
9348
+ metadata: {
9349
+ name: "secret-1",
9350
+ namespace: "pepr-demo"
9449
9351
  },
9450
- spec: {
9451
- selector: {
9452
- app: name2,
9453
- "pepr.dev/controller": "admission"
9454
- },
9455
- ports: [
9456
- {
9457
- port: 443,
9458
- targetPort: 3e3
9459
- }
9460
- ]
9352
+ data: {
9353
+ example: "dW5pY29ybiBtYWdpYw==",
9354
+ "binary-data": "iCZQUg8xYucNUqD+8lyl2YcKjYYygvTtiDSEV9b9WKUkxSSLFJTgIWMJ9GcFFYs4T9JCdda51u74jfq8yHzRuEASl60EdTS/NfWgIIFTGqcNRfqMw+vgpyTMmCyJVaJEDFq6AA==",
9355
+ "ascii-with-white-space": "VGhpcyBpcyBzb21lIHJhbmRvbSB0ZXh0OgoKICAgIC0gd2l0aCBsaW5lIGJyZWFrcwogICAgLSBhbmQgdGFicw=="
9461
9356
  }
9462
- };
9463
- }
9464
- function watcherService(name2, assets) {
9465
- if (!isWatcher(assets.capabilities)) {
9466
- return null;
9467
- }
9468
- return {
9357
+ },
9358
+ {
9469
9359
  apiVersion: "v1",
9470
- kind: "Service",
9360
+ kind: "ConfigMap",
9471
9361
  metadata: {
9472
- name: `${name2}-watcher`,
9473
- namespace: "pepr-system",
9362
+ name: "example-1",
9363
+ namespace: "pepr-demo"
9364
+ },
9365
+ data: {
9366
+ key: "ex-1-val"
9367
+ }
9368
+ },
9369
+ {
9370
+ apiVersion: "v1",
9371
+ kind: "ConfigMap",
9372
+ metadata: {
9373
+ name: "example-2",
9374
+ namespace: "pepr-demo"
9375
+ },
9376
+ data: {
9377
+ key: "ex-2-val"
9378
+ }
9379
+ },
9380
+ {
9381
+ apiVersion: "v1",
9382
+ kind: "ConfigMap",
9383
+ metadata: {
9384
+ name: "example-evil-cm",
9385
+ namespace: "pepr-demo",
9386
+ annotations: {
9387
+ evil: "true"
9388
+ }
9389
+ },
9390
+ data: {
9391
+ key: "ex-evil-cm-val"
9392
+ }
9393
+ },
9394
+ {
9395
+ apiVersion: "v1",
9396
+ kind: "ConfigMap",
9397
+ metadata: {
9398
+ name: "example-3",
9399
+ namespace: "pepr-demo",
9474
9400
  labels: {
9475
- "pepr.dev/controller": "watcher"
9401
+ change: "by-label"
9402
+ }
9403
+ },
9404
+ data: {
9405
+ key: "ex-3-val"
9406
+ }
9407
+ },
9408
+ {
9409
+ apiVersion: "v1",
9410
+ kind: "ConfigMap",
9411
+ metadata: {
9412
+ name: "example-4",
9413
+ namespace: "pepr-demo"
9414
+ },
9415
+ data: {
9416
+ key: "ex-4-val"
9417
+ }
9418
+ },
9419
+ {
9420
+ apiVersion: "v1",
9421
+ kind: "ConfigMap",
9422
+ metadata: {
9423
+ name: "example-4a",
9424
+ namespace: "pepr-demo-2"
9425
+ },
9426
+ data: {
9427
+ key: "ex-4-val"
9428
+ }
9429
+ },
9430
+ {
9431
+ apiVersion: "v1",
9432
+ kind: "ConfigMap",
9433
+ metadata: {
9434
+ name: "example-5",
9435
+ namespace: "pepr-demo",
9436
+ labels: {
9437
+ "chuck-norris": "test"
9476
9438
  }
9477
9439
  },
9440
+ data: {
9441
+ key: "ex-5-val"
9442
+ }
9443
+ },
9444
+ {
9445
+ apiVersion: "apiextensions.k8s.io/v1",
9446
+ kind: "CustomResourceDefinition",
9447
+ metadata: {
9448
+ name: "unicorns.pepr.dev"
9449
+ },
9478
9450
  spec: {
9479
- selector: {
9480
- app: `${name2}-watcher`,
9481
- "pepr.dev/controller": "watcher"
9482
- },
9483
- ports: [
9451
+ group: "pepr.dev",
9452
+ versions: [
9484
9453
  {
9485
- port: 443,
9486
- targetPort: 3e3
9454
+ name: "v1",
9455
+ served: true,
9456
+ storage: true,
9457
+ schema: {
9458
+ openAPIV3Schema: {
9459
+ type: "object",
9460
+ properties: {
9461
+ spec: {
9462
+ type: "object",
9463
+ properties: {
9464
+ message: {
9465
+ type: "string"
9466
+ },
9467
+ counter: {
9468
+ type: "number"
9469
+ }
9470
+ }
9471
+ }
9472
+ }
9473
+ }
9474
+ }
9487
9475
  }
9488
- ]
9476
+ ],
9477
+ scope: "Namespaced",
9478
+ names: {
9479
+ plural: "unicorns",
9480
+ singular: "unicorn",
9481
+ kind: "Unicorn"
9482
+ }
9489
9483
  }
9490
- };
9491
- }
9492
-
9493
- // src/lib/assets/yaml/generateAllYaml.ts
9494
- var import_fs8 = require("fs");
9484
+ }
9485
+ ];
9495
9486
 
9496
- // src/lib/assets/webhooks.ts
9497
- var import_ramda = require("ramda");
9498
- var peprIgnoreNamespaces = ["kube-system", "pepr-system"];
9499
- var validateRule = (binding, isMutateWebhook) => {
9500
- const { event, kind: kind8, isMutate, isValidate } = binding;
9501
- if (isMutateWebhook && !isMutate || !isMutateWebhook && !isValidate) {
9502
- return void 0;
9487
+ // src/templates/settings.json
9488
+ var settings_default = {
9489
+ "debug.javascript.terminalOptions": {
9490
+ enableTurboSourcemaps: true,
9491
+ resolveSourceMapLocations: [
9492
+ "${workspaceFolder}/**",
9493
+ "node_modules/kubernetes-fluent-client/**",
9494
+ "node_modules/pepr/**"
9495
+ ]
9503
9496
  }
9504
- const operations = event === "CREATEORUPDATE" /* CREATE_OR_UPDATE */ ? ["CREATE" /* CREATE */, "UPDATE" /* UPDATE */] : [event];
9505
- const resource = kind8.plural || `${kind8.kind.toLowerCase()}s`;
9506
- const ruleObject = {
9507
- apiGroups: [kind8.group],
9508
- apiVersions: [kind8.version || "*"],
9509
- operations,
9510
- resources: [resource, ...resource === "pods" ? ["pods/ephemeralcontainers"] : []]
9511
- };
9512
- return ruleObject;
9513
9497
  };
9514
- async function generateWebhookRules(assets, isMutateWebhook) {
9515
- const { config, capabilities } = assets;
9516
- const rules = capabilities.flatMap((capability) => {
9517
- logger_default.info(`Module ${config.uuid} has capability: ${capability.name}`);
9518
- return capability.bindings.map((binding) => validateRule(binding, isMutateWebhook)).filter((rule) => !!rule);
9519
- });
9520
- return (0, import_ramda.uniqWith)(import_ramda.equals, rules);
9521
- }
9522
- async function webhookConfigGenerator(assets, mutateOrValidate, timeoutSeconds = 10) {
9523
- const ignore = [];
9524
- const { name: name2, tls, config, apiPath, host } = assets;
9525
- const ignoreNS = (0, import_ramda.concat)(
9526
- peprIgnoreNamespaces,
9527
- resolveIgnoreNamespaces(
9528
- config?.alwaysIgnore?.namespaces?.length ? config?.alwaysIgnore?.namespaces : config?.admission?.alwaysIgnore?.namespaces
9529
- )
9530
- );
9531
- if (ignoreNS) {
9532
- ignore.push({
9533
- key: "kubernetes.io/metadata.name",
9534
- operator: "NotIn",
9535
- values: ignoreNS
9536
- });
9537
- }
9538
- const clientConfig = {
9539
- caBundle: tls.ca
9540
- };
9541
- const fullApiPath = `/${mutateOrValidate}/${apiPath}`;
9542
- if (host) {
9543
- clientConfig.url = `https://${host}:3000${fullApiPath}`;
9544
- } else {
9545
- clientConfig.service = {
9546
- name: name2,
9547
- namespace: "pepr-system",
9548
- path: fullApiPath
9549
- };
9550
- }
9551
- const isMutate = mutateOrValidate === "mutate" /* MUTATE */;
9552
- const rules = await generateWebhookRules(assets, isMutate);
9553
- if (rules.length < 1) {
9554
- return null;
9555
- }
9556
- return {
9557
- apiVersion: "admissionregistration.k8s.io/v1",
9558
- kind: isMutate ? "MutatingWebhookConfiguration" : "ValidatingWebhookConfiguration",
9559
- metadata: { name: name2 },
9560
- webhooks: [
9561
- {
9562
- name: `${name2}.pepr.dev`,
9563
- admissionReviewVersions: ["v1", "v1beta1"],
9564
- clientConfig,
9565
- failurePolicy: config.onError === "reject" ? "Fail" : "Ignore",
9566
- matchPolicy: "Equivalent",
9567
- timeoutSeconds,
9568
- namespaceSelector: {
9569
- matchExpressions: ignore
9570
- },
9571
- rules,
9572
- // @todo: track side effects state
9573
- sideEffects: "None"
9574
- }
9575
- ]
9576
- };
9577
- }
9578
9498
 
9579
- // src/lib/assets/yaml/generateAllYaml.ts
9580
- function pushControllerManifests(resources, deployments, services) {
9581
- if (deployments.watch) {
9582
- resources.push(deployments.watch);
9583
- }
9584
- if (deployments.admission) {
9585
- resources.push(deployments.admission);
9586
- }
9587
- if (services.admission) {
9588
- resources.push(services.admission);
9589
- }
9590
- if (services.watch) {
9591
- resources.push(services.watch);
9592
- }
9593
- return resources;
9594
- }
9595
- async function generateAllYaml(assets, deployments, services) {
9596
- const { name: name2, tls, apiPath, path: path4, config } = assets;
9597
- const code = await import_fs8.promises.readFile(path4);
9598
- const hash = import_crypto2.default.createHash("sha256").update(code).digest("hex");
9599
- let resources = [
9600
- getNamespace(assets.config.customLabels?.namespace),
9601
- clusterRole(name2, assets.capabilities, config.rbacMode, config.rbac),
9602
- clusterRoleBinding(name2),
9603
- serviceAccount(name2),
9604
- apiPathSecret(name2, apiPath),
9605
- tlsSecret(name2, tls),
9606
- getModuleSecret(name2, code, hash),
9607
- storeRole(name2),
9608
- storeRoleBinding(name2)
9609
- ];
9610
- resources = pushControllerManifests(resources, deployments, services);
9611
- const webhooks = {
9612
- mutate: await webhookConfigGenerator(assets, "mutate" /* MUTATE */, assets.config.webhookTimeout),
9613
- validate: await webhookConfigGenerator(
9614
- assets,
9615
- "validate" /* VALIDATE */,
9616
- assets.config.webhookTimeout
9617
- )
9618
- };
9619
- const additionalResources = [webhooks.mutate, webhooks.validate].filter(
9620
- (resource) => resource !== null && resource !== void 0
9621
- );
9622
- resources.push(...additionalResources);
9623
- return resources.map((resource) => (0, import_client_node4.dumpYaml)(resource, { noRefs: true })).join("---\n");
9624
- }
9499
+ // src/templates/tsconfig.module.json
9500
+ var tsconfig_module_default = {
9501
+ compilerOptions: {
9502
+ allowSyntheticDefaultImports: true,
9503
+ declaration: true,
9504
+ declarationMap: true,
9505
+ emitDeclarationOnly: true,
9506
+ esModuleInterop: true,
9507
+ lib: ["ES2022"],
9508
+ module: "NodeNext",
9509
+ moduleResolution: "NodeNext",
9510
+ outDir: "dist",
9511
+ resolveJsonModule: true,
9512
+ rootDir: ".",
9513
+ strict: false,
9514
+ target: "ES2022",
9515
+ useUnknownInCatchVariables: false
9516
+ },
9517
+ include: ["**/*.ts"]
9518
+ };
9625
9519
 
9626
- // src/lib/assets/yaml/generateZarfYaml.ts
9627
- var import_client_node5 = require("@kubernetes/client-node");
9628
- function generateZarfYamlGeneric(assets, path4, type) {
9629
- const zarfComponentName = process.env.PEPR_CUSTOM_BUILD_NAME ?? "module";
9630
- const manifestSettings = {
9631
- name: zarfComponentName,
9632
- namespace: "pepr-system",
9633
- files: [path4]
9634
- };
9635
- const chartSettings = {
9636
- name: zarfComponentName,
9637
- namespace: "pepr-system",
9638
- version: `${assets.config.appVersion || "0.0.1"}`,
9639
- localPath: path4
9640
- };
9641
- const component = {
9642
- name: zarfComponentName,
9643
- required: true,
9644
- images: [assets.image],
9645
- [type]: [type === "manifests" ? manifestSettings : chartSettings]
9646
- };
9647
- const zarfCfg = {
9648
- kind: "ZarfPackageConfig",
9649
- metadata: {
9650
- name: assets.name,
9651
- description: `Pepr Module: ${assets.config.description}`,
9652
- url: "https://github.com/defenseunicorns/pepr",
9653
- version: `${assets.config.appVersion || "0.0.1"}`
9654
- },
9655
- components: [component]
9656
- };
9657
- return (0, import_client_node5.dumpYaml)(zarfCfg, { noRefs: true });
9658
- }
9520
+ // src/templates/data.json
9521
+ var gitIgnore = "# Ignore node_modules and Pepr build artifacts\nnode_modules\ndist\ninsecure*\n";
9522
+ var readmeMd = '# Pepr Module\n\nThis is a Pepr Module. [Pepr](https://github.com/defenseunicorns/pepr) is a type-safe Kubernetes middleware system.\n\nThe `capabilities` directory contains all the capabilities for this module. By default,\na capability is a single typescript file in the format of `capability-name.ts` that is\nimported in the root `pepr.ts` file as `import { HelloPepr } from "./capabilities/hello-pepr";`.\nBecause this is typescript, you can organize this however you choose, e.g. creating a sub-folder\nper-capability or common logic in shared files or folders.\n\nExample Structure:\n\n```text\nModule Root\n\u251C\u2500\u2500 package.json\n\u251C\u2500\u2500 pepr.ts\n\u2514\u2500\u2500 capabilities\n \u251C\u2500\u2500 example-one.ts\n \u251C\u2500\u2500 example-three.ts\n \u2514\u2500\u2500 example-two.ts\n```\n';
9523
+ var peprTS = 'import { PeprModule } from "pepr";\n// cfg loads your pepr configuration from package.json\nimport cfg from "./package.json";\n\n// HelloPepr is a demo capability that is included with Pepr. Comment or delete the line below to remove it.\nimport { HelloPepr } from "./capabilities/hello-pepr";\n\n/**\n * This is the main entrypoint for this Pepr module. It is run when the module is started.\n * This is where you register your Pepr configurations and capabilities.\n */\nnew PeprModule(cfg, [\n // "HelloPepr" is a demo capability that is included with Pepr. Comment or delete the line below to remove it.\n HelloPepr,\n\n // Your additional capabilities go here\n]);\n';
9524
+ var helloPeprTS = 'import {\n Capability,\n K8s,\n Log,\n PeprMutateRequest,\n RegisterKind,\n a,\n fetch,\n fetchStatus,\n kind,\n} from "pepr";\nimport { MockAgent, setGlobalDispatcher } from "undici";\n\n/**\n * The HelloPepr Capability is an example capability to demonstrate some general concepts of Pepr.\n * To test this capability you run `pepr dev`and then run the following command:\n * `kubectl apply -f capabilities/hello-pepr.samples.yaml`\n */\nexport const HelloPepr = new Capability({\n name: "hello-pepr",\n description: "A simple example capability to show how things work.",\n namespaces: ["pepr-demo", "pepr-demo-2"],\n});\n\n// Use the \'When\' function to create a new action, use \'Store\' to persist data\nconst { When, Store } = HelloPepr;\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Namespace) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action removes the label `remove-me` when a Namespace is created.\n * Note we don\'t need to specify the namespace here, because we\'ve already specified\n * it in the Capability definition above.\n */\nWhen(a.Namespace)\n .IsCreated()\n .Mutate(ns => ns.RemoveLabel("remove-me"));\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Watch Action with K8s SSA (Namespace) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action watches for the `pepr-demo-2` namespace to be created, then creates a ConfigMap with\n * the name `pepr-ssa-demo` and adds the namespace UID to the ConfigMap data. Because Pepr uses\n * server-side apply for this operation, the ConfigMap will be created or updated if it already exists.\n */\nWhen(a.Namespace)\n .IsCreated()\n .WithName("pepr-demo-2")\n .Watch(async ns => {\n Log.info("Namespace pepr-demo-2 was created.");\n\n try {\n // Apply the ConfigMap using K8s server-side apply\n await K8s(kind.ConfigMap).Apply({\n metadata: {\n name: "pepr-ssa-demo",\n namespace: "pepr-demo-2",\n },\n data: {\n "ns-uid": ns.metadata.uid,\n },\n });\n } catch (error) {\n // You can use the Log object to log messages to the Pepr controller pod\n Log.error(error, "Failed to apply ConfigMap using server-side apply.");\n }\n\n // You can share data between actions using the Store, including between different types of actions\n Store.setItem("watch-data", "This data was stored by a Watch Action.");\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 1) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This is a single action. They can be in the same file or put imported from other files.\n * In this example, when a ConfigMap is created with the name `example-1`, then add a label and annotation.\n *\n * Equivalent to manually running:\n * `kubectl label configmap example-1 pepr=was-here`\n * `kubectl annotate configmap example-1 pepr.dev=annotations-work-too`\n */\nWhen(a.ConfigMap)\n .IsCreated()\n .WithName("example-1")\n .Mutate(request => {\n request.SetLabel("pepr", "was-here").SetAnnotation("pepr.dev", "annotations-work-too");\n\n // Use the Store to persist data between requests and Pepr controller pods\n Store.setItem("example-1", "was-here");\n\n // This data is written asynchronously and can be read back via `Store.getItem()` or `Store.subscribe()`\n Store.setItem("example-1-data", JSON.stringify(request.Raw.data));\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate & Validate Actions (CM Example 2) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This combines 3 different types of actions: \'Mutate\', \'Validate\', and \'Watch\'. The order\n * of the actions is required, but each action is optional. In this example, when a ConfigMap is created\n * with the name `example-2`, then add a label and annotation, validate that the ConfigMap has the label\n * `pepr`, and log the request.\n */\nWhen(a.ConfigMap)\n .IsCreated()\n .WithName("example-2")\n .Mutate(request => {\n // This Mutate Action will mutate the request before it is persisted to the cluster\n\n // Use `request.Merge()` to merge the new data with the existing data\n request.Merge({\n metadata: {\n labels: {\n pepr: "was-here",\n },\n annotations: {\n "pepr.dev": "annotations-work-too",\n },\n },\n });\n })\n .Validate(request => {\n // This Validate Action will validate the request before it is persisted to the cluster\n\n // Approve the request if the ConfigMap has the label \'pepr\'\n if (request.HasLabel("pepr")) {\n return request.Approve();\n }\n\n // Otherwise, deny the request with an error message (optional)\n return request.Deny("ConfigMap must have label \'pepr\'");\n })\n .Watch((cm, phase) => {\n // This Watch Action will watch the ConfigMap after it has been persisted to the cluster\n Log.info(cm, `ConfigMap was ${phase} with the name example-2`);\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 2a) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action shows a simple validation that will deny any ConfigMap that has the\n * annotation `evil`. Note that the `Deny()` function takes an optional second parameter that is a\n * user-defined status code to return.\n */\nWhen(a.ConfigMap)\n .IsCreated()\n .Validate(request => {\n if (request.HasAnnotation("evil")) {\n return request.Deny("No evil CM annotations allowed.", 400);\n }\n\n return request.Approve();\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 3) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action combines different styles. Unlike the previous actions, this one will look\n * for any ConfigMap in the `pepr-demo` namespace that has the label `change=by-label` during either\n * CREATE or UPDATE. Note that all conditions added such as `WithName()`, `WithLabel()`, `InNamespace()`,\n * are ANDs so all conditions must be true for the request to be processed.\n */\nWhen(a.ConfigMap)\n .IsCreatedOrUpdated()\n .WithLabel("change", "by-label")\n .Mutate(request => {\n // The K8s object e are going to mutate\n const cm = request.Raw;\n\n // Get the username and uid of the K8s request\n const { username, uid } = request.Request.userInfo;\n\n // Store some data about the request in the configmap\n cm.data["username"] = username;\n cm.data["uid"] = uid;\n\n // You can still mix other ways of making changes too\n request.SetAnnotation("pepr.dev", "making-waves");\n });\n\n// This action validates the label `change=by-label` is deleted\nWhen(a.ConfigMap)\n .IsDeleted()\n .WithLabel("change", "by-label")\n .Validate(request => {\n // Log and then always approve the request\n Log.info("CM with label \'change=by-label\' was deleted.");\n return request.Approve();\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 4) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action show how you can use the `Mutate()` function without an inline function.\n * This is useful if you want to keep your actions small and focused on a single task,\n * or if you want to reuse the same function in multiple actions.\n */\nWhen(a.ConfigMap).IsCreated().WithName("example-4").Mutate(example4Cb);\n\n// This function uses the complete type definition, but is not required.\nfunction example4Cb(cm: PeprMutateRequest<a.ConfigMap>): void {\n cm.SetLabel("pepr.dev/first", "true");\n cm.SetLabel("pepr.dev/second", "true");\n cm.SetLabel("pepr.dev/third", "true");\n}\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 4a) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This is the same as Example 4, except this only operates on a CM in the `pepr-demo-2` namespace.\n * Note because the Capability defines namespaces, the namespace specified here must be one of those.\n * Alternatively, you can remove the namespace from the Capability definition and specify it here.\n */\nWhen(a.ConfigMap).IsCreated().InNamespace("pepr-demo-2").WithName("example-4a").Mutate(example4Cb);\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (CM Example 5) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This action is a bit more complex. It will look for any ConfigMap in the `pepr-demo`\n * namespace that has the label `chuck-norris` during CREATE. When it finds one, it will fetch a\n * random Chuck Norris joke from the API and add it to the ConfigMap. This is a great example of how\n * you can use Pepr to make changes to your K8s objects based on external data.\n *\n * Note the use of the `async` keyword. This is required for any action that uses `await` or `fetch()`.\n *\n * Also note we are passing a type to the `fetch()` function. This is optional, but it will help you\n * avoid mistakes when working with the data returned from the API. You can also use the `as` keyword to\n * cast the data returned from the API.\n *\n * These are equivalent:\n * ```ts\n * const joke = await fetch<TheChuckNorrisJoke>("https://icanhazdadjoke.com/");\n * const joke = await fetch("https://icanhazdadjoke.com/") as TheChuckNorrisJoke;\n * ```\n *\n * Alternatively, you can drop the type completely:\n *\n * ```ts\n * fetch("https://icanhazdadjoke.com")\n * ```\n */\ninterface TheChuckNorrisJoke {\n id: string;\n joke: string;\n status: number;\n}\n\nWhen(a.ConfigMap)\n .IsCreatedOrUpdated()\n .WithLabel("chuck-norris")\n .Mutate(cm => cm.SetLabel("got-jokes", "true"))\n .Watch(async cm => {\n const jokeURL = "https://icanhazdadjoke.com";\n\n const mockAgent: MockAgent = new MockAgent();\n setGlobalDispatcher(mockAgent);\n const mockClient = mockAgent.get(jokeURL);\n mockClient.intercept({ path: "/", method: "GET" }).reply(\n 200,\n {\n id: "R7UfaahVfFd",\n joke: "Funny joke goes here.",\n status: 200,\n },\n {\n headers: {\n "Content-Type": "application/json; charset=utf-8",\n },\n },\n );\n\n // Try/catch is not needed as a response object will always be returned\n const response = await fetch<TheChuckNorrisJoke>(jokeURL, {\n headers: {\n Accept: "application/json",\n },\n });\n\n // Instead, check the `response.ok` field\n if (response.ok) {\n const { joke } = response.data;\n // Add Joke to the Store\n await Store.setItemAndWait(jokeURL, joke);\n // Add the Chuck Norris joke to the configmap\n try {\n await K8s(kind.ConfigMap).Apply({\n metadata: {\n name: cm.metadata.name,\n namespace: cm.metadata.namespace,\n },\n data: {\n "chuck-says": Store.getItem(jokeURL),\n },\n });\n } catch (error) {\n Log.error(error, "Failed to apply ConfigMap using server-side apply.", {\n cm,\n });\n }\n }\n\n // You can also assert on different HTTP response codes\n if (response.status === fetchStatus.NOT_FOUND) {\n // Do something else\n return;\n }\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Secret Base64 Handling) *\n * ---------------------------------------------------------------------------------------------------\n *\n * The K8s JS client provides incomplete support for base64 encoding/decoding handling for secrets,\n * unlike the GO client. To make this less painful, Pepr automatically handles base64 encoding/decoding\n * secret data before and after the action is executed.\n */\nWhen(a.Secret)\n .IsCreated()\n .WithName("secret-1")\n .Mutate(request => {\n const secret = request.Raw;\n\n // This will be encoded at the end of all processing back to base64: "Y2hhbmdlLXdpdGhvdXQtZW5jb2Rpbmc="\n secret.data.magic = "change-without-encoding";\n\n // You can modify the data directly, and it will be encoded at the end of all processing\n secret.data.example += " - modified by Pepr";\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Untyped Custom Resource) *\n * ---------------------------------------------------------------------------------------------------\n *\n * Out of the box, Pepr supports all the standard Kubernetes objects. However, you can also create\n * your own types. This is useful if you are working with an Operator that creates custom resources.\n * There are two ways to do this, the first is to use the `When()` function with a `GenericKind`,\n * the second is to create a new class that extends `GenericKind` and use the `RegisterKind()` function.\n *\n * This example shows how to use the `When()` function with a `GenericKind`. Note that you\n * must specify the `group`, `version`, and `kind` of the object (if applicable). This is how Pepr knows\n * if the action should be triggered or not. Since we are using a `GenericKind`,\n * Pepr will not be able to provide any intellisense for the object, so you will need to refer to the\n * Kubernetes API documentation for the object you are working with.\n *\n * You will need to wait for the CRD in `hello-pepr.samples.yaml` to be created, then you can apply\n *\n * ```yaml\n * apiVersion: pepr.dev/v1\n * kind: Unicorn\n * metadata:\n * name: example-1\n * namespace: pepr-demo\n * spec:\n * message: replace-me\n * counter: 0\n * ```\n */\nWhen(a.GenericKind, {\n group: "pepr.dev",\n version: "v1",\n kind: "Unicorn",\n})\n .IsCreated()\n .WithName("example-1")\n .Mutate(request => {\n request.Merge({\n spec: {\n message: "Hello Pepr without type data!",\n counter: Math.random(),\n },\n });\n });\n\n/**\n * ---------------------------------------------------------------------------------------------------\n * Mutate Action (Typed Custom Resource) *\n * ---------------------------------------------------------------------------------------------------\n *\n * This example shows how to use the `RegisterKind()` function to create a new type. This is useful\n * if you are working with an Operator that creates custom resources and you want to have intellisense\n * for the object. Note that you must specify the `group`, `version`, and `kind` of the object (if applicable)\n * as this is how Pepr knows if the action should be triggered or not.\n *\n * Once you register a new Kind with Pepr, you can use the `When()` function with the new Kind. Ideally,\n * you should register custom Kinds at the top of your Capability file or Pepr Module so they are available\n * to all actions, but we are putting it here for demonstration purposes.\n *\n * You will need to wait for the CRD in `hello-pepr.samples.yaml` to be created, then you can apply\n *\n * ```yaml\n * apiVersion: pepr.dev/v1\n * kind: Unicorn\n * metadata:\n * name: example-2\n * namespace: pepr-demo\n * spec:\n * message: replace-me\n * counter: 0\n * ```*\n */\nclass UnicornKind extends a.GenericKind {\n spec: {\n /**\n * JSDoc comments can be added to explain more details about the field.\n *\n * @example\n * ```ts\n * request.Raw.spec.message = "Hello Pepr!";\n * ```\n * */\n message: string;\n counter: number;\n };\n}\n\nRegisterKind(UnicornKind, {\n group: "pepr.dev",\n version: "v1",\n kind: "Unicorn",\n});\n\nWhen(UnicornKind)\n .IsCreated()\n .WithName("example-2")\n .Mutate(request => {\n request.Merge({\n spec: {\n message: "Hello Pepr with type data!",\n counter: Math.random(),\n },\n });\n });\n\n/**\n * A callback function that is called once the Pepr Store is fully loaded.\n */\nStore.onReady(data => {\n Log.info(data, "Pepr Store Ready");\n});\n';
9525
+ var packageJSON = { name: "pepr", description: "Kubernetes application engine", author: "Defense Unicorns", homepage: "https://github.com/defenseunicorns/pepr", license: "Apache-2.0", bin: "dist/cli.js", repository: "defenseunicorns/pepr", engines: { node: ">=18.0.0" }, files: ["/dist", "/src", "!src/**/*.test.ts", "!src/fixtures/**", "!dist/**/*.test.d.ts*"], version: "0.52.3-nightly.1", main: "dist/lib.js", types: "dist/lib.d.ts", scripts: { build: "tsc -p config/tsconfig.root.json && node build.mjs && npm pack", "build:image": "npm run build && docker buildx build --output type=docker --tag pepr:dev .", "build:image:unicorn": "npm run build && docker buildx build --output type=docker --tag pepr/private:dev $(node scripts/read-unicorn-build-args.mjs) .", ci: "npm ci", "format:check": "npm run format:src && npm run format:tests && npm run format:markdown && npm run format:integration && npm run format:prettier -- --check", "format:fix": "npm run format:src -- --fix && npm run format:markdown -- --fix && npm run format:integration -- --fix && npm run format:prettier -- --write", "format:integration": "eslint --config config/eslint.integration.config.mjs integration/cli integration/helpers", "format:markdown": 'npx -y markdownlint-cli --config config/.markdownlint.json --ignore adr --ignore integration/testroot --ignore pepr-test-module --ignore node_modules "**/*.md"', "format:prettier": "prettier --config config/.prettierrc src integration/cli/**/*.ts integration/helpers/**/*.ts", "format:src": "eslint --config config/eslint.root.config.mjs 'src/**/*.ts' --ignore-pattern '**/*.test.ts' --ignore-pattern 'src/templates/**'", "format:tests": "eslint --config config/eslint.test.config.mjs 'src/**/*.test.ts'", "gen-data-json": "node hack/build-template-data.js", prebuild: "rm -fr dist/* && npm run gen-data-json", prepare: `if [ "$NODE_ENV" != 'production' ]; then husky; fi`, "set:version": "node scripts/set-version.js", test: "npm run test:unit && npm run test:journey && npm run test:journey-wasm", "test:artifacts": "npm run build && vitest run src/build-artifact.test.ts", "test:docs": "vitest run --config=config/vitest.integration.config.ts integration/cli/docs/*.test.ts", "test:integration": "npm run test:integration:prep && npm run test:integration:run", "test:integration:prep": "./integration/prep.sh", "test:integration:run": "vitest run --config=config/vitest.integration.config.ts integration", "test:journey": "npm run test:journey:k3d && npm run build && npm run test:journey:image && npm run test:journey:run", "test:journey-wasm": "npm run test:journey:k3d && npm run build && npm run test:journey:image && npm run test:journey:run-wasm", "test:journey-wasm:unicorn": "npm run test:journey:k3d && npm run build && npm run test:journey:image:unicorn && npm run test:journey:run-wasm", "test:journey:image": "npm run build && docker buildx build --output type=docker --tag pepr:dev . && k3d image import pepr:dev -c pepr-dev", "test:journey:image:unicorn": "npm run build && docker buildx build --output type=docker --tag pepr/private:dev $(node scripts/read-unicorn-build-args.mjs) . && k3d image import pepr/private:dev -c pepr-dev", "test:journey:k3d": "k3d cluster delete pepr-dev && k3d cluster create pepr-dev --k3s-arg '--debug@server:0' --wait && kubectl rollout status deployment -n kube-system", "test:journey:run": "vitest run --config=config/vitest.journey.config.ts journey/entrypoint.test.ts", "test:journey:run-wasm": "vitest run --config=config/vitest.journey.config.ts journey/entrypoint-wasm.test.ts", "test:journey:unicorn": "npm run test:journey:k3d && npm run test:journey:image:unicorn && npm run test:journey:run", "test:unit": "npm run gen-data-json && NODE_OPTIONS=--no-deprecation vitest --config config/vitest.root.config.ts run --coverage", "test:upgrade:unicorn": "npm run test:journey:k3d && npm run test:journey:image:unicorn && vitest run integration/cluster/upgrade.test.ts", "test:upgrade:upstream": "npm run test:journey:k3d && npm run test:journey:image && vitest run integration/cluster/upgrade.test.ts" }, dependencies: { "@types/ramda": "0.31.0", commander: "14.0.0", express: "5.1.0", "fast-json-patch": "3.1.1", heredoc: "^1.3.1", "http-status-codes": "^2.3.0", "json-pointer": "^0.6.2", "kubernetes-fluent-client": "3.10.0", pino: "9.7.0", "pino-pretty": "13.1.1", "prom-client": "15.1.3", ramda: "0.31.3", "ts-morph": "^26.0.0" }, devDependencies: { "@commitlint/cli": "19.8.1", "@commitlint/config-conventional": "19.8.1", "@fast-check/vitest": "^0.2.1", "@types/eslint": "9.6.1", "@types/express": "5.0.3", "@types/json-pointer": "^1.0.34", "@types/node": "24.x.x", "@types/node-forge": "1.3.13", "@types/uuid": "10.0.0", "@types/ws": "^8.18.1", "@vitest/coverage-v8": "^3.2.3", "fast-check": "^4.0.0", globals: "^16.0.0", husky: "^9.1.6", "js-yaml": "^4.1.0", shellcheck: "^3.0.0", tsx: "^4.20.3", undici: "^7.0.1", vitest: "^3.2.3" }, overrides: { glob: "^9.0.0" }, peerDependencies: { "@types/prompts": "2.4.9", "@typescript-eslint/eslint-plugin": "8.38.0", "@typescript-eslint/parser": "8.38.0", esbuild: "0.25.8", eslint: "9.32.0", "node-forge": "1.3.1", prettier: "3.6.2", prompts: "2.4.2", typescript: "5.8.3", uuid: "11.1.0" } };
9659
9526
 
9660
- // src/cli/build.helpers.ts
9661
- function assignImage(imageOptions) {
9662
- const { customImage, registryInfo, peprVersion, registry } = imageOptions;
9663
- if (customImage) {
9664
- return customImage;
9665
- }
9666
- if (registryInfo) {
9667
- return `${registryInfo}/custom-pepr-controller:${peprVersion}`;
9668
- }
9669
- if (registry) {
9670
- return checkIronBankImage(registry, "", peprVersion);
9671
- }
9672
- return "";
9673
- }
9674
- function determineRbacMode(opts, cfg) {
9675
- if (opts.rbacMode) {
9676
- return opts.rbacMode;
9677
- }
9678
- if (cfg.pepr.rbacMode && cfg.pepr.rbacMode !== "scoped") {
9679
- return "admin";
9527
+ // src/cli/init/utils.ts
9528
+ var import_fs7 = require("fs");
9529
+ function sanitizeName(name2) {
9530
+ if (typeof name2 !== "string") {
9531
+ throw TypeError(
9532
+ `sanitizeName() was called with a non-string value. The value is: ${name2} of type ${typeof name2}`
9533
+ );
9680
9534
  }
9681
- return cfg.pepr.rbacMode || "admin";
9535
+ let sanitized = name2.toLowerCase().replace(/[^a-z0-9-]+/gi, "-");
9536
+ sanitized = sanitized.replace(/^-+|-+$/g, "");
9537
+ sanitized = sanitized.replace(/--+/g, "-");
9538
+ return sanitized;
9682
9539
  }
9683
- async function createOutputDirectory(outputDir2) {
9540
+ async function createDir(dir) {
9684
9541
  try {
9685
- const dir = outputDir2 === "" ? "dist" : outputDir2;
9686
- await createDirectoryIfNotExists(dir);
9687
- return dir;
9688
- } catch (error) {
9689
- console.error(`Error creating output directory: ${error.message}`);
9690
- process.exit(1);
9691
- }
9692
- }
9693
- function checkIronBankImage(registry, image, peprVersion) {
9694
- return registry === "Iron Bank" ? `registry1.dso.mil/ironbank/opensource/defenseunicorns/pepr/controller:v${peprVersion}` : image;
9695
- }
9696
- function validImagePullSecret(imagePullSecretName) {
9697
- if (imagePullSecretName) {
9698
- const error = "Invalid imagePullSecret. Please provide a valid name as defined in RFC 1123.";
9699
- if (sanitizeResourceName(imagePullSecretName) !== imagePullSecretName) {
9700
- console.error(error);
9701
- process.exit(1);
9542
+ await import_fs7.promises.mkdir(dir);
9543
+ } catch (err) {
9544
+ if (err && err.code === "EEXIST") {
9545
+ throw new Error(`Directory ${dir} already exists`);
9546
+ } else {
9547
+ throw err;
9702
9548
  }
9703
9549
  }
9704
9550
  }
9705
- async function handleCustomImageBuild(includedFiles, peprVersion, description, image) {
9706
- if (includedFiles.length > 0) {
9707
- await createDockerfile(peprVersion, description, includedFiles);
9708
- (0, import_child_process2.execSync)(`docker build --tag ${image} -f Dockerfile.controller .`, {
9709
- stdio: "inherit"
9710
- });
9711
- (0, import_child_process2.execSync)(`docker push ${image}`, { stdio: "inherit" });
9712
- }
9713
- }
9714
- function handleValidCapabilityNames(capabilities) {
9715
- try {
9716
- validateCapabilityNames(capabilities);
9717
- } catch (e) {
9718
- console.error(`Error loading capability:`, e);
9719
- process.exit(1);
9720
- }
9721
- }
9722
- async function watchForChanges(ctxCfg, reloader) {
9723
- const ctx = await (0, import_esbuild.context)(ctxCfg);
9724
- if (reloader) {
9725
- await ctx.watch();
9726
- } else {
9727
- await ctx.rebuild();
9728
- await ctx.dispose();
9551
+ function write(path4, data) {
9552
+ if (typeof data !== "string") {
9553
+ data = JSON.stringify(data, null, 2);
9729
9554
  }
9730
- return ctx;
9555
+ return import_fs7.promises.writeFile(path4, data);
9731
9556
  }
9732
- async function generateYamlAndWriteToDisk(obj) {
9733
- const { uuid, imagePullSecret, outputDir: outputDir2, assets, zarf } = obj;
9734
- const yamlFile = `pepr-module-${uuid}.yaml`;
9735
- const chartPath = `${uuid}-chart`;
9736
- const yamlPath = (0, import_path3.resolve)(outputDir2, yamlFile);
9737
- try {
9738
- const yaml = await assets.allYaml(
9739
- generateAllYaml,
9740
- {
9741
- getDeploymentFunction: getDeployment,
9742
- getWatcherFunction: getWatcher,
9743
- getServiceFunction: service,
9744
- getWatcherServiceFunction: watcherService
9557
+
9558
+ // src/cli/init/templates.ts
9559
+ var { dependencies, devDependencies, peerDependencies, scripts, version } = packageJSON;
9560
+ function genPkgJSON(opts) {
9561
+ const uuid = !opts.uuid ? (0, import_uuid.v4)() : opts.uuid;
9562
+ const name2 = sanitizeName(opts.name);
9563
+ const { typescript } = peerDependencies;
9564
+ const data = {
9565
+ name: name2,
9566
+ version: "0.0.1",
9567
+ description: opts.description,
9568
+ keywords: ["pepr", "k8s", "policy-engine", "pepr-module", "security"],
9569
+ engines: {
9570
+ node: ">=20.0.0"
9571
+ },
9572
+ pepr: {
9573
+ uuid,
9574
+ onError: opts.errorBehavior,
9575
+ webhookTimeout: 10,
9576
+ customLabels: {
9577
+ namespace: {
9578
+ "pepr.dev": ""
9579
+ }
9745
9580
  },
9746
- imagePullSecret
9747
- );
9748
- const zarfPath = (0, import_path3.resolve)(outputDir2, "zarf.yaml");
9749
- let localZarf = "";
9750
- if (zarf === "chart") {
9751
- localZarf = assets.zarfYamlChart(generateZarfYamlGeneric, chartPath);
9752
- } else {
9753
- localZarf = assets.zarfYaml(generateZarfYamlGeneric, yamlFile);
9581
+ alwaysIgnore: {
9582
+ namespaces: []
9583
+ },
9584
+ admission: {
9585
+ alwaysIgnore: {
9586
+ namespaces: []
9587
+ }
9588
+ },
9589
+ watch: {
9590
+ alwaysIgnore: {
9591
+ namespaces: []
9592
+ }
9593
+ },
9594
+ includedFiles: [],
9595
+ env: {}
9596
+ },
9597
+ scripts: {
9598
+ "k3d-setup": scripts["test:journey:k3d"]
9599
+ },
9600
+ dependencies: {
9601
+ pepr: version,
9602
+ undici: "^7.0.1"
9603
+ },
9604
+ devDependencies: {
9605
+ typescript
9606
+ },
9607
+ overrides: {
9608
+ "brace-expansion": "1.1.11"
9754
9609
  }
9755
- await import_fs9.promises.writeFile(yamlPath, yaml);
9756
- await import_fs9.promises.writeFile(zarfPath, localZarf);
9757
- await assets.generateHelmChart(webhookConfigGenerator, getWatcher, getModuleSecret, outputDir2);
9758
- console.info(`K8s resource for the module saved to ${yamlPath}`);
9759
- } catch (error) {
9760
- console.error(`Error generating YAML: ${error}`);
9761
- process.exit(1);
9762
- }
9610
+ };
9611
+ return {
9612
+ data,
9613
+ path: "package.json",
9614
+ print: (0, import_util.inspect)(data, false, 5, true)
9615
+ };
9763
9616
  }
9617
+ var peprTSTemplate = {
9618
+ path: "pepr.ts",
9619
+ data: peprTS
9620
+ };
9621
+ var readme = {
9622
+ path: "README.md",
9623
+ data: readmeMd
9624
+ };
9625
+ var helloPepr = {
9626
+ path: "hello-pepr.ts",
9627
+ data: helloPeprTS
9628
+ };
9629
+ var gitignore = {
9630
+ path: ".gitignore",
9631
+ data: gitIgnore
9632
+ };
9633
+ var samplesYaml = {
9634
+ path: "hello-pepr.samples.yaml",
9635
+ data: hello_pepr_samples_default.map((r) => (0, import_client_node5.dumpYaml)(r, { noRefs: true })).join("---\n")
9636
+ };
9637
+ var snippet = {
9638
+ path: "pepr.code-snippets",
9639
+ data: pepr_code_snippets_default
9640
+ };
9641
+ var codeSettings = {
9642
+ path: "settings.json",
9643
+ data: settings_default
9644
+ };
9645
+ var tsConfig = {
9646
+ path: "tsconfig.json",
9647
+ data: tsconfig_module_default
9648
+ };
9649
+ var prettier = {
9650
+ path: ".prettierrc",
9651
+ data: prettierrc_default
9652
+ };
9653
+ var eslint = {
9654
+ path: "eslint.config.mjs",
9655
+ data: (0, import_fs8.readFileSync)(
9656
+ import_path3.default.resolve(
9657
+ (() => {
9658
+ const fullPath = __dirname;
9659
+ const lengthOfSuffix = "pepr/".length;
9660
+ const lastPeprIndex = fullPath.lastIndexOf("pepr/");
9661
+ return fullPath.substring(0, lastPeprIndex + lengthOfSuffix);
9662
+ })(),
9663
+ "src/templates/eslint.config.mjs"
9664
+ ),
9665
+ "utf-8"
9666
+ )
9667
+ };
9764
9668
 
9765
- // src/cli/build.ts
9766
- var peprTS2 = "pepr.ts";
9767
- var outputDir = "dist";
9768
- function build_default(program2) {
9769
- program2.command("build").description("Build a Pepr Module for deployment").addOption(
9770
- new import_commander.Option("-M, --rbac-mode <mode>", "Override module config and set RBAC mode.").choices([
9771
- "admin",
9772
- "scoped"
9773
- ])
9774
- ).addOption(
9775
- new import_commander.Option(
9776
- "-I, --registry-info <registry/username>",
9777
- "Provide the image registry and username for building and pushing a custom WASM container. Requires authentication. Conflicts with --custom-image and --registry. Builds and pushes `'<registry/username>/custom-pepr-controller:<current-version>'`."
9778
- ).conflicts(["customImage", "registry"])
9779
- ).option("-P, --with-pull-secret <name>", "Use image pull secret for controller Deployment.", "").addOption(
9780
- new import_commander.Option(
9781
- "-c, --custom-name <name>",
9782
- "Set name for zarf component and service monitors in helm charts."
9783
- )
9784
- ).option("-e, --entry-point <file>", "Specify the entry point file to build with.", peprTS2).addOption(
9785
- new import_commander.Option(
9786
- "-i, --custom-image <image>",
9787
- "Specify a custom image with version for deployments. Conflicts with --registry-info and --registry. Example: 'docker.io/username/custom-pepr-controller:v1.0.0'"
9788
- ).conflicts(["registryInfo", "registry"])
9789
- ).option(
9790
- "-n, --no-embed",
9791
- "Disable embedding of deployment files into output module. Useful when creating library modules intended solely for reuse/distribution via NPM."
9792
- ).option("-o, --output <directory>", "Set output directory.", "dist").addOption(
9793
- new import_commander.Option(
9794
- "-r, --registry <GitHub|Iron Bank>",
9795
- "Container registry: Choose container registry for deployment manifests. Conflicts with --custom-image and --registry-info."
9796
- ).conflicts(["customImage", "registryInfo"]).choices(["GitHub", "Iron Bank"])
9797
- ).option(
9798
- "-t, --timeout <seconds>",
9799
- "How long the API server should wait for a webhook to respond before treating the call as a failure.",
9800
- parseTimeout
9801
- ).addOption(
9802
- new import_commander.Option("-z, --zarf <manifest|chart>", "Set Zarf package type").choices(["manifest", "chart"]).default("manifest")
9803
- ).action(async (opts) => {
9804
- outputDir = await createOutputDirectory(opts.output);
9805
- const buildModuleResult = await buildModule(void 0, opts.entryPoint, opts.embed);
9806
- const { cfg, path: path4 } = buildModuleResult;
9807
- if (opts.customName) {
9808
- process.env.PEPR_CUSTOM_BUILD_NAME = opts.customName;
9809
- }
9810
- const image = assignImage({
9811
- customImage: opts.customImage,
9812
- registryInfo: opts.registryInfo,
9813
- peprVersion: cfg.pepr.peprVersion,
9814
- registry: opts.registry
9815
- });
9816
- if (opts.timeout !== void 0) {
9817
- cfg.pepr.webhookTimeout = opts.timeout;
9818
- }
9819
- if (opts.registryInfo !== void 0) {
9820
- console.info(`Including ${cfg.pepr.includedFiles.length} files in controller image.`);
9821
- await handleCustomImageBuild(
9822
- cfg.pepr.includedFiles,
9823
- cfg.pepr.peprVersion,
9824
- cfg.description,
9825
- image
9826
- );
9669
+ // src/cli/format/index.ts
9670
+ var import_eslint = require("eslint");
9671
+
9672
+ // src/cli/format/format.helpers.ts
9673
+ var import_fs9 = require("fs");
9674
+ var import_prettier = require("prettier");
9675
+ async function formatWithPrettier(results, validateOnly) {
9676
+ let hasFailure = false;
9677
+ for (const { filePath } of results) {
9678
+ const content = await import_fs9.promises.readFile(filePath, "utf8");
9679
+ const cfg = await (0, import_prettier.resolveConfig)(filePath);
9680
+ const formatted = await (0, import_prettier.format)(content, { filepath: filePath, ...cfg });
9681
+ if (validateOnly && formatted !== content) {
9682
+ hasFailure = true;
9683
+ console.error(`File ${filePath} is not formatted correctly`);
9684
+ } else {
9685
+ await import_fs9.promises.writeFile(filePath, formatted);
9827
9686
  }
9828
- if (!opts.embed) {
9829
- console.info(`Module built successfully at ${path4}`);
9830
- return;
9687
+ }
9688
+ return hasFailure;
9689
+ }
9690
+
9691
+ // src/cli/format/index.ts
9692
+ function format_default(program2) {
9693
+ program2.command("format").description("Lint and format this Pepr module").option("-v, --validate-only", "Do not modify files, only validate formatting.").action(async (opts) => {
9694
+ const success = await peprFormat(opts.validateOnly);
9695
+ if (success) {
9696
+ logger_default.info("Module formatted");
9697
+ } else {
9698
+ process.exit(1);
9831
9699
  }
9832
- const assets = new Assets(
9833
- {
9834
- ...cfg.pepr,
9835
- appVersion: cfg.version,
9836
- description: cfg.description,
9837
- alwaysIgnore: {
9838
- namespaces: cfg.pepr.alwaysIgnore?.namespaces
9839
- },
9840
- // Can override the rbacMode with the CLI option
9841
- rbacMode: determineRbacMode(opts, cfg)
9842
- },
9843
- path4,
9844
- opts.withPullSecret === "" ? [] : [opts.withPullSecret]
9845
- );
9846
- if (image !== "") assets.image = image;
9847
- validImagePullSecret(opts.withPullSecret);
9848
- handleValidCapabilityNames(assets.capabilities);
9849
- await generateYamlAndWriteToDisk({
9850
- uuid: cfg.pepr.uuid,
9851
- outputDir,
9852
- imagePullSecret: opts.withPullSecret,
9853
- zarf: opts.zarf,
9854
- assets
9855
- });
9856
9700
  });
9857
9701
  }
9858
- var externalLibs = Object.keys(dependencies);
9859
- externalLibs.push("pepr");
9860
- externalLibs.push("@kubernetes/client-node");
9861
- async function loadModule(entryPoint = peprTS2) {
9862
- const entryPointPath = (0, import_path4.resolve)(".", entryPoint);
9863
- const modulePath = (0, import_path4.dirname)(entryPointPath);
9864
- const cfgPath = (0, import_path4.resolve)(modulePath, "package.json");
9702
+ async function peprFormat(validateOnly) {
9703
+ {
9704
+ try {
9705
+ const eslint2 = new import_eslint.ESLint();
9706
+ const results = await eslint2.lintFiles(["./**/*.ts"]);
9707
+ let hasFailure = false;
9708
+ results.forEach(async (result) => {
9709
+ const errorCount = result.fatalErrorCount + result.errorCount;
9710
+ if (errorCount > 0) {
9711
+ hasFailure = true;
9712
+ }
9713
+ });
9714
+ const formatter = await eslint2.loadFormatter("stylish");
9715
+ const resultText = await formatter.format(results, {});
9716
+ if (resultText) {
9717
+ logger_default.info(resultText);
9718
+ }
9719
+ if (!validateOnly) {
9720
+ await import_eslint.ESLint.outputFixes(results);
9721
+ }
9722
+ hasFailure = hasFailure || await formatWithPrettier(results, validateOnly);
9723
+ return !hasFailure;
9724
+ } catch (error) {
9725
+ logger_default.error(error, `Error formatting module:`);
9726
+ return false;
9727
+ }
9728
+ }
9729
+ }
9730
+
9731
+ // src/cli/build/loadModule.ts
9732
+ var import_promises = __toESM(require("fs/promises"));
9733
+ var import_posix = require("path/posix");
9734
+ async function loadModule(outputDir, entryPoint) {
9735
+ const entryPointPath = (0, import_posix.resolve)(".", entryPoint);
9736
+ const modulePath = (0, import_posix.dirname)(entryPointPath);
9737
+ const cfgPath = (0, import_posix.resolve)(modulePath, "package.json");
9865
9738
  try {
9866
- await import_fs10.promises.access(cfgPath);
9867
- await import_fs10.promises.access(entryPointPath);
9739
+ await import_promises.default.access(cfgPath);
9740
+ await import_promises.default.access(entryPointPath);
9868
9741
  } catch {
9869
9742
  console.error(
9870
9743
  `Could not find ${cfgPath} or ${entryPointPath} in the current directory. Please run this command from the root of your module's directory.`
9871
9744
  );
9872
9745
  process.exit(1);
9873
9746
  }
9874
- const moduleText = await import_fs10.promises.readFile(cfgPath, { encoding: "utf-8" });
9747
+ const moduleText = await import_promises.default.readFile(cfgPath, { encoding: "utf-8" });
9875
9748
  const cfg = JSON.parse(moduleText);
9876
9749
  const { uuid } = cfg.pepr;
9877
9750
  const name2 = `pepr-${uuid}.js`;
@@ -9884,13 +9757,18 @@ async function loadModule(entryPoint = peprTS2) {
9884
9757
  entryPointPath,
9885
9758
  modulePath,
9886
9759
  name: name2,
9887
- path: (0, import_path4.resolve)(outputDir, name2),
9760
+ path: (0, import_posix.resolve)(outputDir, name2),
9888
9761
  uuid
9889
9762
  };
9890
9763
  }
9891
- async function buildModule(reloader, entryPoint = peprTS2, embed = true) {
9764
+
9765
+ // src/cli/build/buildModule.ts
9766
+ var externalLibs = Object.keys(dependencies);
9767
+ externalLibs.push("pepr");
9768
+ externalLibs.push("@kubernetes/client-node");
9769
+ async function buildModule(outputDir, reloader, entryPoint = "pepr.ts", embed = true) {
9892
9770
  try {
9893
- const { cfg, modulePath, path: path4, uuid } = await loadModule(entryPoint);
9771
+ const { cfg, modulePath, path: path4, uuid } = await loadModule(outputDir, entryPoint);
9894
9772
  await checkFormat();
9895
9773
  const npmRoot = (0, import_child_process3.execFileSync)("npm", ["root"]).toString().trim();
9896
9774
  const args = ["--project", `${modulePath}/tsconfig.json`, "--outdir", outputDir];
@@ -9978,12 +9856,110 @@ async function checkFormat() {
9978
9856
  }
9979
9857
  }
9980
9858
 
9981
- // src/cli/deploy.ts
9982
- var import_prompts = __toESM(require("prompts"));
9859
+ // src/cli/build/index.ts
9860
+ function build_default(program2) {
9861
+ program2.command("build").description("Build a Pepr Module for deployment").addOption(
9862
+ new import_commander.Option("-M, --rbac-mode <mode>", "Override module config and set RBAC mode.").choices([
9863
+ "admin",
9864
+ "scoped"
9865
+ ])
9866
+ ).addOption(
9867
+ new import_commander.Option(
9868
+ "-I, --registry-info <registry/username>",
9869
+ "Provide the image registry and username for building and pushing a custom WASM container. Requires authentication. Conflicts with --custom-image and --registry. Builds and pushes `'<registry/username>/custom-pepr-controller:<current-version>'`."
9870
+ ).conflicts(["customImage", "registry"])
9871
+ ).option("-P, --with-pull-secret <name>", "Use image pull secret for controller Deployment.", "").addOption(
9872
+ new import_commander.Option(
9873
+ "-c, --custom-name <name>",
9874
+ "Set name for zarf component and service monitors in helm charts."
9875
+ )
9876
+ ).option("-e, --entry-point <file>", "Specify the entry point file to build with.", "pepr.ts").addOption(
9877
+ new import_commander.Option(
9878
+ "-i, --custom-image <image>",
9879
+ "Specify a custom image with version for deployments. Conflicts with --registry-info and --registry. Example: 'docker.io/username/custom-pepr-controller:v1.0.0'"
9880
+ ).conflicts(["registryInfo", "registry"])
9881
+ ).option(
9882
+ "-n, --no-embed",
9883
+ "Disable embedding of deployment files into output module. Useful when creating library modules intended solely for reuse/distribution via NPM."
9884
+ ).option("-o, --output <directory>", "Set output directory.", "dist").addOption(
9885
+ new import_commander.Option(
9886
+ "-r, --registry <registry>",
9887
+ "Container registry: Choose container registry for deployment manifests. Conflicts with --custom-image and --registry-info."
9888
+ ).conflicts(["customImage", "registryInfo"]).choices(["GitHub", "Iron Bank"])
9889
+ ).option(
9890
+ "-t, --timeout <seconds>",
9891
+ "How long the API server should wait for a webhook to respond before treating the call as a failure.",
9892
+ parseTimeout
9893
+ ).addOption(
9894
+ new import_commander.Option("-z, --zarf <manifest|chart>", "Set Zarf package type").choices(["manifest", "chart"]).default("manifest")
9895
+ ).action(async (opts) => {
9896
+ const outputDir = await createOutputDirectory(opts.output);
9897
+ const buildModuleResult = await buildModule(
9898
+ outputDir,
9899
+ void 0,
9900
+ opts.entryPoint,
9901
+ opts.embed
9902
+ );
9903
+ const { cfg, path: path4 } = buildModuleResult;
9904
+ if (opts.customName) {
9905
+ process.env.PEPR_CUSTOM_BUILD_NAME = opts.customName;
9906
+ }
9907
+ const image = assignImage({
9908
+ customImage: opts.customImage,
9909
+ registryInfo: opts.registryInfo,
9910
+ peprVersion: cfg.pepr.peprVersion,
9911
+ registry: opts.registry
9912
+ });
9913
+ if (opts.timeout !== void 0) {
9914
+ cfg.pepr.webhookTimeout = opts.timeout;
9915
+ }
9916
+ if (opts.registryInfo !== void 0) {
9917
+ logger_default.info(`Including ${cfg.pepr.includedFiles.length} files in controller image.`);
9918
+ await handleCustomImageBuild(
9919
+ cfg.pepr.includedFiles,
9920
+ cfg.pepr.peprVersion,
9921
+ cfg.description,
9922
+ image
9923
+ );
9924
+ }
9925
+ if (!opts.embed) {
9926
+ logger_default.info(`Module built successfully at ${path4}`);
9927
+ return;
9928
+ }
9929
+ const assets = new Assets(
9930
+ {
9931
+ ...cfg.pepr,
9932
+ appVersion: cfg.version,
9933
+ description: cfg.description,
9934
+ alwaysIgnore: {
9935
+ namespaces: cfg.pepr.alwaysIgnore?.namespaces
9936
+ },
9937
+ // Can override the rbacMode with the CLI option
9938
+ rbacMode: determineRbacMode(opts, cfg)
9939
+ },
9940
+ path4,
9941
+ opts.withPullSecret === "" ? [] : [opts.withPullSecret]
9942
+ );
9943
+ if (image !== "") assets.image = image;
9944
+ if (!validImagePullSecret(opts.withPullSecret)) {
9945
+ throw new Error(
9946
+ "Invalid imagePullSecret. Please provide a valid name as defined in RFC 1123."
9947
+ );
9948
+ }
9949
+ handleValidCapabilityNames(assets.capabilities);
9950
+ await generateYamlAndWriteToDisk({
9951
+ uuid: cfg.pepr.uuid,
9952
+ outputDir,
9953
+ imagePullSecret: opts.withPullSecret,
9954
+ zarf: opts.zarf,
9955
+ assets
9956
+ });
9957
+ });
9958
+ }
9983
9959
 
9984
9960
  // src/lib/assets/deploy.ts
9985
9961
  var import_crypto3 = __toESM(require("crypto"));
9986
- var import_fs11 = require("fs");
9962
+ var import_fs10 = require("fs");
9987
9963
  var import_kubernetes_fluent_client3 = require("kubernetes-fluent-client");
9988
9964
 
9989
9965
  // src/lib/k8s.ts
@@ -10089,10 +10065,10 @@ async function deployWebhook(assets, force, webhookTimeout) {
10089
10065
  await (0, import_kubernetes_fluent_client3.K8s)(import_kubernetes_fluent_client3.kind.Namespace).Apply(getNamespace(assets.config.customLabels?.namespace));
10090
10066
  await handleWebhookConfiguration(assets, "mutate" /* MUTATE */, webhookTimeout, force);
10091
10067
  await handleWebhookConfiguration(assets, "validate" /* VALIDATE */, webhookTimeout, force);
10092
- logger_default.info("Applying the Pepr Store CRD if it doesn't exist");
10068
+ logger_default.debug("Applying the Pepr Store CRD if it doesn't exist");
10093
10069
  await (0, import_kubernetes_fluent_client3.K8s)(import_kubernetes_fluent_client3.kind.CustomResourceDefinition).Apply(peprStoreCRD, { force });
10094
10070
  if (assets.host) return;
10095
- const code = await import_fs11.promises.readFile(assets.path);
10071
+ const code = await import_fs10.promises.readFile(assets.path);
10096
10072
  if (!code.length) throw new Error("No code provided");
10097
10073
  const hash = import_crypto3.default.createHash("sha256").update(code).digest("hex");
10098
10074
  await setupRBAC(assets.name, assets.capabilities, force, assets.config);
@@ -10154,42 +10130,7 @@ async function setupWatcher(assets, hash, force) {
10154
10130
  }
10155
10131
  }
10156
10132
 
10157
- // src/lib/deploymentChecks.ts
10158
- var import_kubernetes_fluent_client4 = require("kubernetes-fluent-client");
10159
- async function checkDeploymentStatus(namespace) {
10160
- const deployments = await (0, import_kubernetes_fluent_client4.K8s)(import_kubernetes_fluent_client4.kind.Deployment).InNamespace(namespace).Get();
10161
- let allReady = true;
10162
- for (const deployment of deployments.items) {
10163
- const name2 = deployment.metadata?.name ?? "unknown";
10164
- const specReplicas = deployment.spec?.replicas ?? 0;
10165
- const readyReplicas = deployment.status?.readyReplicas ?? 0;
10166
- if (readyReplicas !== specReplicas) {
10167
- logger_default.info(
10168
- `Waiting for deployment ${name2} rollout to finish: ${readyReplicas} of ${specReplicas} replicas are available`
10169
- );
10170
- allReady = false;
10171
- } else {
10172
- logger_default.info(
10173
- `Deployment ${name2} rolled out: ${readyReplicas} of ${specReplicas} replicas are available`
10174
- );
10175
- }
10176
- }
10177
- return allReady;
10178
- }
10179
- async function namespaceDeploymentsReady(namespace = "pepr-system") {
10180
- logger_default.info(`Checking ${namespace} deployments status...`);
10181
- let ready = false;
10182
- while (!ready) {
10183
- ready = await checkDeploymentStatus(namespace);
10184
- if (ready) {
10185
- return ready;
10186
- }
10187
- await new Promise((resolve6) => setTimeout(resolve6, 1e3));
10188
- }
10189
- logger_default.info(`All ${namespace} deployments are ready`);
10190
- }
10191
-
10192
- // src/cli/deploy.ts
10133
+ // src/cli/deploy/imagePullSecret.ts
10193
10134
  function validateImagePullSecretDetails(details) {
10194
10135
  if (!details.pullSecret) {
10195
10136
  return { valid: true };
@@ -10236,6 +10177,9 @@ function generateImagePullSecret(details) {
10236
10177
  }
10237
10178
  };
10238
10179
  }
10180
+
10181
+ // src/cli/deploy/userConfirmation.ts
10182
+ var import_prompts = __toESM(require("prompts"));
10239
10183
  async function getUserConfirmation(opts) {
10240
10184
  if (opts.yes) {
10241
10185
  return true;
@@ -10247,8 +10191,45 @@ async function getUserConfirmation(opts) {
10247
10191
  });
10248
10192
  return confirmation.yes ? true : false;
10249
10193
  }
10194
+
10195
+ // src/lib/deploymentChecks.ts
10196
+ var import_kubernetes_fluent_client4 = require("kubernetes-fluent-client");
10197
+ async function checkDeploymentStatus(namespace) {
10198
+ const deployments = await (0, import_kubernetes_fluent_client4.K8s)(import_kubernetes_fluent_client4.kind.Deployment).InNamespace(namespace).Get();
10199
+ let allReady = true;
10200
+ for (const deployment of deployments.items) {
10201
+ const name2 = deployment.metadata?.name ?? "unknown";
10202
+ const specReplicas = deployment.spec?.replicas ?? 0;
10203
+ const readyReplicas = deployment.status?.readyReplicas ?? 0;
10204
+ if (readyReplicas !== specReplicas) {
10205
+ logger_default.info(
10206
+ `Waiting for deployment ${name2} rollout to finish: ${readyReplicas} of ${specReplicas} replicas are available`
10207
+ );
10208
+ allReady = false;
10209
+ } else {
10210
+ logger_default.info(
10211
+ `Deployment ${name2} rolled out: ${readyReplicas} of ${specReplicas} replicas are available`
10212
+ );
10213
+ }
10214
+ }
10215
+ return allReady;
10216
+ }
10217
+ async function namespaceDeploymentsReady(namespace = "pepr-system") {
10218
+ logger_default.info(`Checking ${namespace} deployments status...`);
10219
+ let ready = false;
10220
+ while (!ready) {
10221
+ ready = await checkDeploymentStatus(namespace);
10222
+ if (ready) {
10223
+ return ready;
10224
+ }
10225
+ await new Promise((resolve7) => setTimeout(resolve7, 1e3));
10226
+ }
10227
+ logger_default.info(`All ${namespace} deployments are ready`);
10228
+ }
10229
+
10230
+ // src/cli/deploy/buildAndDeploy.ts
10250
10231
  async function buildAndDeployModule(image, force) {
10251
- const builtModule = await buildModule();
10232
+ const builtModule = await buildModule("dist");
10252
10233
  if (!builtModule) {
10253
10234
  return;
10254
10235
  }
@@ -10266,12 +10247,23 @@ async function buildAndDeployModule(image, force) {
10266
10247
  await webhook.deploy(deployWebhook, force, builtModule.cfg.pepr.webhookTimeout ?? 10);
10267
10248
  validateCapabilityNames(webhook.capabilities);
10268
10249
  await namespaceDeploymentsReady();
10269
- console.info(`\u2705 Module deployed successfully`);
10250
+ console.info(`Module deployed successfully`);
10270
10251
  } catch (e) {
10271
10252
  console.error(`Error deploying module:`, e);
10272
10253
  process.exit(1);
10273
10254
  }
10274
10255
  }
10256
+ function validateNamespaces(capability, webhook) {
10257
+ namespaceComplianceValidator(capability, webhook.alwaysIgnore?.namespaces);
10258
+ namespaceComplianceValidator(
10259
+ capability,
10260
+ webhook.config.admission?.alwaysIgnore?.namespaces,
10261
+ false
10262
+ );
10263
+ namespaceComplianceValidator(capability, webhook.config.watch?.alwaysIgnore?.namespaces, true);
10264
+ }
10265
+
10266
+ // src/cli/deploy/index.ts
10275
10267
  function deploy_default(program2) {
10276
10268
  program2.command("deploy").description("Deploy a Pepr Module").option("-E, --docker-email <email>", "Email for Docker registry.").option("-P, --docker-password <password>", "Password for Docker registry.").option("-S, --docker-server <server>", "Docker server address.").option("-U, --docker-username <username>", "Docker registry username.").option("-f, --force", "Force deploy the module, override manager field.").option("-i, --image <image>", "Override the image tag.").option("-p, --pull-secret <name>", "Deploy imagePullSecret for Controller private registry.").option("-y, --yes", "Skip confirmation prompts.").action(async (opts) => {
10277
10269
  const valResp = validateImagePullSecretDetails(opts);
@@ -10289,21 +10281,12 @@ function deploy_default(program2) {
10289
10281
  await buildAndDeployModule(opts.image, opts.force);
10290
10282
  });
10291
10283
  }
10292
- function validateNamespaces(capability, webhook) {
10293
- namespaceComplianceValidator(capability, webhook.alwaysIgnore?.namespaces);
10294
- namespaceComplianceValidator(
10295
- capability,
10296
- webhook.config.admission?.alwaysIgnore?.namespaces,
10297
- false
10298
- );
10299
- namespaceComplianceValidator(capability, webhook.config.watch?.alwaysIgnore?.namespaces, true);
10300
- }
10301
10284
 
10302
10285
  // src/cli/dev.ts
10303
10286
  var import_prompts2 = __toESM(require("prompts"));
10304
10287
  var import_child_process4 = require("child_process");
10305
10288
  var import_kubernetes_fluent_client5 = require("kubernetes-fluent-client");
10306
- var import_fs12 = require("fs");
10289
+ var import_fs11 = require("fs");
10307
10290
  function dev_default(program2) {
10308
10291
  program2.command("dev").description("Setup a local webhook development environment").option("-H, --host <host>", "Host to listen on", "host.k3d.internal").option("-y, --yes", "Skip confirmation prompt").action(async (opts) => {
10309
10292
  if (!opts.yes) {
@@ -10317,7 +10300,7 @@ function dev_default(program2) {
10317
10300
  return;
10318
10301
  }
10319
10302
  }
10320
- const { cfg, path: path4 } = await loadModule();
10303
+ const { cfg, path: path4 } = await loadModule("dist", "pepr.ts");
10321
10304
  const webhook = new Assets(
10322
10305
  {
10323
10306
  ...cfg.pepr,
@@ -10327,8 +10310,8 @@ function dev_default(program2) {
10327
10310
  [],
10328
10311
  opts.host
10329
10312
  );
10330
- await import_fs12.promises.writeFile("insecure-tls.crt", webhook.tls.pem.crt);
10331
- await import_fs12.promises.writeFile("insecure-tls.key", webhook.tls.pem.key);
10313
+ await import_fs11.promises.writeFile("insecure-tls.crt", webhook.tls.pem.crt);
10314
+ await import_fs11.promises.writeFile("insecure-tls.key", webhook.tls.pem.key);
10332
10315
  try {
10333
10316
  let program3;
10334
10317
  const name2 = `pepr-${cfg.pepr.uuid}`;
@@ -10370,7 +10353,7 @@ ${error}`
10370
10353
  console.debug(`Received SIGINT, removing webhooks`);
10371
10354
  });
10372
10355
  };
10373
- await buildModule(async (r) => {
10356
+ await buildModule("dist", async (r) => {
10374
10357
  if (r.errors.length > 0) {
10375
10358
  console.error(`Error compiling module: ${r.errors}`);
10376
10359
  return;
@@ -10483,7 +10466,7 @@ var import_child_process5 = require("child_process");
10483
10466
  var import_path5 = require("path");
10484
10467
 
10485
10468
  // src/cli/init/walkthrough.ts
10486
- var import_fs13 = require("fs");
10469
+ var import_fs12 = require("fs");
10487
10470
  var import_prompts3 = __toESM(require("prompts"));
10488
10471
 
10489
10472
  // src/cli/init/enums.ts
@@ -10530,7 +10513,7 @@ async function setName(name2) {
10530
10513
  validate: async (val) => {
10531
10514
  try {
10532
10515
  const name3 = sanitizeName(val);
10533
- await import_fs13.promises.access(name3, import_fs13.promises.constants.F_OK);
10516
+ await import_fs12.promises.access(name3, import_fs12.promises.constants.F_OK);
10534
10517
  return "A directory with this name already exists";
10535
10518
  } catch {
10536
10519
  return val.length > 2 || "The name must be at least 3 characters long";
@@ -10714,11 +10697,11 @@ function uuid_default(program2) {
10714
10697
  program2.command("uuid [uuid]").description("Module UUID(s) currently deployed in the cluster").action(async (uuid) => {
10715
10698
  const deployments = await getPeprDeploymentsByUUID(uuid);
10716
10699
  const uuidTable = buildUUIDTable(deployments);
10717
- console.log("UUID Description");
10718
- console.log("--------------------------------------------");
10719
- Object.entries(uuidTable).forEach(([uuid2, description]) => {
10720
- console.log(`${uuid2} ${description}`);
10721
- });
10700
+ const uuidTableEntries = Object.entries(uuidTable).map(([uuid2, description]) => ({
10701
+ UUID: uuid2,
10702
+ Description: description
10703
+ }));
10704
+ console.table(uuidTableEntries);
10722
10705
  });
10723
10706
  }
10724
10707
  async function getPeprDeploymentsByUUID(uuid) {
@@ -10751,7 +10734,7 @@ var import_commander6 = require("commander");
10751
10734
 
10752
10735
  // src/cli/update/index.ts
10753
10736
  var import_child_process6 = require("child_process");
10754
- var import_fs14 = __toESM(require("fs"));
10737
+ var import_fs13 = __toESM(require("fs"));
10755
10738
  var import_path6 = require("path");
10756
10739
  var import_prompts4 = __toESM(require("prompts"));
10757
10740
  function update_default(program2) {
@@ -10791,12 +10774,12 @@ function update_default(program2) {
10791
10774
  await write((0, import_path6.resolve)(".vscode", snippet.path), snippet.data);
10792
10775
  await write((0, import_path6.resolve)(".vscode", codeSettings.path), codeSettings.data);
10793
10776
  const samplePath = (0, import_path6.resolve)("capabilities", samplesYaml.path);
10794
- if (import_fs14.default.existsSync(samplePath)) {
10795
- import_fs14.default.unlinkSync(samplePath);
10777
+ if (import_fs13.default.existsSync(samplePath)) {
10778
+ import_fs13.default.unlinkSync(samplePath);
10796
10779
  await write(samplePath, samplesYaml.data);
10797
10780
  }
10798
10781
  const tsPath = (0, import_path6.resolve)("capabilities", helloPepr.path);
10799
- if (import_fs14.default.existsSync(tsPath)) {
10782
+ if (import_fs13.default.existsSync(tsPath)) {
10800
10783
  await write(tsPath, helloPepr.data);
10801
10784
  }
10802
10785
  }
@@ -10844,7 +10827,7 @@ var import_commander5 = require("commander");
10844
10827
  var import_commander3 = require("commander");
10845
10828
 
10846
10829
  // src/cli/crd/generate/generators.ts
10847
- var import_fs15 = __toESM(require("fs"));
10830
+ var import_fs14 = __toESM(require("fs"));
10848
10831
  var import_path7 = __toESM(require("path"));
10849
10832
  var import_yaml = __toESM(require_dist());
10850
10833
  var import_ts_morph = require("ts-morph");
@@ -10874,27 +10857,27 @@ function extractCRDDetails(content, sourceFile) {
10874
10857
  }
10875
10858
  async function generateCRDs(options) {
10876
10859
  logger_default.warn("This feature is currently in alpha.\n");
10877
- const outputDir2 = import_path7.default.resolve(options.output);
10878
- await createDirectoryIfNotExists(outputDir2);
10860
+ const outputDir = import_path7.default.resolve(options.output);
10861
+ await createDirectoryIfNotExists(outputDir);
10879
10862
  const project = new import_ts_morph.Project();
10880
10863
  const apiRoot = import_path7.default.resolve("api");
10881
10864
  const versions = getAPIVersions(apiRoot);
10882
10865
  for (const version3 of versions) {
10883
10866
  const sourceFiles = loadVersionFiles(project, import_path7.default.join(apiRoot, version3));
10884
10867
  for (const sourceFile of sourceFiles) {
10885
- processSourceFile(sourceFile, version3, outputDir2);
10868
+ processSourceFile(sourceFile, version3, outputDir);
10886
10869
  }
10887
10870
  }
10888
10871
  }
10889
10872
  function getAPIVersions(apiRoot) {
10890
- return import_fs15.default.readdirSync(apiRoot).filter((v) => import_fs15.default.statSync(import_path7.default.join(apiRoot, v)).isDirectory());
10873
+ return import_fs14.default.readdirSync(apiRoot).filter((v) => import_fs14.default.statSync(import_path7.default.join(apiRoot, v)).isDirectory());
10891
10874
  }
10892
10875
  function loadVersionFiles(project, versionDir) {
10893
- const files = import_fs15.default.readdirSync(versionDir).filter((f) => f.endsWith(".ts"));
10876
+ const files = import_fs14.default.readdirSync(versionDir).filter((f) => f.endsWith(".ts"));
10894
10877
  const filePaths = files.map((f) => import_path7.default.join(versionDir, f));
10895
10878
  return project.addSourceFilesAtPaths(filePaths);
10896
10879
  }
10897
- function processSourceFile(sourceFile, version3, outputDir2) {
10880
+ function processSourceFile(sourceFile, version3, outputDir) {
10898
10881
  const content = sourceFile.getFullText();
10899
10882
  const { kind: kind8, fqdn, scope, plural: plural2, shortNames } = extractCRDDetails(content, sourceFile);
10900
10883
  if (!kind8) {
@@ -10919,8 +10902,8 @@ function processSourceFile(sourceFile, version3, outputDir2) {
10919
10902
  specSchema,
10920
10903
  conditionSchema
10921
10904
  });
10922
- const outPath = import_path7.default.join(outputDir2, `${kind8.toLowerCase()}.yaml`);
10923
- import_fs15.default.writeFileSync(outPath, (0, import_yaml.stringify)(crd), "utf8");
10905
+ const outPath = import_path7.default.join(outputDir, `${kind8.toLowerCase()}.yaml`);
10906
+ import_fs14.default.writeFileSync(outPath, (0, import_yaml.stringify)(crd), "utf8");
10924
10907
  logger_default.info(`\u2714 Created ${outPath}`);
10925
10908
  }
10926
10909
  function extractSingleLineComment(content, label) {
@@ -11084,7 +11067,7 @@ function generate_default() {
11084
11067
 
11085
11068
  // src/cli/crd/create/index.ts
11086
11069
  var import_commander4 = require("commander");
11087
- var import_fs16 = require("fs");
11070
+ var import_fs15 = require("fs");
11088
11071
 
11089
11072
  // src/cli/crd/create/createCRDscaffold.ts
11090
11073
  var createCRDscaffold = (group2, version3, kind8, data) => {
@@ -11177,13 +11160,13 @@ function create_default() {
11177
11160
  ).choices(["Namespaced", "Cluster"]).default("Namespaced")
11178
11161
  ).option("-d, --domain <domain>", "Optional domain for CRD (e.g. pepr.dev)", "pepr.dev").requiredOption("-g, --group <group>", "API group (e.g. cache)").requiredOption("-k, --kind <kind>", "Kind name (e.g. memcached)").option("-p, --plural <plural>", "Plural name for CRD (e.g. memcacheds)").requiredOption("-s, --short-name <name>", "Short name for CRD (e.g. mc)").requiredOption("-v, --version <version>", "API version (e.g. v1alpha1)").action(async ({ group: group2, version: version3, kind: kind8, domain, scope, plural: plural2, shortName }) => {
11179
11162
  logger_default.warn("This feature is currently in alpha.");
11180
- const outputDir2 = import_path8.default.resolve(`./api/${version3}`);
11181
- await createDirectoryIfNotExists(outputDir2);
11182
- await import_fs16.promises.writeFile(
11163
+ const outputDir = import_path8.default.resolve(`./api/${version3}`);
11164
+ await createDirectoryIfNotExists(outputDir);
11165
+ await import_fs15.promises.writeFile(
11183
11166
  `./api/${version3}/${kind8.toLowerCase()}_types.ts`,
11184
11167
  createCRDscaffold(group2, version3, kind8, { domain, scope, plural: plural2, shortName })
11185
11168
  );
11186
- logger_default.info(`\u2714 Created ${kind8} TypeScript definition in ${outputDir2}`);
11169
+ logger_default.info(`\u2714 Created ${kind8} TypeScript definition in ${outputDir}`);
11187
11170
  });
11188
11171
  }
11189
11172