raindancers-cloudfront 0.0.39 → 0.0.41

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 (455) hide show
  1. package/lib/cloudfront/cloudfront-functions/function-composer.d.ts +18 -0
  2. package/lib/cloudfront/cloudfront-functions/function-composer.js +44 -15
  3. package/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
  4. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  5. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  6. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  7. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  8. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  9. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  10. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  11. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  12. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  13. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  14. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  15. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  16. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  17. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  18. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  19. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  20. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  21. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  22. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  23. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  24. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  25. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  26. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  27. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  28. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  29. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  30. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  31. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  32. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  33. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  34. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  35. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  36. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  37. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  38. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  39. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  40. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  41. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  42. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  43. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  44. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  45. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  46. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  47. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  48. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  49. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  50. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  51. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  52. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  53. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  54. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  55. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  56. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  57. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  58. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  59. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  60. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  61. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  62. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  63. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  64. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  65. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  66. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  67. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  68. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  69. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  70. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  71. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  72. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  73. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  74. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  75. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  76. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  77. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  78. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  79. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  80. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  81. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  82. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  83. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  84. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  85. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  86. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  87. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  88. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  89. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  90. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  91. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  92. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  93. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  94. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  95. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  96. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  97. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  98. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  99. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  100. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  101. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  102. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  103. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  104. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  105. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  106. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  107. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  108. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  109. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  110. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  111. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  112. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  113. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  114. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  115. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/__init__.cpython-312.pyc +0 -0
  116. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/debug.cpython-312.pyc +0 -0
  117. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/error.cpython-312.pyc +0 -0
  118. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/streaming.cpython-312.pyc +0 -0
  120. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/__init__.cpython-312.pyc +0 -0
  121. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/decoder.cpython-312.pyc +0 -0
  122. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/encoder.cpython-312.pyc +0 -0
  123. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/eoo.cpython-312.pyc +0 -0
  124. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/__init__.cpython-312.pyc +0 -0
  125. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/decoder.cpython-312.pyc +0 -0
  126. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/encoder.cpython-312.pyc +0 -0
  127. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/__init__.cpython-312.pyc +0 -0
  128. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/decoder.cpython-312.pyc +0 -0
  129. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/encoder.cpython-312.pyc +0 -0
  130. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/__init__.cpython-312.pyc +0 -0
  131. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/decoder.cpython-312.pyc +0 -0
  132. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/encoder.cpython-312.pyc +0 -0
  133. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/__init__.cpython-312.pyc +0 -0
  134. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/integer.cpython-312.pyc +0 -0
  135. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/__init__.cpython-312.pyc +0 -0
  136. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/base.cpython-312.pyc +0 -0
  137. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/char.cpython-312.pyc +0 -0
  138. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/constraint.cpython-312.pyc +0 -0
  139. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/error.cpython-312.pyc +0 -0
  140. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedtype.cpython-312.pyc +0 -0
  141. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedval.cpython-312.pyc +0 -0
  142. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/opentype.cpython-312.pyc +0 -0
  143. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tag.cpython-312.pyc +0 -0
  144. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tagmap.cpython-312.pyc +0 -0
  145. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/univ.cpython-312.pyc +0 -0
  146. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/useful.cpython-312.pyc +0 -0
  147. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/__init__.cpython-312.pyc +0 -0
  148. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/asn1.cpython-312.pyc +0 -0
  149. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/cli.cpython-312.pyc +0 -0
  150. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/common.cpython-312.pyc +0 -0
  151. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/core.cpython-312.pyc +0 -0
  152. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/key.cpython-312.pyc +0 -0
  153. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/parallel.cpython-312.pyc +0 -0
  154. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pem.cpython-312.pyc +0 -0
  155. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1.cpython-312.pyc +0 -0
  156. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1_v2.cpython-312.pyc +0 -0
  157. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/prime.cpython-312.pyc +0 -0
  158. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/randnum.cpython-312.pyc +0 -0
  159. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/transform.cpython-312.pyc +0 -0
  160. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/util.cpython-312.pyc +0 -0
  161. package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
  162. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  163. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  164. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  165. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  166. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  167. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  168. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  169. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  170. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  171. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  172. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  173. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  174. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  175. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  176. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  177. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  178. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  179. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  180. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  181. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  182. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  183. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  184. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  185. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  186. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  187. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  188. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  189. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  190. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  191. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  192. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  193. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  194. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  195. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  196. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  197. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  198. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  199. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  200. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  201. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  202. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  203. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  204. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  205. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  206. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  207. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  208. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  209. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  210. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  211. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  212. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  213. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  214. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  215. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  216. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  217. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  218. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  219. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  220. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  221. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  222. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  223. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  224. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  225. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  226. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  227. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  228. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  229. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  230. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  231. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  232. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  233. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  234. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  235. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  236. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  237. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  238. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  239. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  240. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  241. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  242. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  243. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  244. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  245. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  246. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  247. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  248. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  249. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  250. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  251. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  252. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  253. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  254. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  255. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  256. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  257. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  258. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  259. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  260. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  261. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  262. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  263. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  264. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  265. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  266. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  267. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  268. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  269. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  270. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  271. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  272. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  273. package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
  274. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
  275. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
  276. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
  277. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
  278. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
  279. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
  280. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
  281. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
  282. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
  283. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
  284. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
  285. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
  286. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
  287. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
  288. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
  289. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
  290. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
  291. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
  292. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
  293. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
  294. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
  295. package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
  296. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
  297. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
  298. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
  299. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
  300. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
  301. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
  302. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
  303. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
  304. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
  305. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
  306. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
  307. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
  308. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
  309. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
  310. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
  311. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
  312. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
  313. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
  314. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
  315. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
  316. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
  317. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
  318. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
  319. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
  320. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
  321. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
  322. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
  323. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
  324. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
  325. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
  326. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
  327. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
  328. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
  329. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
  330. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
  331. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
  332. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
  333. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
  334. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
  335. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
  336. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
  337. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
  338. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
  339. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
  340. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
  341. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
  342. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
  343. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
  344. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
  345. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
  346. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
  347. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
  348. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
  349. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
  350. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
  351. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
  352. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
  353. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
  354. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
  355. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
  356. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
  357. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
  358. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
  359. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
  360. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
  361. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
  362. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
  363. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
  364. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
  365. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
  366. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
  367. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
  368. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
  369. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
  370. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  371. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  372. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
  373. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
  374. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
  375. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
  376. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
  377. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
  378. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
  379. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
  380. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
  381. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
  382. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
  383. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
  384. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
  385. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
  386. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
  387. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
  388. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
  389. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
  390. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
  391. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
  392. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
  393. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
  394. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
  395. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
  396. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
  397. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
  398. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  399. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
  400. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
  401. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
  402. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
  403. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
  404. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
  405. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  406. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
  407. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
  408. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
  409. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
  410. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/_collections.py +4 -0
  411. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/_version.py +2 -2
  412. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/connection.py +150 -45
  413. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/connectionpool.py +29 -9
  414. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
  415. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
  416. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
  417. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
  418. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
  419. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
  420. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
  421. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
  422. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/pyopenssl.py +61 -21
  423. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/socks.py +5 -7
  424. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
  425. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
  426. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
  427. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/connection.py +3 -2
  428. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/poolmanager.py +28 -4
  429. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/response.py +42 -9
  430. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
  431. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
  432. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
  433. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
  434. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
  435. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
  436. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
  437. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
  438. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
  439. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
  440. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
  441. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
  442. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
  443. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/request.py +40 -4
  444. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/retry.py +13 -1
  445. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/ssl_.py +12 -8
  446. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/url.py +158 -50
  447. package/lib/cloudfront/lambda-bundled/hmacSecret/{urllib3-2.7.0.dist-info → urllib3-2.8.0.dist-info}/METADATA +16 -4
  448. package/lib/cloudfront/lambda-bundled/hmacSecret/{urllib3-2.7.0.dist-info → urllib3-2.8.0.dist-info}/RECORD +18 -18
  449. package/lib/cloudfront/lambda-bundled/hmacSecret/{urllib3-2.7.0.dist-info → urllib3-2.8.0.dist-info}/WHEEL +1 -1
  450. package/lib/cloudfront/patterns/cognitoCustomerPool.d.ts +31 -1
  451. package/lib/cloudfront/patterns/cognitoCustomerPool.js +31 -2
  452. package/lib/cloudfront/patterns/securedCloudFront.js +14 -2
  453. package/package.json +1 -1
  454. /package/lib/cloudfront/lambda-bundled/hmacSecret/{urllib3-2.7.0.dist-info → urllib3-2.8.0.dist-info}/INSTALLER +0 -0
  455. /package/lib/cloudfront/lambda-bundled/hmacSecret/{urllib3-2.7.0.dist-info → urllib3-2.8.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -54,13 +54,27 @@ class CognitoCustomerPool extends constructs.Construct {
54
54
  if (!props.appClients || props.appClients.length === 0) {
55
55
  throw new Error('CognitoCustomerPool requires at least one app client');
56
56
  }
57
+ if ((props.customEmailSenderLambda === undefined) !== (props.customSenderKmsKey === undefined)) {
58
+ throw new Error('CognitoCustomerPool: customEmailSenderLambda and customSenderKmsKey must be provided together — '
59
+ + 'a custom email sender requires a KMS key for Cognito to encrypt codes to, and the key is unused without the Lambda.');
60
+ }
61
+ if (props.emailOtpMfa && !props.customEmailSenderLambda) {
62
+ throw new Error('CognitoCustomerPool: emailOtpMfa requires customEmailSenderLambda (and customSenderKmsKey) — '
63
+ + 'EMAIL_OTP codes are delivered by the custom email sender, so email MFA cannot be enabled without it.');
64
+ }
65
+ // With emailOtpMfa, EMAIL_OTP is the sole factor and is applied via an L1
66
+ // override below; do NOT pass mfaSecondFactor.email to the L2 (its validateEmailMfa
67
+ // demands a managed DEVELOPER SES config, which the custom-sender path avoids).
68
+ const l2MfaSecondFactor = props.emailOtpMfa
69
+ ? { otp: false, sms: false }
70
+ : (props.mfaSecondFactor ?? { otp: true, sms: false });
57
71
  this.userPool = new aws_cdk_lib_1.aws_cognito.UserPool(this, 'UserPool', {
58
72
  userPoolName: props.userPoolName,
59
73
  selfSignUpEnabled: props.selfSignUpEnabled ?? false,
60
74
  signInAliases: { email: true },
61
75
  signInCaseSensitive: false,
62
76
  mfa: props.mfa ?? aws_cdk_lib_1.aws_cognito.Mfa.REQUIRED,
63
- mfaSecondFactor: props.mfaSecondFactor ?? { otp: true, sms: false },
77
+ mfaSecondFactor: l2MfaSecondFactor,
64
78
  passwordPolicy: props.passwordPolicy ?? {
65
79
  minLength: 12,
66
80
  requireLowercase: true,
@@ -73,8 +87,23 @@ class CognitoCustomerPool extends constructs.Construct {
73
87
  customAttributes: props.customAttributes,
74
88
  autoVerify: { email: true },
75
89
  accountRecovery: aws_cdk_lib_1.aws_cognito.AccountRecovery.EMAIL_ONLY,
90
+ // Custom Email Sender: when provided, Cognito routes every customer email
91
+ // through this Lambda and encrypts codes to customSenderKmsKey. Both must be
92
+ // set on the pool at construction — the KMS key is not settable via addTrigger.
93
+ customSenderKmsKey: props.customSenderKmsKey,
94
+ lambdaTriggers: props.customEmailSenderLambda
95
+ ? { customEmailSender: props.customEmailSenderLambda }
96
+ : undefined,
76
97
  removalPolicy: props.removalPolicy ?? core.RemovalPolicy.RETAIN,
77
98
  });
99
+ // L1 escape hatch: enable EMAIL_OTP as the only MFA factor. The L2 cannot express
100
+ // "email MFA delivered solely by a custom sender" (see emailOtpMfa docs), so set
101
+ // EnabledMfas directly on the underlying CfnUserPool. The custom email sender
102
+ // delivers the code; no managed SES email configuration is required.
103
+ if (props.emailOtpMfa) {
104
+ const cfnPool = this.userPool.node.defaultChild;
105
+ cfnPool.enabledMfas = ['EMAIL_OTP'];
106
+ }
78
107
  const preTokenLambda = props.preTokenGenerationLambda ?? new aws_cdk_lib_1.aws_lambda.Function(this, 'PreTokenLambda', {
79
108
  runtime: aws_cdk_lib_1.aws_lambda.Runtime.PYTHON_3_12,
80
109
  handler: 'index.handler',
@@ -163,4 +192,4 @@ class CognitoCustomerPool extends constructs.Construct {
163
192
  }
164
193
  }
165
194
  exports.CognitoCustomerPool = CognitoCustomerPool;
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0b0N1c3RvbWVyUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbG91ZGZyb250L3BhdHRlcm5zL2NvZ25pdG9DdXN0b21lclBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FJcUI7QUFDckIsdURBQXlDO0FBMkZ6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx5QkFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3JELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLElBQUksS0FBSztZQUNuRCxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQzlCLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUkseUJBQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtZQUN0QyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUNuRSxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFB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RSxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHO2dCQUNyQyxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRTthQUN6RCxDQUFDLENBQUM7WUFFSCxnRUFBZ0U7WUFDaEUsSUFBSSxHQUFHLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSx5QkFBTyxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7b0JBQzdELGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUc7b0JBQ3JDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CO29CQUN4RCxXQUFXLEVBQUUsS0FBSztvQkFDbEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO2lCQUNqQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTNJRCxrREEySUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfY29nbml0byBhcyBjb2duaXRvLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cbnR5cGUgQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZyA9IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG50eXBlIENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnID0gY29nbml0by5DZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudC5Db21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG5cbi8qKlxuICogU3BlY2lmaWNhdGlvbiBmb3Igb25lIENvZ25pdG8gYXBwIGNsaWVudCAoZS5nLiBvbmUgYnJhbmQgb3Igb25lIGZyb250LWVuZCkuXG4gKiBQdWJsaWMgU1BBIGNsaWVudHM6IG5vIHNlY3JldCwgUEtDRSAoYXV0aG9yaXphdGlvbi1jb2RlIGdyYW50KSwgU1JQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BcHBDbGllbnRTcGVjIHtcbiAgLyoqIExvZ2ljYWwga2V5IHVzZWQgYXMgdGhlIGNvbnN0cnVjdCBpZCBhbmQgdGhlIGtleSBpbiB7QGxpbmsgQ29nbml0b0N1c3RvbWVyUG9vbC51c2VyUG9vbENsaWVudHN9LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIE9BdXRoMiBjYWxsYmFjayBVUkxzIGZvciB0aGlzIGNsaWVudCAodXNlZCBvbmx5IGJ5IHRoZSBzb2NpYWwvaG9zdGVkIHJlZGlyZWN0IGZsb3cpLiAqL1xuICByZWFkb25seSBjYWxsYmFja1VybHM/OiBzdHJpbmdbXTtcbiAgLyoqIExvZ291dCBVUkxzIGZvciB0aGlzIGNsaWVudC4gKi9cbiAgcmVhZG9ubHkgbG9nb3V0VXJscz86IHN0cmluZ1tdO1xuICAvKiogSWRlbnRpdHkgcHJvdmlkZXJzIHRoaXMgY2xpZW50IHN1cHBvcnRzLiBAZGVmYXVsdCBbQ09HTklUT10gKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlcltdO1xuICAvKiogR2VuZXJhdGUgYSBjbGllbnQgc2VjcmV0LiBAZGVmYXVsdCBmYWxzZSAocHVibGljIFNQQSBjbGllbnQpICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlU2VjcmV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25hbCBDb2duaXRvIElkZW50aXR5IFBvb2wgKyBBQkFDIChhdHRyaWJ1dGVzLWZvci1hY2Nlc3MtY29udHJvbCkgY29uZmlnLlxuICogTWFwcyB0b2tlbiBjbGFpbXMgdG8gcHJpbmNpcGFsIHRhZ3Mgc28gZG93bnN0cmVhbSBJQU0gY2FuIHNjb3BlIG9uIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWcge1xuICAvKiogQWxsb3cgdW5hdXRoZW50aWNhdGVkIChndWVzdCkgaWRlbnRpdGllcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENsYWltIOKGkiBwcmluY2lwYWwtdGFnIG1hcHBpbmcsIGUuZy4gYHsgc3ViOiAnY3VzdG9tZXItaWQnIH1gLiBBcHBsaWVkIHRvIHRoZVxuICAgKiB1c2VyLXBvb2wgcHJvdmlkZXIgc28gYXV0aGVudGljYXRlZCBzZXNzaW9ucyBjYXJyeSB0aGVzZSBhcyBgYXdzOlByaW5jaXBhbFRhZy8qYC5cbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbFRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogTWFuYWdlZCBwb2xpY2llcyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgcm9sZS4gQGRlZmF1bHQgbm9uZSAoYXR0YWNoIHlvdXIgb3duKS4gKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRlZFJvbGVNYW5hZ2VkUG9saWNpZXM/OiBpYW0uSU1hbmFnZWRQb2xpY3lbXTtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIENvZ25pdG9DdXN0b21lclBvb2x9LiBFdmVyeSB2YWx1ZSBpcyBnZW5lcmljIOKAlCBub1xuICogcHJvamVjdC9icmFuZC9kb21haW4gc3BlY2lmaWNzIGFyZSBiYWtlZCBpbjsgcGFzcyB0aGVtIGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0N1c3RvbWVyUG9vbFByb3BzIHtcbiAgLyoqIFVzZXIgcG9vbCBuYW1lLiAqL1xuICByZWFkb25seSB1c2VyUG9vbE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDb2duaXRvIGhvc3RlZC1VSSBkb21haW4gcHJlZml4IChnbG9iYWxseSB1bmlxdWUpLiAqL1xuICByZWFkb25seSBjb2duaXRvRG9tYWluUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBBcHAgY2xpZW50cyB0byBjcmVhdGUgKHR5cGljYWxseSBvbmUgcGVyIGJyYW5kL2Zyb250LWVuZCkuIEF0IGxlYXN0IG9uZS4gKi9cbiAgcmVhZG9ubHkgYXBwQ2xpZW50czogQ29nbml0b0FwcENsaWVudFNwZWNbXTtcbiAgLyoqIEVuYWJsZSBzZWxmLXNlcnZpY2Ugc2lnbi11cC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgc2VsZlNpZ25VcEVuYWJsZWQ/OiBib29sZWFuO1xuICAvKiogTUZBIGVuZm9yY2VtZW50LiBAZGVmYXVsdCBSRVFVSVJFRCAqL1xuICByZWFkb25seSBtZmE/OiBjb2duaXRvLk1mYTtcbiAgLyoqIFNlY29uZCBmYWN0b3JzLiBAZGVmYXVsdCB7IG90cDogdHJ1ZSwgc21zOiBmYWxzZSB9ICovXG4gIHJlYWRvbmx5IG1mYVNlY29uZEZhY3Rvcj86IGNvZ25pdG8uTWZhU2Vjb25kRmFjdG9yO1xuICAvKiogUGFzc3dvcmQgcG9saWN5LiBAZGVmYXVsdCBtaW5MZW5ndGggMTIsIHVwcGVyL2xvd2VyL2RpZ2l0cy9zeW1ib2xzLiAqL1xuICByZWFkb25seSBwYXNzd29yZFBvbGljeT86IGNvZ25pdG8uUGFzc3dvcmRQb2xpY3k7XG4gIC8qKiBBZHZhbmNlZCBzZWN1cml0eSBtb2RlICh0aHJlYXQgcHJvdGVjdGlvbikuIEBkZWZhdWx0IE9GRiAqL1xuICByZWFkb25seSBhZHZhbmNlZFNlY3VyaXR5TW9kZT86IGNvZ25pdG8uQWR2YW5jZWRTZWN1cml0eU1vZGU7XG4gIC8qKiBTdGFuZGFyZCBhdHRyaWJ1dGVzIGNvbmZpZy4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRBdHRyaWJ1dGVzPzogY29nbml0by5TdGFuZGFyZEF0dHJpYnV0ZXM7XG4gIC8qKiBDdXN0b20gYXR0cmlidXRlcy4gKi9cbiAgcmVhZG9ubHkgY3VzdG9tQXR0cmlidXRlcz86IHsgW2tleTogc3RyaW5nXTogY29nbml0by5JQ3VzdG9tQXR0cmlidXRlIH07XG4gIC8qKiBFbmFibGUgdGhlIENVU1RPTV9BVVRIIGZsb3cgb24gYXBwIGNsaWVudHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUN1c3RvbUF1dGhGbG93PzogYm9vbGVhbjtcbiAgLyoqIEFjY2VzcyB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMSBob3VyICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Rva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogSUQgdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDEgaG91ciAqL1xuICByZWFkb25seSBpZFRva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogUmVmcmVzaCB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMzAgZGF5cyAqL1xuICByZWFkb25seSByZWZyZXNoVG9rZW5WYWxpZGl0eT86IGNvcmUuRHVyYXRpb247XG4gIC8qKiBDb2duaXRvIGdyb3VwcyB0byBjcmVhdGUuICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHJlLXRva2VuLWdlbmVyYXRpb24gTGFtYmRhIChWMikuIEBkZWZhdWx0IGEgYnVuZGxlZCBuby1vcCBsaWJyYXJ5IExhbWJkYSBpc1xuICAgKiBjcmVhdGVkLiBQYXNzIHlvdXIgb3duIHRvIGN1c3RvbWlzZSBlbWl0dGVkIGNsYWltcy5cbiAgICovXG4gIHJlYWRvbmx5IHByZVRva2VuR2VuZXJhdGlvbkxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBMMSBhY2NvdW50LXRha2VvdmVyIHJpc2sgY29uZmlndXJhdGlvbiAocmVxdWlyZXMge0BsaW5rIGFkdmFuY2VkU2VjdXJpdHlNb2RlfVxuICAgKiBFTkZPUkNFRC9BVURJVCkuIFBhc3NlZCB0aHJvdWdoIHRvIENmblVzZXJQb29sUmlza0NvbmZpZ3VyYXRpb25BdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb24/OiBBY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlnO1xuICAvKiogTDEgY29tcHJvbWlzZWQtY3JlZGVudGlhbHMgcmlzayBjb25maWd1cmF0aW9uLiAqL1xuICByZWFkb25seSBjb21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb24/OiBDb21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZztcbiAgLyoqIE9wdGlvbmFsIGlkZW50aXR5IHBvb2wgKyBBQkFDIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IGlkZW50aXR5UG9vbD86IENvZ25pdG9JZGVudGl0eVBvb2xBYmFjQ29uZmlnO1xuICAvKiogUmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBwb29sLiBAZGVmYXVsdCBSRVRBSU4gKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IGNvcmUuUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBBIGdlbmVyaWMsIHJldXNhYmxlIHNlY3VyZSBDb2duaXRvICoqY3VzdG9tZXIqKiB1c2VyIHBvb2wgZm9yIHRoZSBjdXN0b20tVUlcbiAqIChjbGllbnQtc2lkZSBTUlApIGF1dGhlbnRpY2F0aW9uIHBhdHRlcm46IHB1YmxpYyBQS0NFIGFwcCBjbGllbnRzLCBNRkEsXG4gKiBzdHJvbmcgcGFzc3dvcmQgcG9saWN5LCBvcHRpb25hbCBhZHZhbmNlZC1zZWN1cml0eSB0aHJlYXQgcHJvdGVjdGlvbixcbiAqIHBlci1jbGllbnQgKHBlci1icmFuZCkgYXBwIGNsaWVudHMsIGFuZCBhbiBvcHRpb25hbCBpZGVudGl0eSBwb29sIHdpdGggQUJBQy5cbiAqXG4gKiBQcm92aXNpb25zIE9OTFkgdGhlIGlkZW50aXR5IHByb3ZpZGVyLiBJdCBrbm93cyBub3RoaW5nIGFib3V0IENsb3VkRnJvbnQsXG4gKiBzZXNzaW9ucywgb3IgYW55IHNwZWNpZmljIHByb2plY3Qg4oCUIHBhaXIgaXQgd2l0aCBgQ29nbml0b1Nlc3Npb25CYWNrZW5kYFxuICogKHNlc3Npb24gc3Vic3RyYXRlKSBhbmQgYENvZ25pdG9DdXN0b21VaUF1dGhgIChlZGdlL0NETikuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2duaXRvQ3VzdG9tZXJQb29sIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2w6IGNvZ25pdG8uVXNlclBvb2w7XG4gIC8qKiBBcHAgY2xpZW50cyBrZXllZCBieSB7QGxpbmsgQ29nbml0b0FwcENsaWVudFNwZWMua2V5fS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sQ2xpZW50czogUmVjb3JkPHN0cmluZywgY29nbml0by5Vc2VyUG9vbENsaWVudD47XG4gIC8qKiBUaGUgZmlyc3QgYXBwIGNsaWVudCwgZm9yIGNvbnZlbmllbmNlLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnQ6IGNvZ25pdG8uVXNlclBvb2xDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbERvbWFpbjogY29nbml0by5Vc2VyUG9vbERvbWFpbjtcbiAgLyoqIEhvc3RlZC1VSSBkb21haW4gVVJMLCBlLmcuIGA8cHJlZml4Pi5hdXRoLjxyZWdpb24+LmFtYXpvbmNvZ25pdG8uY29tYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvZ25pdG9Eb21haW5Vcmw6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGlkZW50aXR5UG9vbD86IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sO1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRlZFJvbGU/OiBpYW0uUm9sZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvQ3VzdG9tZXJQb29sUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy5hcHBDbGllbnRzIHx8IHByb3BzLmFwcENsaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZ25pdG9DdXN0b21lclBvb2wgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFwcCBjbGllbnQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJQb29sID0gbmV3IGNvZ25pdG8uVXNlclBvb2wodGhpcywgJ1VzZXJQb29sJywge1xuICAgICAgdXNlclBvb2xOYW1lOiBwcm9wcy51c2VyUG9vbE5hbWUsXG4gICAgICBzZWxmU2lnblVwRW5hYmxlZDogcHJvcHMuc2VsZlNpZ25VcEVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBzaWduSW5BbGlhc2VzOiB7IGVtYWlsOiB0cnVlIH0sXG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgIG1mYTogcHJvcHMubWZhID8/IGNvZ25pdG8uTWZhLlJFUVVJUkVELFxuICAgICAgbWZhU2Vjb25kRmFjdG9yOiBwcm9wcy5tZmFTZWNvbmRGYWN0b3IgPz8geyBvdHA6IHRydWUsIHNtczogZmFsc2UgfSxcbiAgICAgIHBhc3N3b3JkUG9saWN5OiBwcm9wcy5wYXNzd29yZFBvbGljeSA/PyB7XG4gICAgICAgIG1pbkxlbmd0aDogMTIsXG4gICAgICAgIHJlcXVpcmVMb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlcXVpcmVVcHBlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlcXVpcmVEaWdpdHM6IHRydWUsXG4gICAgICAgIHJlcXVpcmVTeW1ib2xzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGFkdmFuY2VkU2VjdXJpdHlNb2RlOiBwcm9wcy5hZHZhbmNlZFNlY3VyaXR5TW9kZSA/PyBjb2duaXRvLkFkdmFuY2VkU2VjdXJpdHlNb2RlLk9GRixcbiAgICAgIHN0YW5kYXJkQXR0cmlidXRlczogcHJvcHMuc3RhbmRhcmRBdHRyaWJ1dGVzLFxuICAgICAgY3VzdG9tQXR0cmlidXRlczogcHJvcHMuY3VzdG9tQXR0cmlidXRlcyxcbiAgICAgIGF1dG9WZXJpZnk6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIGFjY291bnRSZWNvdmVyeTogY29nbml0by5BY2NvdW50UmVjb3ZlcnkuRU1BSUxfT05MWSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZVRva2VuTGFtYmRhID0gcHJvcHMucHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhID8/IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ1ByZVRva2VuTGFtYmRhJywge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTIsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9wcmUtdG9rZW4nKSksXG4gICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgfSk7XG4gICAgdGhpcy51c2VyUG9vbC5hZGRUcmlnZ2VyKGNvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uUFJFX1RPS0VOX0dFTkVSQVRJT05fQ09ORklHLCBwcmVUb2tlbkxhbWJkYSwgY29nbml0by5MYW1iZGFWZXJzaW9uLlYyXzApO1xuXG4gICAgaWYgKHByb3BzLmdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBwcm9wcy5ncm91cHMpIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCBgR3JvdXAke2dyb3VwfWAsIHtcbiAgICAgICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWwgYWR2YW5jZWQtc2VjdXJpdHkgcmlzayBjb25maWd1cmF0aW9uIChMMSkuXG4gICAgaWYgKHByb3BzLmFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uIHx8IHByb3BzLmNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbikge1xuICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQodGhpcywgJ1Jpc2tDb25maWcnLCB7XG4gICAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgY2xpZW50SWQ6ICdBTEwnLFxuICAgICAgICBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyUG9vbENsaWVudHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHNwZWMgb2YgcHJvcHMuYXBwQ2xpZW50cykge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGNvZ25pdG8uVXNlclBvb2xDbGllbnQodGhpcywgYENsaWVudCR7c3BlYy5rZXl9YCwge1xuICAgICAgICB1c2VyUG9vbDogdGhpcy51c2VyUG9vbCxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHNwZWMuZ2VuZXJhdGVTZWNyZXQgPz8gZmFsc2UsXG4gICAgICAgIGF1dGhGbG93czoge1xuICAgICAgICAgIHVzZXJTcnA6IHRydWUsXG4gICAgICAgICAgY3VzdG9tOiBwcm9wcy5lbmFibGVDdXN0b21BdXRoRmxvdyA/PyBmYWxzZSxcbiAgICAgICAgICAvLyB1c2VyUGFzc3dvcmQgLyBhZG1pblVzZXJQYXNzd29yZCBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKGRpc2FibGVkKS5cbiAgICAgICAgfSxcbiAgICAgICAgb0F1dGg6IHtcbiAgICAgICAgICBmbG93czogeyBhdXRob3JpemF0aW9uQ29kZUdyYW50OiB0cnVlIH0sXG4gICAgICAgICAgc2NvcGVzOiBbY29nbml0by5PQXV0aFNjb3BlLk9QRU5JRCwgY29nbml0by5PQXV0aFNjb3BlLkVNQUlMLCBjb2duaXRvLk9BdXRoU2NvcGUuUFJPRklMRV0sXG4gICAgICAgICAgY2FsbGJhY2tVcmxzOiBzcGVjLmNhbGxiYWNrVXJscyxcbiAgICAgICAgICBsb2dvdXRVcmxzOiBzcGVjLmxvZ291dFVybHMsXG4gICAgICAgIH0sXG4gICAgICAgIHN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzOiBzcGVjLnN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzID8/IFtjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlci5DT0dOSVRPXSxcbiAgICAgICAgcHJldmVudFVzZXJFeGlzdGVuY2VFcnJvcnM6IHRydWUsXG4gICAgICAgIGVuYWJsZVRva2VuUmV2b2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgYWNjZXNzVG9rZW5WYWxpZGl0eTogcHJvcHMuYWNjZXNzVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmhvdXJzKDEpLFxuICAgICAgICBpZFRva2VuVmFsaWRpdHk6IHByb3BzLmlkVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmhvdXJzKDEpLFxuICAgICAgICByZWZyZXNoVG9rZW5WYWxpZGl0eTogcHJvcHMucmVmcmVzaFRva2VuVmFsaWRpdHkgPz8gY29yZS5EdXJhdGlvbi5kYXlzKDMwKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VyUG9vbENsaWVudHNbc3BlYy5rZXldID0gY2xpZW50O1xuICAgIH1cbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gdGhpcy51c2VyUG9vbENsaWVudHNbcHJvcHMuYXBwQ2xpZW50c1swXS5rZXldO1xuXG4gICAgdGhpcy51c2VyUG9vbERvbWFpbiA9IHRoaXMudXNlclBvb2wuYWRkRG9tYWluKCdDb2duaXRvRG9tYWluJywge1xuICAgICAgY29nbml0b0RvbWFpbjogeyBkb21haW5QcmVmaXg6IHByb3BzLmNvZ25pdG9Eb21haW5QcmVmaXggfSxcbiAgICB9KTtcbiAgICB0aGlzLmNvZ25pdG9Eb21haW5VcmwgPSBgJHtwcm9wcy5jb2duaXRvRG9tYWluUHJlZml4fS5hdXRoLiR7Y29yZS5TdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmNvZ25pdG8uY29tYDtcblxuICAgIGlmIChwcm9wcy5pZGVudGl0eVBvb2wpIHtcbiAgICAgIGNvbnN0IGlkcCA9IHByb3BzLmlkZW50aXR5UG9vbDtcbiAgICAgIHRoaXMuaWRlbnRpdHlQb29sID0gbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sKHRoaXMsICdJZGVudGl0eVBvb2wnLCB7XG4gICAgICAgIGFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllczogaWRwLmFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcyA/PyBmYWxzZSxcbiAgICAgICAgY29nbml0b0lkZW50aXR5UHJvdmlkZXJzOiBwcm9wcy5hcHBDbGllbnRzLm1hcChzcGVjID0+ICh7XG4gICAgICAgICAgY2xpZW50SWQ6IHRoaXMudXNlclBvb2xDbGllbnRzW3NwZWMua2V5XS51c2VyUG9vbENsaWVudElkLFxuICAgICAgICAgIHByb3ZpZGVyTmFtZTogdGhpcy51c2VyUG9vbC51c2VyUG9vbFByb3ZpZGVyTmFtZSxcbiAgICAgICAgICBzZXJ2ZXJTaWRlVG9rZW5DaGVjazogdHJ1ZSxcbiAgICAgICAgfSkpLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYXV0aGVudGljYXRlZFJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0F1dGhlbnRpY2F0ZWRSb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uRmVkZXJhdGVkUHJpbmNpcGFsKFxuICAgICAgICAgICdjb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICdTdHJpbmdFcXVhbHMnOiB7ICdjb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb206YXVkJzogdGhpcy5pZGVudGl0eVBvb2wucmVmIH0sXG4gICAgICAgICAgICAnRm9yQW55VmFsdWU6U3RyaW5nTGlrZSc6IHsgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbTphbXInOiAnYXV0aGVudGljYXRlZCcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdzdHM6QXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eScsXG4gICAgICAgICksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogaWRwLmF1dGhlbnRpY2F0ZWRSb2xlTWFuYWdlZFBvbGljaWVzLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBjb2duaXRvLkNmbklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50KHRoaXMsICdJZGVudGl0eVBvb2xSb2xlcycsIHtcbiAgICAgICAgaWRlbnRpdHlQb29sSWQ6IHRoaXMuaWRlbnRpdHlQb29sLnJlZixcbiAgICAgICAgcm9sZXM6IHsgYXV0aGVudGljYXRlZDogdGhpcy5hdXRoZW50aWNhdGVkUm9sZS5yb2xlQXJuIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gQUJBQzogbWFwIGNsYWltcyB0byBwcmluY2lwYWwgdGFncyBvbiB0aGUgdXNlci1wb29sIHByb3ZpZGVyLlxuICAgICAgaWYgKGlkcC5wcmluY2lwYWxUYWdzICYmIE9iamVjdC5rZXlzKGlkcC5wcmluY2lwYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ldyBjb2duaXRvLkNmbklkZW50aXR5UG9vbFByaW5jaXBhbFRhZyh0aGlzLCAnUHJpbmNpcGFsVGFncycsIHtcbiAgICAgICAgICBpZGVudGl0eVBvb2xJZDogdGhpcy5pZGVudGl0eVBvb2wucmVmLFxuICAgICAgICAgIGlkZW50aXR5UHJvdmlkZXJOYW1lOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sUHJvdmlkZXJOYW1lLFxuICAgICAgICAgIHVzZURlZmF1bHRzOiBmYWxzZSxcbiAgICAgICAgICBwcmluY2lwYWxUYWdzOiBpZHAucHJpbmNpcGFsVGFncyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0b0N1c3RvbWVyUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbG91ZGZyb250L3BhdHRlcm5zL2NvZ25pdG9DdXN0b21lclBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FLcUI7QUFDckIsdURBQXlDO0FBeUh6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixNQUFNLElBQUksS0FBSyxDQUNiLGtHQUFrRztrQkFDaEcscUhBQXFILENBQ3hILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0Y7a0JBQzdGLHNHQUFzRyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxvRkFBb0Y7UUFDcEYsZ0ZBQWdGO1FBQ2hGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVc7WUFDekMsQ0FBQyxDQUFD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Z0JBQ3JDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFO2FBQ3pELENBQUMsQ0FBQztZQUVILGdFQUFnRTtZQUNoRSxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLHlCQUFPLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtvQkFDN0QsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRztvQkFDckMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7b0JBQ3hELFdBQVcsRUFBRSxLQUFLO29CQUNsQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7aUJBQ2pDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaExELGtEQWdMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvIGFzIGNvZ25pdG8sXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3Nfa21zIGFzIGttcyxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cbnR5cGUgQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZyA9IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG50eXBlIENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnID0gY29nbml0by5DZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudC5Db21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG5cbi8qKlxuICogU3BlY2lmaWNhdGlvbiBmb3Igb25lIENvZ25pdG8gYXBwIGNsaWVudCAoZS5nLiBvbmUgYnJhbmQgb3Igb25lIGZyb250LWVuZCkuXG4gKiBQdWJsaWMgU1BBIGNsaWVudHM6IG5vIHNlY3JldCwgUEtDRSAoYXV0aG9yaXphdGlvbi1jb2RlIGdyYW50KSwgU1JQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BcHBDbGllbnRTcGVjIHtcbiAgLyoqIExvZ2ljYWwga2V5IHVzZWQgYXMgdGhlIGNvbnN0cnVjdCBpZCBhbmQgdGhlIGtleSBpbiB7QGxpbmsgQ29nbml0b0N1c3RvbWVyUG9vbC51c2VyUG9vbENsaWVudHN9LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIE9BdXRoMiBjYWxsYmFjayBVUkxzIGZvciB0aGlzIGNsaWVudCAodXNlZCBvbmx5IGJ5IHRoZSBzb2NpYWwvaG9zdGVkIHJlZGlyZWN0IGZsb3cpLiAqL1xuICByZWFkb25seSBjYWxsYmFja1VybHM/OiBzdHJpbmdbXTtcbiAgLyoqIExvZ291dCBVUkxzIGZvciB0aGlzIGNsaWVudC4gKi9cbiAgcmVhZG9ubHkgbG9nb3V0VXJscz86IHN0cmluZ1tdO1xuICAvKiogSWRlbnRpdHkgcHJvdmlkZXJzIHRoaXMgY2xpZW50IHN1cHBvcnRzLiBAZGVmYXVsdCBbQ09HTklUT10gKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlcltdO1xuICAvKiogR2VuZXJhdGUgYSBjbGllbnQgc2VjcmV0LiBAZGVmYXVsdCBmYWxzZSAocHVibGljIFNQQSBjbGllbnQpICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlU2VjcmV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25hbCBDb2duaXRvIElkZW50aXR5IFBvb2wgKyBBQkFDIChhdHRyaWJ1dGVzLWZvci1hY2Nlc3MtY29udHJvbCkgY29uZmlnLlxuICogTWFwcyB0b2tlbiBjbGFpbXMgdG8gcHJpbmNpcGFsIHRhZ3Mgc28gZG93bnN0cmVhbSBJQU0gY2FuIHNjb3BlIG9uIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWcge1xuICAvKiogQWxsb3cgdW5hdXRoZW50aWNhdGVkIChndWVzdCkgaWRlbnRpdGllcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENsYWltIOKGkiBwcmluY2lwYWwtdGFnIG1hcHBpbmcsIGUuZy4gYHsgc3ViOiAnY3VzdG9tZXItaWQnIH1gLiBBcHBsaWVkIHRvIHRoZVxuICAgKiB1c2VyLXBvb2wgcHJvdmlkZXIgc28gYXV0aGVudGljYXRlZCBzZXNzaW9ucyBjYXJyeSB0aGVzZSBhcyBgYXdzOlByaW5jaXBhbFRhZy8qYC5cbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbFRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogTWFuYWdlZCBwb2xpY2llcyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgcm9sZS4gQGRlZmF1bHQgbm9uZSAoYXR0YWNoIHlvdXIgb3duKS4gKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRlZFJvbGVNYW5hZ2VkUG9saWNpZXM/OiBpYW0uSU1hbmFnZWRQb2xpY3lbXTtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIENvZ25pdG9DdXN0b21lclBvb2x9LiBFdmVyeSB2YWx1ZSBpcyBnZW5lcmljIOKAlCBub1xuICogcHJvamVjdC9icmFuZC9kb21haW4gc3BlY2lmaWNzIGFyZSBiYWtlZCBpbjsgcGFzcyB0aGVtIGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0N1c3RvbWVyUG9vbFByb3BzIHtcbiAgLyoqIFVzZXIgcG9vbCBuYW1lLiAqL1xuICByZWFkb25seSB1c2VyUG9vbE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDb2duaXRvIGhvc3RlZC1VSSBkb21haW4gcHJlZml4IChnbG9iYWxseSB1bmlxdWUpLiAqL1xuICByZWFkb25seSBjb2duaXRvRG9tYWluUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBBcHAgY2xpZW50cyB0byBjcmVhdGUgKHR5cGljYWxseSBvbmUgcGVyIGJyYW5kL2Zyb250LWVuZCkuIEF0IGxlYXN0IG9uZS4gKi9cbiAgcmVhZG9ubHkgYXBwQ2xpZW50czogQ29nbml0b0FwcENsaWVudFNwZWNbXTtcbiAgLyoqIEVuYWJsZSBzZWxmLXNlcnZpY2Ugc2lnbi11cC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgc2VsZlNpZ25VcEVuYWJsZWQ/OiBib29sZWFuO1xuICAvKiogTUZBIGVuZm9yY2VtZW50LiBAZGVmYXVsdCBSRVFVSVJFRCAqL1xuICByZWFkb25seSBtZmE/OiBjb2duaXRvLk1mYTtcbiAgLyoqIFNlY29uZCBmYWN0b3JzLiBAZGVmYXVsdCB7IG90cDogdHJ1ZSwgc21zOiBmYWxzZSB9ICovXG4gIHJlYWRvbmx5IG1mYVNlY29uZEZhY3Rvcj86IGNvZ25pdG8uTWZhU2Vjb25kRmFjdG9yO1xuICAvKiogUGFzc3dvcmQgcG9saWN5LiBAZGVmYXVsdCBtaW5MZW5ndGggMTIsIHVwcGVyL2xvd2VyL2RpZ2l0cy9zeW1ib2xzLiAqL1xuICByZWFkb25seSBwYXNzd29yZFBvbGljeT86IGNvZ25pdG8uUGFzc3dvcmRQb2xpY3k7XG4gIC8qKiBBZHZhbmNlZCBzZWN1cml0eSBtb2RlICh0aHJlYXQgcHJvdGVjdGlvbikuIEBkZWZhdWx0IE9GRiAqL1xuICByZWFkb25seSBhZHZhbmNlZFNlY3VyaXR5TW9kZT86IGNvZ25pdG8uQWR2YW5jZWRTZWN1cml0eU1vZGU7XG4gIC8qKiBTdGFuZGFyZCBhdHRyaWJ1dGVzIGNvbmZpZy4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRBdHRyaWJ1dGVzPzogY29nbml0by5TdGFuZGFyZEF0dHJpYnV0ZXM7XG4gIC8qKiBDdXN0b20gYXR0cmlidXRlcy4gKi9cbiAgcmVhZG9ubHkgY3VzdG9tQXR0cmlidXRlcz86IHsgW2tleTogc3RyaW5nXTogY29nbml0by5JQ3VzdG9tQXR0cmlidXRlIH07XG4gIC8qKiBFbmFibGUgdGhlIENVU1RPTV9BVVRIIGZsb3cgb24gYXBwIGNsaWVudHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUN1c3RvbUF1dGhGbG93PzogYm9vbGVhbjtcbiAgLyoqIEFjY2VzcyB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMSBob3VyICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Rva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogSUQgdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDEgaG91ciAqL1xuICByZWFkb25seSBpZFRva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogUmVmcmVzaCB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMzAgZGF5cyAqL1xuICByZWFkb25seSByZWZyZXNoVG9rZW5WYWxpZGl0eT86IGNvcmUuRHVyYXRpb247XG4gIC8qKiBDb2duaXRvIGdyb3VwcyB0byBjcmVhdGUuICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHJlLXRva2VuLWdlbmVyYXRpb24gTGFtYmRhIChWMikuIEBkZWZhdWx0IGEgYnVuZGxlZCBuby1vcCBsaWJyYXJ5IExhbWJkYSBpc1xuICAgKiBjcmVhdGVkLiBQYXNzIHlvdXIgb3duIHRvIGN1c3RvbWlzZSBlbWl0dGVkIGNsYWltcy5cbiAgICovXG4gIHJlYWRvbmx5IHByZVRva2VuR2VuZXJhdGlvbkxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBFbmFibGUgZW1haWwgb25lLXRpbWUtcGFzc3dvcmQgKGBFTUFJTF9PVFBgKSBhcyB0aGUgTUZBIHNlY29uZCBmYWN0b3IsIGRlbGl2ZXJlZFxuICAgKiBieSB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9LiBUaGlzIGlzIHNldCB2aWEgYW4gTDEgb3ZlcnJpZGUgb24gdGhlXG4gICAqIHVuZGVybHlpbmcgYENmblVzZXJQb29sYCAoYEVuYWJsZWRNZmFzOiBbJ0VNQUlMX09UUCddYCkgcmF0aGVyIHRoYW5cbiAgICogYG1mYVNlY29uZEZhY3Rvci5lbWFpbGAsIGJlY2F1c2UgdGhlIENESyBMMiByZXF1aXJlcyBhIG1hbmFnZWQgKGBERVZFTE9QRVJgKSBTRVNcbiAgICogYGVtYWlsYCBjb25maWcgZm9yIGBtZmFTZWNvbmRGYWN0b3IuZW1haWxgIOKAlCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhXG4gICAqIGN1c3RvbS1lbWFpbC1zZW5kZXItb25seSBkZWxpdmVyeSBwYXRoLiBSZXF1aXJlcyB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9XG4gICAqIGFuZCB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fSwgYW5kIGEgcG9vbCBmZWF0dXJlIHBsYW4gb2YgRXNzZW50aWFscyBvciBoaWdoZXIuXG4gICAqIFdoZW4gdHJ1ZSwgYW55IGBvdHBgL2BzbXNgIGluIHtAbGluayBtZmFTZWNvbmRGYWN0b3J9IGlzIGlnbm9yZWQg4oCUIEVNQUlMX09UUCBpc1xuICAgKiB0aGUgc29sZSBmYWN0b3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbWFpbE90cE1mYT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gRW1haWwgU2VuZGVyIExhbWJkYS4gV2hlbiBzZXQgKHRvZ2V0aGVyIHdpdGgge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0pLFxuICAgKiBpdCBpcyB3aXJlZCB0byB0aGUgcG9vbCB2aWEgdGhlIGBDVVNUT01fRU1BSUxfU0VOREVSYCB0cmlnZ2VyIGFuZCBDb2duaXRvXG4gICAqIGRlbGl2ZXJzIGFsbCBjdXN0b21lciBlbWFpbHMgKE1GQSBjb2RlcywgdmVyaWZpY2F0aW9uLCB0ZW1wb3JhcnkgcGFzc3dvcmRzKVxuICAgKiB0aHJvdWdoIHRoaXMgTGFtYmRhIGluc3RlYWQgb2YgaXRzIGRlZmF1bHQgc2VuZGVyIG9yIGEgbWFuYWdlZCBTRVMgc2VuZGVyLlxuICAgKiBDb2duaXRvIGVuY3J5cHRzIGVhY2ggY29kZSB0byB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fTsgdGhlIExhbWJkYSBkZWNyeXB0c1xuICAgKiBpdCB3aXRoIHRoZSBBV1MgRW5jcnlwdGlvbiBTREsgYmVmb3JlIHNlbmRpbmcuIFJlcXVpcmVzIHtAbGluayBjdXN0b21TZW5kZXJLbXNLZXl9LlxuICAgKiBAZGVmYXVsdCAtIENvZ25pdG8ncyBkZWZhdWx0IGVtYWlsIGRlbGl2ZXJ5XG4gICAqL1xuICByZWFkb25seSBjdXN0b21FbWFpbFNlbmRlckxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTeW1tZXRyaWMgS01TIGtleSBDb2duaXRvIHVzZXMgdG8gZW5jcnlwdCBjb2RlcyBmb3Ige0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfS5cbiAgICogUmVxdWlyZWQgd2hlbiBhIGN1c3RvbSBlbWFpbCBzZW5kZXIgaXMgcHJvdmlkZWQ7IGlnbm9yZWQgb3RoZXJ3aXNlLiBDb2duaXRvIGlzXG4gICAqIGdyYW50ZWQgZW5jcnlwdC9kZWNyeXB0IG9uIGl0OyB0aGUgTGFtYmRhIG11c3QgYmUgc2VwYXJhdGVseSBncmFudGVkIGRlY3J5cHQuXG4gICAqIEBkZWZhdWx0IC0gbm8ga2V5IChvbmx5IHZhbGlkIHdoZW4gbm8gY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBzZXQpXG4gICAqL1xuICByZWFkb25seSBjdXN0b21TZW5kZXJLbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIEwxIGFjY291bnQtdGFrZW92ZXIgcmlzayBjb25maWd1cmF0aW9uIChyZXF1aXJlcyB7QGxpbmsgYWR2YW5jZWRTZWN1cml0eU1vZGV9XG4gICAqIEVORk9SQ0VEL0FVRElUKS4gUGFzc2VkIHRocm91Z2ggdG8gQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbj86IEFjY291bnRUYWtlb3ZlclJpc2tDb25maWc7XG4gIC8qKiBMMSBjb21wcm9taXNlZC1jcmVkZW50aWFscyByaXNrIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbj86IENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnO1xuICAvKiogT3B0aW9uYWwgaWRlbnRpdHkgcG9vbCArIEFCQUMgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWc7XG4gIC8qKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHBvb2wuIEBkZWZhdWx0IFJFVEFJTiAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY29yZS5SZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYywgcmV1c2FibGUgc2VjdXJlIENvZ25pdG8gKipjdXN0b21lcioqIHVzZXIgcG9vbCBmb3IgdGhlIGN1c3RvbS1VSVxuICogKGNsaWVudC1zaWRlIFNSUCkgYXV0aGVudGljYXRpb24gcGF0dGVybjogcHVibGljIFBLQ0UgYXBwIGNsaWVudHMsIE1GQSxcbiAqIHN0cm9uZyBwYXNzd29yZCBwb2xpY3ksIG9wdGlvbmFsIGFkdmFuY2VkLXNlY3VyaXR5IHRocmVhdCBwcm90ZWN0aW9uLFxuICogcGVyLWNsaWVudCAocGVyLWJyYW5kKSBhcHAgY2xpZW50cywgYW5kIGFuIG9wdGlvbmFsIGlkZW50aXR5IHBvb2wgd2l0aCBBQkFDLlxuICpcbiAqIFByb3Zpc2lvbnMgT05MWSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIEl0IGtub3dzIG5vdGhpbmcgYWJvdXQgQ2xvdWRGcm9udCxcbiAqIHNlc3Npb25zLCBvciBhbnkgc3BlY2lmaWMgcHJvamVjdCDigJQgcGFpciBpdCB3aXRoIGBDb2duaXRvU2Vzc2lvbkJhY2tlbmRgXG4gKiAoc2Vzc2lvbiBzdWJzdHJhdGUpIGFuZCBgQ29nbml0b0N1c3RvbVVpQXV0aGAgKGVkZ2UvQ0ROKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21lclBvb2wgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbDogY29nbml0by5Vc2VyUG9vbDtcbiAgLyoqIEFwcCBjbGllbnRzIGtleWVkIGJ5IHtAbGluayBDb2duaXRvQXBwQ2xpZW50U3BlYy5rZXl9LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnRzOiBSZWNvcmQ8c3RyaW5nLCBjb2duaXRvLlVzZXJQb29sQ2xpZW50PjtcbiAgLyoqIFRoZSBmaXJzdCBhcHAgY2xpZW50LCBmb3IgY29udmVuaWVuY2UuICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudDogY29nbml0by5Vc2VyUG9vbENsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sRG9tYWluOiBjb2duaXRvLlVzZXJQb29sRG9tYWluO1xuICAvKiogSG9zdGVkLVVJIGRvbWFpbiBVUkwsIGUuZy4gYDxwcmVmaXg+LmF1dGguPHJlZ2lvbj4uYW1hem9uY29nbml0by5jb21gLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29nbml0b0RvbWFpblVybDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogY29nbml0by5DZm5JZGVudGl0eVBvb2w7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdGVkUm9sZT86IGlhbS5Sb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9DdXN0b21lclBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmFwcENsaWVudHMgfHwgcHJvcHMuYXBwQ2xpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29nbml0b0N1c3RvbWVyUG9vbCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXBwIGNsaWVudCcpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgPT09IHVuZGVmaW5lZCkgIT09IChwcm9wcy5jdXN0b21TZW5kZXJLbXNLZXkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvZ25pdG9DdXN0b21lclBvb2w6IGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhIGFuZCBjdXN0b21TZW5kZXJLbXNLZXkgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlciDigJQgJ1xuICAgICAgICArICdhIGN1c3RvbSBlbWFpbCBzZW5kZXIgcmVxdWlyZXMgYSBLTVMga2V5IGZvciBDb2duaXRvIHRvIGVuY3J5cHQgY29kZXMgdG8sIGFuZCB0aGUga2V5IGlzIHVudXNlZCB3aXRob3V0IHRoZSBMYW1iZGEuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVtYWlsT3RwTWZhICYmICFwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogZW1haWxPdHBNZmEgcmVxdWlyZXMgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgKGFuZCBjdXN0b21TZW5kZXJLbXNLZXkpIOKAlCAnXG4gICAgICAgICsgJ0VNQUlMX09UUCBjb2RlcyBhcmUgZGVsaXZlcmVkIGJ5IHRoZSBjdXN0b20gZW1haWwgc2VuZGVyLCBzbyBlbWFpbCBNRkEgY2Fubm90IGJlIGVuYWJsZWQgd2l0aG91dCBpdC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBXaXRoIGVtYWlsT3RwTWZhLCBFTUFJTF9PVFAgaXMgdGhlIHNvbGUgZmFjdG9yIGFuZCBpcyBhcHBsaWVkIHZpYSBhbiBMMVxuICAgIC8vIG92ZXJyaWRlIGJlbG93OyBkbyBOT1QgcGFzcyBtZmFTZWNvbmRGYWN0b3IuZW1haWwgdG8gdGhlIEwyIChpdHMgdmFsaWRhdGVFbWFpbE1mYVxuICAgIC8vIGRlbWFuZHMgYSBtYW5hZ2VkIERFVkVMT1BFUiBTRVMgY29uZmlnLCB3aGljaCB0aGUgY3VzdG9tLXNlbmRlciBwYXRoIGF2b2lkcykuXG4gICAgY29uc3QgbDJNZmFTZWNvbmRGYWN0b3IgPSBwcm9wcy5lbWFpbE90cE1mYVxuICAgICAgPyB7IG90cDogZmFsc2UsIHNtczogZmFsc2UgfVxuICAgICAgOiAocHJvcHMubWZhU2Vjb25kRmFjdG9yID8/IHsgb3RwOiB0cnVlLCBzbXM6IGZhbHNlIH0pO1xuXG4gICAgdGhpcy51c2VyUG9vbCA9IG5ldyBjb2duaXRvLlVzZXJQb29sKHRoaXMsICdVc2VyUG9vbCcsIHtcbiAgICAgIHVzZXJQb29sTmFtZTogcHJvcHMudXNlclBvb2xOYW1lLFxuICAgICAgc2VsZlNpZ25VcEVuYWJsZWQ6IHByb3BzLnNlbGZTaWduVXBFbmFibGVkID8/IGZhbHNlLFxuICAgICAgc2lnbkluQWxpYXNlczogeyBlbWFpbDogdHJ1ZSB9LFxuICAgICAgc2lnbkluQ2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gICAgICBtZmE6IHByb3BzLm1mYSA/PyBjb2duaXRvLk1mYS5SRVFVSVJFRCxcbiAgICAgIG1mYVNlY29uZEZhY3RvcjogbDJNZmFTZWNvbmRGYWN0b3IsXG4gICAgICBwYXNzd29yZFBvbGljeTogcHJvcHMucGFzc3dvcmRQb2xpY3kgPz8ge1xuICAgICAgICBtaW5MZW5ndGg6IDEyLFxuICAgICAgICByZXF1aXJlTG93ZXJjYXNlOiB0cnVlLFxuICAgICAgICByZXF1aXJlVXBwZXJjYXNlOiB0cnVlLFxuICAgICAgICByZXF1aXJlRGlnaXRzOiB0cnVlLFxuICAgICAgICByZXF1aXJlU3ltYm9sczogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBhZHZhbmNlZFNlY3VyaXR5TW9kZTogcHJvcHMuYWR2YW5jZWRTZWN1cml0eU1vZGUgPz8gY29nbml0by5BZHZhbmNlZFNlY3VyaXR5TW9kZS5PRkYsXG4gICAgICBzdGFuZGFyZEF0dHJpYnV0ZXM6IHByb3BzLnN0YW5kYXJkQXR0cmlidXRlcyxcbiAgICAgIGN1c3RvbUF0dHJpYnV0ZXM6IHByb3BzLmN1c3RvbUF0dHJpYnV0ZXMsXG4gICAgICBhdXRvVmVyaWZ5OiB7IGVtYWlsOiB0cnVlIH0sXG4gICAgICBhY2NvdW50UmVjb3Zlcnk6IGNvZ25pdG8uQWNjb3VudFJlY292ZXJ5LkVNQUlMX09OTFksXG4gICAgICAvLyBDdXN0b20gRW1haWwgU2VuZGVyOiB3aGVuIHByb3ZpZGVkLCBDb2duaXRvIHJvdXRlcyBldmVyeSBjdXN0b21lciBlbWFpbFxuICAgICAgLy8gdGhyb3VnaCB0aGlzIExhbWJkYSBhbmQgZW5jcnlwdHMgY29kZXMgdG8gY3VzdG9tU2VuZGVyS21zS2V5LiBCb3RoIG11c3QgYmVcbiAgICAgIC8vIHNldCBvbiB0aGUgcG9vbCBhdCBjb25zdHJ1Y3Rpb24g4oCUIHRoZSBLTVMga2V5IGlzIG5vdCBzZXR0YWJsZSB2aWEgYWRkVHJpZ2dlci5cbiAgICAgIGN1c3RvbVNlbmRlckttc0tleTogcHJvcHMuY3VzdG9tU2VuZGVyS21zS2V5LFxuICAgICAgbGFtYmRhVHJpZ2dlcnM6IHByb3BzLmN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhXG4gICAgICAgID8geyBjdXN0b21FbWFpbFNlbmRlcjogcHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICB9KTtcblxuICAgIC8vIEwxIGVzY2FwZSBoYXRjaDogZW5hYmxlIEVNQUlMX09UUCBhcyB0aGUgb25seSBNRkEgZmFjdG9yLiBUaGUgTDIgY2Fubm90IGV4cHJlc3NcbiAgICAvLyBcImVtYWlsIE1GQSBkZWxpdmVyZWQgc29sZWx5IGJ5IGEgY3VzdG9tIHNlbmRlclwiIChzZWUgZW1haWxPdHBNZmEgZG9jcyksIHNvIHNldFxuICAgIC8vIEVuYWJsZWRNZmFzIGRpcmVjdGx5IG9uIHRoZSB1bmRlcmx5aW5nIENmblVzZXJQb29sLiBUaGUgY3VzdG9tIGVtYWlsIHNlbmRlclxuICAgIC8vIGRlbGl2ZXJzIHRoZSBjb2RlOyBubyBtYW5hZ2VkIFNFUyBlbWFpbCBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLlxuICAgIGlmIChwcm9wcy5lbWFpbE90cE1mYSkge1xuICAgICAgY29uc3QgY2ZuUG9vbCA9IHRoaXMudXNlclBvb2wubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29nbml0by5DZm5Vc2VyUG9vbDtcbiAgICAgIGNmblBvb2wuZW5hYmxlZE1mYXMgPSBbJ0VNQUlMX09UUCddO1xuICAgIH1cblxuICAgIGNvbnN0IHByZVRva2VuTGFtYmRhID0gcHJvcHMucHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhID8/IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ1ByZVRva2VuTGFtYmRhJywge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTIsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9wcmUtdG9rZW4nKSksXG4gICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgfSk7XG4gICAgdGhpcy51c2VyUG9vbC5hZGRUcmlnZ2VyKGNvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uUFJFX1RPS0VOX0dFTkVSQVRJT05fQ09ORklHLCBwcmVUb2tlbkxhbWJkYSwgY29nbml0by5MYW1iZGFWZXJzaW9uLlYyXzApO1xuXG4gICAgaWYgKHByb3BzLmdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBwcm9wcy5ncm91cHMpIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCBgR3JvdXAke2dyb3VwfWAsIHtcbiAgICAgICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWwgYWR2YW5jZWQtc2VjdXJpdHkgcmlzayBjb25maWd1cmF0aW9uIChMMSkuXG4gICAgaWYgKHByb3BzLmFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uIHx8IHByb3BzLmNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbikge1xuICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQodGhpcywgJ1Jpc2tDb25maWcnLCB7XG4gICAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgY2xpZW50SWQ6ICdBTEwnLFxuICAgICAgICBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyUG9vbENsaWVudHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHNwZWMgb2YgcHJvcHMuYXBwQ2xpZW50cykge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGNvZ25pdG8uVXNlclBvb2xDbGllbnQodGhpcywgYENsaWVudCR7c3BlYy5rZXl9YCwge1xuICAgICAgICB1c2VyUG9vbDogdGhpcy51c2VyUG9vbCxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHNwZWMuZ2VuZXJhdGVTZWNyZXQgPz8gZmFsc2UsXG4gICAgICAgIGF1dGhGbG93czoge1xuICAgICAgICAgIHVzZXJTcnA6IHRydWUsXG4gICAgICAgICAgY3VzdG9tOiBwcm9wcy5lbmFibGVDdXN0b21BdXRoRmxvdyA/PyBmYWxzZSxcbiAgICAgICAgICAvLyB1c2VyUGFzc3dvcmQgLyBhZG1pblVzZXJQYXNzd29yZCBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKGRpc2FibGVkKS5cbiAgICAgICAgfSxcbiAgICAgICAgb0F1dGg6IHtcbiAgICAgICAgICBmbG93czogeyBhdXRob3JpemF0aW9uQ29kZUdyYW50OiB0cnVlIH0sXG4gICAgICAgICAgc2NvcGVzOiBbY29nbml0by5PQXV0aFNjb3BlLk9QRU5JRCwgY29nbml0by5PQXV0aFNjb3BlLkVNQUlMLCBjb2duaXRvLk9BdXRoU2NvcGUuUFJPRklMRV0sXG4gICAgICAgICAgY2FsbGJhY2tVcmxzOiBzcGVjLmNhbGxiYWNrVXJscyxcbiAgICAgICAgICBsb2dvdXRVcmxzOiBzcGVjLmxvZ291dFVybHMsXG4gICAgICAgIH0sXG4gICAgICAgIHN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzOiBzcGVjLnN1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzID8/IFtjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlci5DT0dOSVRPXSxcbiAgICAgICAgcHJldmVudFVzZXJFeGlzdGVuY2VFcnJvcnM6IHRydWUsXG4gICAgICAgIGVuYWJsZVRva2VuUmV2b2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgYWNjZXNzVG9rZW5WYWxpZGl0eTogcHJvcHMuYWNjZXNzVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmhvdXJzKDEpLFxuICAgICAgICBpZFRva2VuVmFsaWRpdHk6IHByb3BzLmlkVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmhvdXJzKDEpLFxuICAgICAgICByZWZyZXNoVG9rZW5WYWxpZGl0eTogcHJvcHMucmVmcmVzaFRva2VuVmFsaWRpdHkgPz8gY29yZS5EdXJhdGlvbi5kYXlzKDMwKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VyUG9vbENsaWVudHNbc3BlYy5rZXldID0gY2xpZW50O1xuICAgIH1cbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gdGhpcy51c2VyUG9vbENsaWVudHNbcHJvcHMuYXBwQ2xpZW50c1swXS5rZXldO1xuXG4gICAgdGhpcy51c2VyUG9vbERvbWFpbiA9IHRoaXMudXNlclBvb2wuYWRkRG9tYWluKCdDb2duaXRvRG9tYWluJywge1xuICAgICAgY29nbml0b0RvbWFpbjogeyBkb21haW5QcmVmaXg6IHByb3BzLmNvZ25pdG9Eb21haW5QcmVmaXggfSxcbiAgICB9KTtcbiAgICB0aGlzLmNvZ25pdG9Eb21haW5VcmwgPSBgJHtwcm9wcy5jb2duaXRvRG9tYWluUHJlZml4fS5hdXRoLiR7Y29yZS5TdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmNvZ25pdG8uY29tYDtcblxuICAgIGlmIChwcm9wcy5pZGVudGl0eVBvb2wpIHtcbiAgICAgIGNvbnN0IGlkcCA9IHByb3BzLmlkZW50aXR5UG9vbDtcbiAgICAgIHRoaXMuaWRlbnRpdHlQb29sID0gbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sKHRoaXMsICdJZGVudGl0eVBvb2wnLCB7XG4gICAgICAgIGFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllczogaWRwLmFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcyA/PyBmYWxzZSxcbiAgICAgICAgY29nbml0b0lkZW50aXR5UHJvdmlkZXJzOiBwcm9wcy5hcHBDbGllbnRzLm1hcChzcGVjID0+ICh7XG4gICAgICAgICAgY2xpZW50SWQ6IHRoaXMudXNlclBvb2xDbGllbnRzW3NwZWMua2V5XS51c2VyUG9vbENsaWVudElkLFxuICAgICAgICAgIHByb3ZpZGVyTmFtZTogdGhpcy51c2VyUG9vbC51c2VyUG9vbFByb3ZpZGVyTmFtZSxcbiAgICAgICAgICBzZXJ2ZXJTaWRlVG9rZW5DaGVjazogdHJ1ZSxcbiAgICAgICAgfSkpLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYXV0aGVudGljYXRlZFJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0F1dGhlbnRpY2F0ZWRSb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uRmVkZXJhdGVkUHJpbmNpcGFsKFxuICAgICAgICAgICdjb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICdTdHJpbmdFcXVhbHMnOiB7ICdjb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb206YXVkJzogdGhpcy5pZGVudGl0eVBvb2wucmVmIH0sXG4gICAgICAgICAgICAnRm9yQW55VmFsdWU6U3RyaW5nTGlrZSc6IHsgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbTphbXInOiAnYXV0aGVudGljYXRlZCcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdzdHM6QXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eScsXG4gICAgICAgICksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogaWRwLmF1dGhlbnRpY2F0ZWRSb2xlTWFuYWdlZFBvbGljaWVzLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBjb2duaXRvLkNmbklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50KHRoaXMsICdJZGVudGl0eVBvb2xSb2xlcycsIHtcbiAgICAgICAgaWRlbnRpdHlQb29sSWQ6IHRoaXMuaWRlbnRpdHlQb29sLnJlZixcbiAgICAgICAgcm9sZXM6IHsgYXV0aGVudGljYXRlZDogdGhpcy5hdXRoZW50aWNhdGVkUm9sZS5yb2xlQXJuIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gQUJBQzogbWFwIGNsYWltcyB0byBwcmluY2lwYWwgdGFncyBvbiB0aGUgdXNlci1wb29sIHByb3ZpZGVyLlxuICAgICAgaWYgKGlkcC5wcmluY2lwYWxUYWdzICYmIE9iamVjdC5rZXlzKGlkcC5wcmluY2lwYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ldyBjb2duaXRvLkNmbklkZW50aXR5UG9vbFByaW5jaXBhbFRhZyh0aGlzLCAnUHJpbmNpcGFsVGFncycsIHtcbiAgICAgICAgICBpZGVudGl0eVBvb2xJZDogdGhpcy5pZGVudGl0eVBvb2wucmVmLFxuICAgICAgICAgIGlkZW50aXR5UHJvdmlkZXJOYW1lOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sUHJvdmlkZXJOYW1lLFxuICAgICAgICAgIHVzZURlZmF1bHRzOiBmYWxzZSxcbiAgICAgICAgICBwcmluY2lwYWxUYWdzOiBpZHAucHJpbmNpcGFsVGFncyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -655,7 +655,19 @@ def get_config():
655
655
  code = code.replace(/HEADER_INJECTION_KEYS_PLACEHOLDER/g, '[]');
656
656
  }
657
657
  code = code.replace(/ENABLE_REFRESH_PLACEHOLDER/g, String(this.enableRefreshEndpoint));
658
- return code;
658
+ // Minify to stay under CloudFront's 10KB function-size limit. terser cannot
659
+ // parse the ES `import` in script mode, and CloudFront needs the import,
660
+ // `var crypto = require('crypto')`, and `const kvsHandle = cf.kvs()` at the
661
+ // top level, so extract that preamble, minify the body, and prepend it back —
662
+ // the same shape FunctionComposer.compose() uses.
663
+ const cfImport = "import cf from 'cloudfront';\n";
664
+ const cryptoRequire = "var crypto = require('crypto');\n";
665
+ const kvsDecl = 'const kvsHandle = cf.kvs();\n';
666
+ const body = code
667
+ .replace(/import cf from 'cloudfront';\s*/g, '')
668
+ .replace(/var crypto = require\('crypto'\);\s*/g, '')
669
+ .replace(/const kvsHandle = cf\.kvs\(\);\s*/g, '');
670
+ return cfImport + cryptoRequire + kvsDecl + (0, function_composer_1.minifyFunctionCode)(body);
659
671
  }
660
672
  loadAndReplaceUserInfoCode(nameFields) {
661
673
  const codePath = path.join(__dirname, '../cloudfront-functions/userinfo-endpoint.js');
@@ -667,4 +679,4 @@ def get_config():
667
679
  }
668
680
  }
669
681
  exports.SecuredCloudFront = SecuredCloudFront;
670
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlZENsb3VkRnJvbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xvdWRmcm9udC9wYXR0ZXJucy9zZWN1cmVkQ2xvdWRGcm9udC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0RBQW9DO0FBQ3BDLDZDQVFxQjtBQUNyQix1REFBeUM7QUFFekMsaUZBQTZFO0FBRTdFOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsZUFBdUI7SUFDbEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTdCLDJEQUEyRDtJQUMzRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9DLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElB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LElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUN2RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxVQUFvQjtRQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTlDLHdEQUF3RDtRQUN4RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUNqQiw0Q0FBNEMsRUFDNUMsb0JBQW9CLGNBQWMsR0FBRyxDQUN0QyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUE1cUJELDhDQTRxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jbG91ZGZyb250IGFzIGNsb3VkZnJvbnQsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX2ttcyBhcyBrbXMsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc3NtIGFzIHNzbSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEF1dGhTZWN1cml0eVRhYmxlIH0gZnJvbSAnLi4vYXV0aFNlY3VyaXR5VGFibGUnO1xuaW1wb3J0IHsgRnVuY3Rpb25Db21wb3NlciB9IGZyb20gJy4uL2Nsb3VkZnJvbnQtZnVuY3Rpb25zL2Z1bmN0aW9uLWNvbXBvc2VyJztcblxuLyoqXG4gKiBDb21wdXRlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIGZvciBhIExhbWJkYSBhc3NldCBidW5kbGUgYmFzZWQgb24gc291cmNlXG4gKiBkaXJlY3RvcnkgY29udGVudHMgYW5kIGdlbmVyYXRlZCBjb25maWcuIFRoaXMgcHJldmVudHMgc3B1cmlvdXMgTGFtYmRhXG4gKiB2ZXJzaW9uIHJvdGF0aW9ucyBvbiBldmVyeSBDREsgc3ludGguXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBc3NldEhhc2goc291cmNlRGlyOiBzdHJpbmcsIGdlbmVyYXRlZENvbmZpZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoZ2VuZXJhdGVkQ29uZmlnKTtcblxuICAvLyBIYXNoIGFsbCBzb3VyY2UgZmlsZXMgZGV0ZXJtaW5pc3RpY2FsbHkgKHNvcnRlZCBieSBuYW1lKVxuICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHNvdXJjZURpcikuc29ydCgpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihzb3VyY2VEaXIsIGZpbGUpO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgIGhhc2gudXBkYXRlKGZpbGUpO1xuICAgICAgaGFzaC51cGRhdGUoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW5jbHVkZSBwcmUtYnVuZGxlZCBkZXBzIGhhc2ggaWYgdGhleSBleGlzdFxuICBjb25zdCBidW5kbGVkRGVwc0RpciA9IHBhdGguam9pbihzb3VyY2VEaXIsICcuLi8uLi9sYW1iZGEtYnVuZGxlZCcsIHBhdGguYmFzZW5hbWUoc291cmNlRGlyKSk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGJ1bmRsZWREZXBzRGlyKSkge1xuICAgIGNvbnN0IGRlcEZpbGVzID0gZnMucmVhZGRpclN5bmMoYnVuZGxlZERlcHNEaXIpLnNvcnQoKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZGVwRmlsZXMpIHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGJ1bmRsZWREZXBzRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgICBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShgZGVwOiR7ZmlsZX1gKTtcbiAgICAgICAgaGFzaC51cGRhdGUoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc2guZGlnZXN0KCdoZXgnKTtcbn1cblxuZXhwb3J0IGVudW0gRXh0ZW5zaW9uIHtcbiAgUkVRVUlSRV9BVVRIID0gJ1JFUVVJUkVfQVVUSCcsXG4gIFJFUVVJUkVfVExTXzEzID0gJ1JFUVVJUkVfVExTXzEzJyxcbiAgUkVXUklURV9UT19JTkRFWF9IVE1MID0gJ1JFV1JJVEVfVE9fSU5ERVhfSFRNTCcsXG59XG5cbmV4cG9ydCBlbnVtIFJvbGVNYXRjaE1vZGUge1xuICBPUiA9ICdPUicsXG4gIEFORCA9ICdBTkQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbkNvbmZpZzxUUm9sZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICByZWFkb25seSByZXF1aXJlZFJvbGVzPzogcmVhZG9ubHkgVFJvbGVbXTtcbiAgcmVhZG9ubHkgcm9sZU1hdGNoTW9kZT86IFJvbGVNYXRjaE1vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQmVoYXZpb3JPcHRpb25zPFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXTtcbiAgcmVhZG9ubHkgZXh0ZW5zaW9uQ29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPjtcbiAgcmVhZG9ubHkgYmVoYXZpb3JPcHRpb25zPzogT21pdDxjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucywgJ29yaWdpbic+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRXaXRoQXp1cmVBdXRoU3BsaXRQcm9wczxUUm9sZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICByZWFkb25seSBkZWZhdWx0QmVoYXZpb3I6IGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgT21pdDxjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucywgJ2VkZ2VMYW1iZGFzJz4+O1xuICByZWFkb25seSBkb21haW5OYW1lczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlOiBhbnk7XG4gIHJlYWRvbmx5IHJlZGlyZWN0VXJpPzogc3RyaW5nO1xuICByZWFkb25seSBjb29raWVEb21haW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xuICByZWFkb25seSBobWFjU2VjcmV0Um90YXRpb25TY2hlZHVsZT86IGNvcmUuRHVyYXRpb247XG4gIHJlYWRvbmx5IHNlY3VyaXR5QWxlcnRzVG9waWNBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlc3Npb25SZXZvY2F0aW9uVG9waWNBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dG9SZXZva2VPblJldXNlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgand0Q2xhaW1zV2hpdGVsaXN0Pzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGF1ZGl0TG9nUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgYXVkaXRBcmNoaXZlUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgYXV0aFNzbVBhcmFtUHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dGhSZWdpb246IHN0cmluZztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBjb25maWcgc2VjcmV0IG5hbWUgdGhhdCB0aGUgT0F1dGggY2FsbGJhY2sgLyBsb2dvdXQgLyByZWZyZXNoXG4gICAqIExhbWJkYXMgcmVhZC4gRGVmYXVsdHMgdG8gYGNsb3VkZnJvbnQtYXV0aC1jb25maWctJHtkb21haW5OYW1lc1swXX1gLlxuICAgKiBTZXQgdGhpcyB3aGVuIHRoZSBBdXRoSW5mcmFzdHJ1Y3R1cmUgY3JlYXRlZCB0aGUgY29uZmlnIHNlY3JldCB1bmRlciBhXG4gICAqIGRpZmZlcmVudCBuYW1lIChlLmcuIGEgc2hhcmVkIHpvbmUgbmFtZSB0aGF0IHNlcnZlcyBtdWx0aXBsZSBzdWJkb21haW5zKS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhDb25maWdTZWNyZXROYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjcmVhdGVPQXV0aENhbGxiYWNrPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXTtcbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbkNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT47XG4gIHJlYWRvbmx5IGRlZmF1bHRSb290T2JqZWN0Pzogc3RyaW5nO1xuICByZWFkb25seSBlcnJvclJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIGFkZCBjdXN0b20gZXJyb3IgcmVzcG9uc2VzIChTUEEgcm91dGluZykuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICByZWFkb25seSBlbmFibGVFcnJvclJlc3BvbnNlcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuYWJsZVVzZXJJbmZvSW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlckluZm9OYW1lRmllbGRzPzogc3RyaW5nW107XG4gIC8qKiBFbmFibGUgQ2xvdWRGcm9udCBzdGFuZGFyZCBhY2Nlc3MgbG9nZ2luZy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQWNjZXNzTG9nZ2luZz86IGJvb2xlYW47XG4gIC8qKiBTMyBidWNrZXQgZm9yIGFjY2VzcyBsb2dzLiBJZiBub3QgcHJvdmlkZWQsIGEgYnVja2V0IHdpbGwgYmUgY3JlYXRlZC4gQGRlZmF1bHQgYXV0by1jcmVhdGVkIGJ1Y2tldCAqL1xuICByZWFkb25seSBhY2Nlc3NMb2dCdWNrZXQ/OiBzMy5JQnVja2V0O1xuICAvKiogUHJlZml4IGZvciBhY2Nlc3MgbG9nIGZpbGVzLiBAZGVmYXVsdCAnY2RuLWxvZ3MvJyAqL1xuICByZWFkb25seSBhY2Nlc3NMb2dQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgYWNjZXNzIGxvZ3MgdHJhbnNpdGlvbiB0byBJbmZyZXF1ZW50IEFjY2Vzcy4gQGRlZmF1bHQgMzAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzTG9nVHJhbnNpdGlvbkRheXM/OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgYWNjZXNzIGxvZ3MgYXJlIGRlbGV0ZWQuIEBkZWZhdWx0IDM2NSAqL1xuICByZWFkb25seSBhY2Nlc3NMb2dFeHBpcmF0aW9uRGF5cz86IG51bWJlcjtcbiAgLyoqIFJlcXVpcmUgTUZBIChhbXIgY2xhaW0gbXVzdCBjb250YWluICdtZmEnKS4gRGVmZW5jZSBpbiBkZXB0aCDigJQgcHJpbWFyeSBlbmZvcmNlbWVudCBzaG91bGQgYmUgdmlhIEVudHJhIENvbmRpdGlvbmFsIEFjY2Vzcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZU1mYT86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc3RyaXBwaW5nIGFuZCBpbmplY3Rpb24gb2YgaWRlbnRpdHkgY2xhaW0gaGVhZGVycyBvbiBvcmlnaW4tYm91bmQgcmVxdWVzdHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUhlYWRlckluamVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBNYXAgb2YgSFRUUCBoZWFkZXIgbmFtZSB0byBKV1QgY2xhaW0ga2V5IGZvciBoZWFkZXIgaW5qZWN0aW9uLiBPbmx5IHVzZWQgd2hlbiBlbmFibGVIZWFkZXJJbmplY3Rpb24gaXMgdHJ1ZS4gZS5nLiB7ICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJywgJ3gtY3VzdG9tZXItZW1haWwnOiAnZW1haWwnIH0gKi9cbiAgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEVuYWJsZSB0aGUgL29hdXRoMi9yZWZyZXNoIGVuZHBvaW50IGZvciBzaWxlbnQgdG9rZW4gcmVuZXdhbC4gV2hlbiB0cnVlLCBleHBpcmVkLWJ1dC12YWxpZCB0b2tlbnMgcmVkaXJlY3QgdG8gcmVmcmVzaCBpbnN0ZWFkIG9mIEVudHJhIGxvZ2luLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVSZWZyZXNoRW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHRoZSAvb2F1dGgyL2xvZ291dCBlbmRwb2ludCBmb3IgZXhwbGljaXQgc2Vzc2lvbiB0ZXJtaW5hdGlvbi4gV2hlbiB0cnVlLCBkZXBsb3lzIGEgTG9nb3V0IExhbWJkYSB0aGF0IGNsZWFycyBjb29raWVzLCByZXZva2VzIHRoZSBzZXNzaW9uLCBhbmQgcmVkaXJlY3RzIHRvIEVudHJhIC9sb2dvdXQuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUxvZ291dEVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqIFVSTCBmb3IgdGhlIHBvc3QtYXV0aCBpZGVudGl0eSBob29rLiBDYWxsZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCB0b2tlbiBleGNoYW5nZSB0byByZXNvbHZlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNsYWltcyAoZS5nLiwgY3VzdG9tZXJfaWQpLiBNdXN0IGJlIGFuIGludGVybmFsIFVSTCAoQUxCL0xhbWJkYSkuIEBkZWZhdWx0IHVuZGVmaW5lZCAobm8gaG9vaykgKi9cbiAgcmVhZG9ubHkgcG9zdEF1dGhIb29rVXJsPzogc3RyaW5nO1xuICAvKiogVGltZW91dCBpbiBzZWNvbmRzIGZvciB0aGUgcG9zdC1hdXRoIGlkZW50aXR5IGhvb2sgY2FsbC4gQGRlZmF1bHQgMyAqL1xuICByZWFkb25seSBwb3N0QXV0aEhvb2tUaW1lb3V0PzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBmYWlsIGNsb3NlZCAoZGVueSBhdXRoKSBpZiB0aGUgcG9zdC1hdXRoIGhvb2sgcmV0dXJucyBhbiBlcnJvciBvciBpcyB1bmF2YWlsYWJsZS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBwb3N0QXV0aEhvb2tGYWlsQ2xvc2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZWRDbG91ZEZyb250PFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZ1NlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldEFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkga21zS2V5OiBrbXMuSUtleTtcbiAgcHVibGljIHJlYWRvbmx5IGF1dGhTZWN1cml0eVRhYmxlOiBBdXRoU2VjdXJpdHlUYWJsZTtcbiAgcHVibGljIHJlYWRvbmx5IGF1ZGl0TG9nQXJjaGl2ZTogYW55O1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRWRnZVJvbGU6IGlhbS5Sb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjZXNzTG9nQnVja2V0PzogczMuSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoQ2hlY2tGdW5jdGlvbjogY2xvdWRmcm9udC5GdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VySW5mb0Z1bmN0aW9uPzogY2xvdWRmcm9udC5GdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBmdW5jdGlvbkNvbXBvc2VyOiBGdW5jdGlvbkNvbXBvc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VkRnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBjbG91ZGZyb250LkZ1bmN0aW9uPjtcbiAgcHJpdmF0ZSBsYXN0Q3JlYXRlZEZ1bmN0aW9uOiBjbG91ZGZyb250LkZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IHRsc09yaWdpblJlcXVlc3RQb2xpY3k6IGNsb3VkZnJvbnQuT3JpZ2luUmVxdWVzdFBvbGljeTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW5hbnRJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudElkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb29raWVEb21haW46IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBrdnM6IGNsb3VkZnJvbnQuSUtleVZhbHVlU3RvcmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZU1mYTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb246IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVJlZnJlc2hFbmRwb2ludDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250V2l0aEF6dXJlQXV0aFNwbGl0UHJvcHM8VFJvbGU+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5kZXRlcm1pbmVSZWRpcmVjdFVyaShwcm9wcy5yZWRpcmVjdFVyaSwgcHJvcHMuZG9tYWluTmFtZXMpO1xuXG4gICAgY29uc3QgcCA9IHByb3BzLmF1dGhTc21QYXJhbVByZWZpeDtcbiAgICBjb25zdCBjb25maWdTZWNyZXRBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2NvbmZpZ1NlY3JldEFybmApO1xuICAgIGNvbnN0IGttc0tleUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0va21zS2V5QXJuYCk7XG4gICAgY29uc3QgYXV0aFRhYmxlQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9hdXRoVGFibGVBcm5gKTtcbiAgICBjb25zdCBrdnNBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2t2c0FybmApO1xuICAgIGNvbnN0IHRlbmFudElkID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS90ZW5hbnRJZGApO1xuICAgIGNvbnN0IGNsaWVudElkID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9jbGllbnRJZGApO1xuICAgIGNvbnN0IG9hdXRoMkNhbGxiYWNrUm9sZU5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L29hdXRoMkNhbGxiYWNrUm9sZU5hbWVgKTtcblxuICAgIHRoaXMuY29uZmlnU2VjcmV0ID0gc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXRDb21wbGV0ZUFybih0aGlzLCAnSW1wb3J0ZWRTZWNyZXQnLCBjb25maWdTZWNyZXRBcm4pO1xuICAgIHRoaXMua21zS2V5ID0ga21zLktleS5mcm9tS2V5QXJuKHRoaXMsICdJbXBvcnRlZEtleScsIGttc0tleUFybik7XG4gICAgdGhpcy5hdXRoU2VjdXJpdHlUYWJsZSA9IHsgdGFibGU6IHsgdGFibGVBcm46IGF1dGhUYWJsZUFybiB9IH0gYXMgYW55O1xuICAgIHRoaXMuYXVkaXRMb2dBcmNoaXZlID0gbnVsbDtcbiAgICB0aGlzLnNlY3JldEFybiA9IGNvbmZpZ1NlY3JldEFybjtcblxuICAgIHRoaXMubGFtYmRhRWRnZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0xhbWJkYUVkZ2VSb2xlJywge1xuICAgICAgcm9sZU5hbWU6IG9hdXRoMkNhbGxiYWNrUm9sZU5hbWUsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWRnZWxhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIHdlIG5lZWQgdG8gYWRkIHRoZXNlIGRpcmVjdGx5LCByYXRoZXIgdGhhbiB1c2UgZ3JhbnQgbWV0aG9kcywgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kbmFjaWVzLlxuICAgIHRoaXMubGFtYmRhRWRnZVJvbGUuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsICdzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldCddLFxuICAgICAgcmVzb3VyY2VzOiBbY29uZmlnU2VjcmV0QXJuXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLmxhbWJkYUVkZ2VSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgIHJlc291cmNlczogW2ttc0tleUFybl0sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5sYW1iZGFFZGdlUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2R5bmFtb2RiOkdldEl0ZW0nLCAnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpRdWVyeScsICdkeW5hbW9kYjpTY2FuJywgJ2R5bmFtb2RiOlVwZGF0ZUl0ZW0nLCAnZHluYW1vZGI6RGVsZXRlSXRlbSddLFxuICAgICAgcmVzb3VyY2VzOiBbYXV0aFRhYmxlQXJuXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLmxhbWJkYUVkZ2VSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc3RzOkdldFdlYklkZW50aXR5VG9rZW4nXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5sYW1iZGFFZGdlUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2Nsb3VkZnJvbnQta2V5dmFsdWVzdG9yZTpQdXRLZXknLCAnY2xvdWRmcm9udC1rZXl2YWx1ZXN0b3JlOkRlc2NyaWJlS2V5VmFsdWVTdG9yZSddLFxuICAgICAgcmVzb3VyY2VzOiBba3ZzQXJuXSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBrdnMgPSBjbG91ZGZyb250LktleVZhbHVlU3RvcmUuZnJvbUtleVZhbHVlU3RvcmVBcm4odGhpcywgJ0tWUycsIGt2c0Fybik7XG4gICAgdGhpcy5rdnMgPSBrdnM7XG4gICAgdGhpcy50ZW5hbnRJZCA9IHRlbmFudElkO1xuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICB0aGlzLnJlZGlyZWN0VXJpID0gcmVkaXJlY3RVcmk7XG4gICAgdGhpcy5jb29raWVEb21haW4gPSBwcm9wcy5jb29raWVEb21haW4gfHwgJyc7XG4gICAgdGhpcy5yZXF1aXJlTWZhID0gcHJvcHMucmVxdWlyZU1mYSA/PyBmYWxzZTtcbiAgICB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbiA9IHByb3BzLmVuYWJsZUhlYWRlckluamVjdGlvbiA/PyBmYWxzZTtcbiAgICB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyA9IHByb3BzLmhlYWRlckluamVjdGlvbkNsYWltcyA/PyB7fTtcbiAgICB0aGlzLmVuYWJsZVJlZnJlc2hFbmRwb2ludCA9IHByb3BzLmVuYWJsZVJlZnJlc2hFbmRwb2ludCA/PyBmYWxzZTtcblxuICAgIGNvbnN0IGNvbmZpZ1B5Q29udGVudCA9IGAjIEdlbmVyYXRlZCBjb25maWd1cmF0aW9uXG5pbXBvcnQganNvblxuaW1wb3J0IGJvdG8zXG5pbXBvcnQgb3NcbmltcG9ydCBsb2dnaW5nXG5cbmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKClcblxuIyBTZWNyZXQgbmFtZSBhbmQgcmVnaW9uIC0gdGhlc2UgbXVzdCBiZSBjb25jcmV0ZSB2YWx1ZXMsIG5vdCBDbG91ZEZvcm1hdGlvbiB0b2tlbnNcbiMgVGhlIHNlY3JldCBuYW1lIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGRvbWFpbiBuYW1lXG5DT05GSUdfU0VDUkVUX05BTUUgPSAnJHtwcm9wcy5hdXRoQ29uZmlnU2VjcmV0TmFtZSA/PyBgY2xvdWRmcm9udC1hdXRoLWNvbmZpZy0ke3Byb3BzLmRvbWFpbk5hbWVzWzBdfWB9J1xuQ09ORklHX1JFR0lPTiA9ICcke3Byb3BzLmF1dGhSZWdpb259J1xuXG5kZWYgZ2V0X2NvbmZpZygpOlxuICAgIGxvZ2dlci5pbmZvKGYnQXR0ZW1wdGluZyB0byBsb2FkIGNvbmZpZyBmcm9tIFNlY3JldHMgTWFuYWdlcicpXG4gICAgbG9nZ2VyLmluZm8oZidDT05GSUdfU0VDUkVUX05BTUU6IHtDT05GSUdfU0VDUkVUX05BTUV9JylcbiAgICBsb2dnZXIuaW5mbyhmJ0NPTkZJR19SRUdJT046IHtDT05GSUdfUkVHSU9OfScpXG4gICAgdHJ5OlxuICAgICAgICBjbGllbnQgPSBib3RvMy5jbGllbnQoJ3NlY3JldHNtYW5hZ2VyJywgcmVnaW9uX25hbWU9Q09ORklHX1JFR0lPTilcbiAgICAgICAgcmVzcG9uc2UgPSBjbGllbnQuZ2V0X3NlY3JldF92YWx1ZShTZWNyZXRJZD1DT05GSUdfU0VDUkVUX05BTUUpXG4gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlWydTZWNyZXRTdHJpbmcnXSlcbiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4gICAgICAgIGxvZ2dlci5lcnJvcihmJ0ZhaWxlZCB0byBnZXQgc2VjcmV0LiBOYW1lPVwie0NPTkZJR19TRUNSRVRfTkFNRX1cIiwgUmVnaW9uPVwie0NPTkZJR19SRUdJT059XCInKVxuICAgICAgICBsb2dnZXIuZXJyb3IoZidFcnJvcjoge3N0cihlKX0nKVxuICAgICAgICByYWlzZVxuYDtcblxuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdlZGdlLWF1dGgtJykpO1xuICAgIGNvbnN0IGNvbmZpZ1B5UGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCAnY29uZmlnX2dlbmVyYXRlZC5weScpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUHlQYXRoLCBjb25maWdQeUNvbnRlbnQpO1xuXG4gICAgY29uc3Qgb2F1dGhDYWxsYmFja0Z1bmN0aW9uID0gbmV3IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbih0aGlzLCAnT0F1dGhDYWxsYmFjaycsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgaGFuZGxlcjogJ29hdXRoLWNhbGxiYWNrLmxhbWJkYV9oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2VkZ2UtYXV0aCcpLCB7XG4gICAgICAgIGFzc2V0SGFzaDogY29tcHV0ZUFzc2V0SGFzaChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2VkZ2UtYXV0aCcpLCBjb25maWdQeUNvbnRlbnQpLFxuICAgICAgICBhc3NldEhhc2hUeXBlOiBjb3JlLkFzc2V0SGFzaFR5cGUuQ1VTVE9NLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgY29uc3QgYnVuZGxlZERlcHNEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhLWJ1bmRsZWQvZWRnZS1hdXRoJyk7XG4gICAgICAgICAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvZWRnZS1hdXRoJyk7XG5cbiAgICAgICAgICAgICAgLy8gQ29weSBwcmUtYnVuZGxlZCBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgZnMuY3BTeW5jKGJ1bmRsZWREZXBzRGlyLCBvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICAgIC8vIENvcHkgTGFtYmRhIHNvdXJjZSBmaWxlcyAob3ZlcndyaXRlIGFueSBjb25mbGljdHMgd2l0aCBzb3VyY2UpXG4gICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUZpbGVzID0gZnMucmVhZGRpclN5bmMoc291cmNlRGlyKTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUgPT09ICdyZXF1aXJlbWVudHMudHh0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjUGF0aCA9IHBhdGguam9pbihzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSk7XG4gICAgICAgICAgICAgICAgZnMuY3BTeW5jKHNyY1BhdGgsIGRlc3RQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBnZW5lcmF0ZWQgY29uZmlnXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKSwgY29uZmlnUHlDb250ZW50KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBGYWxsYmFjazogRG9ja2VyLWJhc2VkIGJ1bmRsaW5nIGlmIGxvY2FsIGJ1bmRsaW5nIGZhaWxzIChlLmcuIHByZS1idW5kbGVkIGRlcHMgbWlzc2luZylcbiAgICAgICAgICBpbWFnZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICAnYmFzaCcsICctYycsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0ICYmICcgK1xuICAgICAgICAgICAgJ2NwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiAnICtcbiAgICAgICAgICAgICdjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaG9zdFBhdGg6IGNvbmZpZ1B5UGF0aCxcbiAgICAgICAgICAgICAgY29udGFpbmVyUGF0aDogJy90bXAvY29uZmlnX2dlbmVyYXRlZC5weScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICByb2xlOiB0aGlzLmxhbWJkYUVkZ2VSb2xlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXV0aENoZWNrQ29kZSA9IHRoaXMubG9hZEFuZFJlcGxhY2VBdXRoQ2hlY2tDb2RlKFxuICAgICAgdGVuYW50SWQsXG4gICAgICBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgICk7XG5cbiAgICB0aGlzLmF1dGhDaGVja0Z1bmN0aW9uID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgJ0F1dGhDaGVjaycsIHtcbiAgICAgIGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoYXV0aENoZWNrQ29kZSksXG4gICAgICBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsXG4gICAgICBrZXlWYWx1ZVN0b3JlOiBrdnMsXG4gICAgICBjb21tZW50OiAndmVyaWZpZXMgdG9rZW5zJyxcbiAgICB9KTtcbiAgICB0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24gPSB0aGlzLmF1dGhDaGVja0Z1bmN0aW9uO1xuXG4gICAgLy8gQ3JlYXRlIHVzZXIgaW5mbyBlbmRwb2ludCBmdW5jdGlvbiBpZiBlbmFibGVkXG4gICAgaWYgKHByb3BzLmVuYWJsZVVzZXJJbmZvSW5qZWN0aW9uICE9PSBmYWxzZSkge1xuICAgICAgaWYgKCFwcm9wcy51c2VySW5mb05hbWVGaWVsZHMgfHwgcHJvcHMudXNlckluZm9OYW1lRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZXJJbmZvTmFtZUZpZWxkcyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gZW5hYmxlVXNlckluZm9JbmplY3Rpb24gaXMgdHJ1ZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNlckluZm9Db2RlID0gdGhpcy5sb2FkQW5kUmVwbGFjZVVzZXJJbmZvQ29kZShwcm9wcy51c2VySW5mb05hbWVGaWVsZHMpO1xuICAgICAgdGhpcy51c2VySW5mb0Z1bmN0aW9uID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgJ1VzZXJJbmZvRW5kcG9pbnQnLCB7XG4gICAgICAgIGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUodXNlckluZm9Db2RlKSxcbiAgICAgICAgcnVudGltZTogY2xvdWRmcm9udC5GdW5jdGlvblJ1bnRpbWUuSlNfMl8wLFxuICAgICAgICBrZXlWYWx1ZVN0b3JlOiBrdnMsXG4gICAgICAgIGNvbW1lbnQ6ICdSZXR1cm5zIHVzZXIgaW5mbyBKU09OIGZyb20gSldUJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VySW5mb0Z1bmN0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmF1dGhDaGVja0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IHRoaXMudXNlckluZm9GdW5jdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsQmVoYXZpb3JzOiBSZWNvcmQ8c3RyaW5nLCBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcblxuICAgIGlmIChwcm9wcy5jcmVhdGVPQXV0aENhbGxiYWNrICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmV0YWluIG9sZCBMYW1iZGFARWRnZSB2ZXJzaW9ucyDigJQgQ2xvdWRGcm9udCBlZGdlIHJlcGxpY2FzIHRha2UgdXAgdG9cbiAgICAgIC8vIHNldmVyYWwgaG91cnMgdG8gZHJhaW4gYWZ0ZXIgYSB2ZXJzaW9uIGNoYW5nZSwgYW5kIENsb3VkRm9ybWF0aW9uIGNhbm5vdFxuICAgICAgLy8gZGVsZXRlIGEgdmVyc2lvbiB0aGF0IGlzIHN0aWxsIHJlcGxpY2F0ZWQuIFJldGFpbmluZyBwcmV2ZW50cyBkZXBsb3kgZmFpbHVyZXMuXG4gICAgICBjb25zdCBjYWxsYmFja1ZlcnNpb24gPSBvYXV0aENhbGxiYWNrRnVuY3Rpb24uY3VycmVudFZlcnNpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29yZS5DZm5SZXNvdXJjZTtcbiAgICAgIGlmIChjYWxsYmFja1ZlcnNpb24pIHtcbiAgICAgICAgY2FsbGJhY2tWZXJzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICAgIH1cblxuICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9jYWxsYmFjayddID0ge1xuICAgICAgICBvcmlnaW46IHByb3BzLmRlZmF1bHRCZWhhdmlvci5vcmlnaW4sXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICAuLi5wcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzPy5bJy9vYXV0aDIvY2FsbGJhY2snXSxcbiAgICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBvYXV0aENhbGxiYWNrRnVuY3Rpb24uY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIH1dLFxuICAgICAgICAvLyBUaGUgT0F1dGggY2FsbGJhY2sgcmVzcG9uc2Ugc2V0cyB0aGUgc2Vzc2lvbiBjb29raWVzIChhdXRoX3Nlc3Npb24sXG4gICAgICAgIC8vIGF6dXJlX3Rva2VuKSB2aWEgU2V0LUNvb2tpZS4gQ2xvdWRGcm9udCBzdHJpcHMgU2V0LUNvb2tpZSBmcm9tIGFueVxuICAgICAgICAvLyBjYWNoZWFibGUgcmVzcG9uc2Ugd2hvc2UgY2FjaGUgcG9saWN5IGRvZXMgbm90IGtleSBvbiB0aG9zZSBjb29raWVzIOKAlFxuICAgICAgICAvLyBzbyBhIGNhY2hlYWJsZSBwb2xpY3kgaGVyZSAoZXZlbiBtYXhUdGw9MXMpIHNpbGVudGx5IGRyb3BzIHRoZSBhdXRoXG4gICAgICAgIC8vIGNvb2tpZXMgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIGJyb3dzZXIsIGJyZWFraW5nIGxvZ2luIGVudGlyZWx5LlxuICAgICAgICAvLyBUaGUgY2FsbGJhY2sgbXVzdCB0aGVyZWZvcmUgYmUgbm9uLWNhY2hlYWJsZTogQ0FDSElOR19ESVNBQkxFRCBsZXRzXG4gICAgICAgIC8vIFNldC1Db29raWUgcGFzcyBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSB2aWV3ZXIuIFRoZSBpbmJvdW5kIG9hdXRoX3N0YXRlXG4gICAgICAgIC8vIGNvb2tpZSBpcyByZWFkIGZyb20gdGhlIHJlcXVlc3QgYnkgdGhlIHZpZXdlci1yZXF1ZXN0IExhbWJkYUBFZGdlIGFuZFxuICAgICAgICAvLyBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcnQgb2YgdGhlIGNhY2hlIGtleS5cbiAgICAgICAgY2FjaGVQb2xpY3k6IHByb3BzLmFkZGl0aW9uYWxCZWhhdmlvcnM/LlsnL29hdXRoMi9jYWxsYmFjayddPy5jYWNoZVBvbGljeSA/PyBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIERlcGxveSBSZWZyZXNoIExhbWJkYSB3aGVuIGVuYWJsZVJlZnJlc2hFbmRwb2ludCBpcyB0cnVlXG4gICAgaWYgKHRoaXMuZW5hYmxlUmVmcmVzaEVuZHBvaW50KSB7XG4gICAgICBjb25zdCByZWZyZXNoRnVuY3Rpb24gPSBuZXcgY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKHRoaXMsICdSZWZyZXNoRW5kcG9pbnQnLCB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgICBoYW5kbGVyOiAnaW5kZXgubGFtYmRhX2hhbmRsZXInLFxuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9yZWZyZXNoJyksIHtcbiAgICAgICAgICBhc3NldEhhc2g6IGNvbXB1dGVBc3NldEhhc2gocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9yZWZyZXNoJyksIGNvbmZpZ1B5Q29udGVudCksXG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogY29yZS5Bc3NldEhhc2hUeXBlLkNVU1RPTSxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9yZWZyZXNoJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhzb3VyY2VEaXIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGUgPT09ICdyZXF1aXJlbWVudHMudHh0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBmcy5jcFN5bmMocGF0aC5qb2luKHNvdXJjZURpciwgZmlsZSksIHBhdGguam9pbihvdXRwdXREaXIsIGZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0RGlyLCAnY29uZmlnX2dlbmVyYXRlZC5weScpLCBjb25maWdQeUNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltYWdlOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMS5idW5kbGluZ0ltYWdlLFxuICAgICAgICAgICAgY29tbWFuZDogWydiYXNoJywgJy1jJywgJ2NwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiBjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5J10sXG4gICAgICAgICAgICB2b2x1bWVzOiBbeyBob3N0UGF0aDogY29uZmlnUHlQYXRoLCBjb250YWluZXJQYXRoOiAnL3RtcC9jb25maWdfZ2VuZXJhdGVkLnB5JyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgdGltZW91dDogY29yZS5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICByb2xlOiB0aGlzLmxhbWJkYUVkZ2VSb2xlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlZnJlc2hWZXJzaW9uID0gcmVmcmVzaEZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvcmUuQ2ZuUmVzb3VyY2U7XG4gICAgICBpZiAocmVmcmVzaFZlcnNpb24pIHtcbiAgICAgICAgcmVmcmVzaFZlcnNpb24uYXBwbHlSZW1vdmFsUG9saWN5KGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgICAgfVxuXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL3JlZnJlc2gnXSA9IHtcbiAgICAgICAgb3JpZ2luOiBwcm9wcy5kZWZhdWx0QmVoYXZpb3Iub3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiByZWZyZXNoRnVuY3Rpb24uY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIH1dLFxuICAgICAgICBjYWNoZVBvbGljeTogY2xvdWRmcm9udC5DYWNoZVBvbGljeS5DQUNISU5HX0RJU0FCTEVELFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXBsb3kgTG9nb3V0IExhbWJkYSB3aGVuIGVuYWJsZUxvZ291dEVuZHBvaW50IGlzIHRydWVcbiAgICBpZiAocHJvcHMuZW5hYmxlTG9nb3V0RW5kcG9pbnQpIHtcbiAgICAgIC8vIExvZ291dCBMYW1iZGEgbmVlZHMgS1ZTIEFSTiBmb3Igc2Vzc2lvbiByZXZvY2F0aW9uIOKAlCBiYWtlZCBpbnRvIGl0cyBjb25maWdcbiAgICAgIGNvbnN0IGxvZ291dENvbmZpZ1B5Q29udGVudCA9IGAjIEdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGZvciBMb2dvdXQgTGFtYmRhXG5pbXBvcnQganNvblxuaW1wb3J0IGJvdG8zXG5pbXBvcnQgbG9nZ2luZ1xuXG5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpXG5cbkNPTkZJR19TRUNSRVRfTkFNRSA9ICcke3Byb3BzLmF1dGhDb25maWdTZWNyZXROYW1lID8/IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7cHJvcHMuZG9tYWluTmFtZXNbMF19YH0nXG5DT05GSUdfUkVHSU9OID0gJyR7cHJvcHMuYXV0aFJlZ2lvbn0nXG5LVlNfQVJOID0gJyR7a3ZzQXJufSdcblxuZGVmIGdldF9jb25maWcoKTpcbiAgICBsb2dnZXIuaW5mbyhmJ0xvYWRpbmcgY29uZmlnIGZyb20gU2VjcmV0cyBNYW5hZ2VyOiB7Q09ORklHX1NFQ1JFVF9OQU1FfSBpbiB7Q09ORklHX1JFR0lPTn0nKVxuICAgIHRyeTpcbiAgICAgICAgY2xpZW50ID0gYm90bzMuY2xpZW50KCdzZWNyZXRzbWFuYWdlcicsIHJlZ2lvbl9uYW1lPUNPTkZJR19SRUdJT04pXG4gICAgICAgIHJlc3BvbnNlID0gY2xpZW50LmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9Q09ORklHX1NFQ1JFVF9OQU1FKVxuICAgICAgICBjb25maWcgPSBqc29uLmxvYWRzKHJlc3BvbnNlWydTZWNyZXRTdHJpbmcnXSlcbiAgICAgICAgY29uZmlnWydrdnNfYXJuJ10gPSBLVlNfQVJOXG4gICAgICAgIHJldHVybiBjb25maWdcbiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4gICAgICAgIGxvZ2dlci5lcnJvcihmJ0ZhaWxlZCB0byBnZXQgc2VjcmV0OiB7ZX0nKVxuICAgICAgICByYWlzZVxuYDtcblxuICAgICAgY29uc3QgbG9nb3V0RnVuY3Rpb24gPSBuZXcgY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKHRoaXMsICdMb2dvdXRFbmRwb2ludCcsIHtcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEsXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5sYW1iZGFfaGFuZGxlcicsXG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2xvZ291dCcpLCB7XG4gICAgICAgICAgYXNzZXRIYXNoOiBjb21wdXRlQXNzZXRIYXNoKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvbG9nb3V0JyksIGxvZ291dENvbmZpZ1B5Q29udGVudCksXG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogY29yZS5Bc3NldEhhc2hUeXBlLkNVU1RPTSxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9sb2dvdXQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VGaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHNvdXJjZURpcik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZSA9PT0gJ3JlcXVpcmVtZW50cy50eHQnKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oc291cmNlRGlyLCBmaWxlKSwgcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRwdXREaXIsICdjb25maWdfZ2VuZXJhdGVkLnB5JyksIGxvZ291dENvbmZpZ1B5Q29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1hZ2U6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgICBjb21tYW5kOiBbJ2Jhc2gnLCAnLWMnLCAnY3AgLXIgLiAvYXNzZXQtb3V0cHV0ICYmIGNwIC90bXAvY29uZmlnX2dlbmVyYXRlZC5weSAvYXNzZXQtb3V0cHV0L2NvbmZpZ19nZW5lcmF0ZWQucHknXSxcbiAgICAgICAgICAgIHZvbHVtZXM6IFt7IGhvc3RQYXRoOiBjb25maWdQeVBhdGgsIGNvbnRhaW5lclBhdGg6ICcvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHknIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgIHJvbGU6IHRoaXMubGFtYmRhRWRnZVJvbGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbG9nb3V0VmVyc2lvbiA9IGxvZ291dEZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvcmUuQ2ZuUmVzb3VyY2U7XG4gICAgICBpZiAobG9nb3V0VmVyc2lvbikge1xuICAgICAgICBsb2dvdXRWZXJzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICAgIH1cblxuICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9sb2dvdXQnXSA9IHtcbiAgICAgICAgb3JpZ2luOiBwcm9wcy5kZWZhdWx0QmVoYXZpb3Iub3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBsb2dvdXRGdW5jdGlvbi5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgfV0sXG4gICAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKS5mb3JFYWNoKChbcGF0aFBhdHRlcm4sIGJlaGF2aW9yXSkgPT4ge1xuICAgICAgICBpZiAocGF0aFBhdHRlcm4gIT09ICcvb2F1dGgyL2NhbGxiYWNrJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnNbcGF0aFBhdHRlcm5dID0gYmVoYXZpb3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE9yaWdpbiByZXF1ZXN0IHBvbGljeSB0aGF0IGZvcndhcmRzIENsb3VkRnJvbnQtVmlld2VyLVRMUyBoZWFkZXIgKHJlcXVpcmVkIGZvciBSRVFVSVJFX1RMU18xMylcbiAgICB0aGlzLnRsc09yaWdpblJlcXVlc3RQb2xpY3kgPSBuZXcgY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UG9saWN5KHRoaXMsICdUbHNPcmlnaW5SZXF1ZXN0UG9saWN5Jywge1xuICAgICAgaGVhZGVyQmVoYXZpb3I6IGNsb3VkZnJvbnQuT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLmFsbG93TGlzdCgnQ2xvdWRGcm9udC1WaWV3ZXItVExTJyksXG4gICAgICBjb29raWVCZWhhdmlvcjogY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0Q29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgcXVlcnlTdHJpbmdCZWhhdmlvcjogY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UXVlcnlTdHJpbmdCZWhhdmlvci5ub25lKCksXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIGNvbXBvc2VyXG4gICAgdGhpcy5mdW5jdGlvbkNvbXBvc2VyID0gbmV3IEZ1bmN0aW9uQ29tcG9zZXIoKTtcbiAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zID0gbmV3IE1hcCgpO1xuXG4gICAgLy8gQWNjZXNzIGxvZ2dpbmdcbiAgICBsZXQgbG9nQnVja2V0OiBzMy5JQnVja2V0IHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5lbmFibGVBY2Nlc3NMb2dnaW5nKSB7XG4gICAgICBpZiAocHJvcHMuYWNjZXNzTG9nQnVja2V0KSB7XG4gICAgICAgIGxvZ0J1Y2tldCA9IHByb3BzLmFjY2Vzc0xvZ0J1Y2tldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ0J1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0FjY2Vzc0xvZ0J1Y2tldCcsIHtcbiAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgICAgIG9iamVjdE93bmVyc2hpcDogczMuT2JqZWN0T3duZXJzaGlwLkJVQ0tFVF9PV05FUl9QUkVGRVJSRUQsXG4gICAgICAgICAgcmVtb3ZhbFBvbGljeTogY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0cmFuc2l0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0b3JhZ2VDbGFzczogczMuU3RvcmFnZUNsYXNzLklORlJFUVVFTlRfQUNDRVNTLFxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkFmdGVyOiBjb3JlLkR1cmF0aW9uLmRheXMocHJvcHMuYWNjZXNzTG9nVHJhbnNpdGlvbkRheXMgPz8gMzApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGV4cGlyYXRpb246IGNvcmUuRHVyYXRpb24uZGF5cyhwcm9wcy5hY2Nlc3NMb2dFeHBpcmF0aW9uRGF5cyA/PyAzNjUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWNjZXNzTG9nQnVja2V0ID0gbG9nQnVja2V0O1xuICAgIH1cblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsICdEaXN0cmlidXRpb24nLCB7XG4gICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDI1LFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0QnVpbHQgPSB0aGlzLmJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMocHJvcHMuZGVmYXVsdEV4dGVuc2lvbnMsIHByb3BzLmRlZmF1bHRFeHRlbnNpb25Db25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKGRlZmF1bHRCdWlsdD8uZnVuY3Rpb25Bc3NvY2lhdGlvbnMsIHByb3BzLmRlZmF1bHRCZWhhdmlvci5mdW5jdGlvbkFzc29jaWF0aW9ucyksXG4gICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogZGVmYXVsdEJ1aWx0Py5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgICB9O1xuICAgICAgfSkoKSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IGFkZGl0aW9uYWxCZWhhdmlvcnMsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgICBsb2dCdWNrZXQ6IGxvZ0J1Y2tldCxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IHByb3BzLmVuYWJsZUFjY2Vzc0xvZ2dpbmcgPyAocHJvcHMuYWNjZXNzTG9nUHJlZml4ID8/ICdjZG4tbG9ncy8nKSA6IHVuZGVmaW5lZCxcbiAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCA/PyAnaW5kZXguaHRtbCcsXG4gICAgICBlcnJvclJlc3BvbnNlczogcHJvcHMuZW5hYmxlRXJyb3JSZXNwb25zZXMgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDQsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA1MDAsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaHR0cFN0YXR1czogNTAyLFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLmVycm9yUmVzcG9uc2VQYWdlUGF0aCA/PyAnL2Vycm9yLmh0bWwnLFxuICAgICAgICAgIHR0bDogY29yZS5EdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDUwMyxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBwcm9wcy5lcnJvclJlc3BvbnNlUGFnZVBhdGggPz8gJy9lcnJvci5odG1sJyxcbiAgICAgICAgICB0dGw6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA1MDQsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICB9LFxuICAgICAgXSA6IFtdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIC91c2VyaW5mbyBiZWhhdmlvciBpZiB1c2VyIGluZm8gZW5kcG9pbnQgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLnVzZXJJbmZvRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvdXNlcmluZm8nLCBwcm9wcy5kZWZhdWx0QmVoYXZpb3Iub3JpZ2luLCB7XG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiB0aGlzLnVzZXJJbmZvRnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2FjaGVQb2xpY3k6IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gfCBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucyA9IHt9LFxuICAgIGFwcGx5QXV0aD86IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIC8vIFN1cHBvcnQgbGVnYWN5IHNpZ25hdHVyZTogYWRkQmVoYXZpb3IocGF0aCwgYmVoYXZpb3JPcHRpb25zLCBhcHBseUF1dGgpXG4gICAgaWYgKCdvcmlnaW4nIGluIG9wdGlvbnMgfHwgJ3ZpZXdlclByb3RvY29sUG9saWN5JyBpbiBvcHRpb25zKSB7XG4gICAgICBjb25zdCBiZWhhdmlvck9wdGlvbnMgPSBvcHRpb25zIGFzIGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICAgICAgY29uc3Qgc2hvdWxkQXBwbHlBdXRoID0gYXBwbHlBdXRoICE9PSBmYWxzZTtcblxuICAgICAgaWYgKHNob3VsZEFwcGx5QXV0aCkge1xuICAgICAgICBjb25zdCBmdW5jdGlvbkFzc29jaWF0aW9uczogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gPSBbXG4gICAgICAgICAgLi4uKGJlaGF2aW9yT3B0aW9ucy5mdW5jdGlvbkFzc29jaWF0aW9ucyB8fCBbXSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246IHRoaXMuYXV0aENoZWNrRnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwge1xuICAgICAgICAgIC4uLmJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwgYmVoYXZpb3JPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOZXcgc2lnbmF0dXJlOiBhZGRCZWhhdmlvcihwYXRoLCBvcmlnaW4sIEFkZEJlaGF2aW9yT3B0aW9ucylcbiAgICBjb25zdCBhZGRCZWhhdmlvck9wdGlvbnMgPSBvcHRpb25zIGFzIEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT47XG5cbiAgICBjb25zdCBidWlsdCA9IHRoaXMuYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICAgIGFkZEJlaGF2aW9yT3B0aW9ucy5leHRlbnNpb25zLFxuICAgICAgYWRkQmVoYXZpb3JPcHRpb25zLmV4dGVuc2lvbkNvbmZpZyxcbiAgICApO1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwge1xuICAgICAgLi4uYWRkQmVoYXZpb3JPcHRpb25zLmJlaGF2aW9yT3B0aW9ucyxcbiAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiB0aGlzLm1lcmdlRnVuY3Rpb25Bc3NvY2lhdGlvbnMoYnVpbHQ/LmZ1bmN0aW9uQXNzb2NpYXRpb25zLCBhZGRCZWhhdmlvck9wdGlvbnMuYmVoYXZpb3JPcHRpb25zPy5mdW5jdGlvbkFzc29jaWF0aW9ucyksXG4gICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBidWlsdD8ub3JpZ2luUmVxdWVzdFBvbGljeSA/PyBhZGRCZWhhdmlvck9wdGlvbnMuYmVoYXZpb3JPcHRpb25zPy5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBzZXRzIG9mIGZ1bmN0aW9uIGFzc29jaWF0aW9ucywgZW5mb3JjaW5nIENsb3VkRnJvbnQncyBydWxlIG9mIG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLiBUaGUgY29uc3RydWN0IG5ldmVyIGluc3BlY3RzIG9yXG4gICAqIGNvbXBvc2VzIGEgY29uc3VtZXIncyBmdW5jdGlvbiDigJQgY29tYmluaW5nIHR3byBmdW5jdGlvbnMgb24gdGhlIHNhbWUgZXZlbnRcbiAgICogdHlwZSBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBhPzogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10sXG4gICAgYj86IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdLFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWxsID0gWy4uLihhID8/IFtdKSwgLi4uKGIgPz8gW10pXTtcbiAgICBpZiAoYWxsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8Y2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZT4oKTtcbiAgICBmb3IgKGNvbnN0IGZhIG9mIGFsbCkge1xuICAgICAgaWYgKHNlZW4uaGFzKGZhLmV2ZW50VHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLCBidXQgdHdvICcke2ZhLmV2ZW50VHlwZX0nIGAgK1xuICAgICAgICAgICdmdW5jdGlvbnMgd2VyZSBzdXBwbGllZCAoZS5nLiBSRVFVSVJFX0FVVEggcGx1cyB5b3VyIG93biBmdW5jdGlvbikuIEtlZXAgYXV0aCBhbmQgeW91ciBvdGhlciAnICtcbiAgICAgICAgICAnZnVuY3Rpb24gb24gc2VwYXJhdGUgcGF0aCBiZWhhdmlvdXJzLCBvciBjb21iaW5lIHRoZW0gaW50byBhIHNpbmdsZSBmdW5jdGlvbiB5b3Vyc2VsZi4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoZmEuZXZlbnRUeXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBleHRlbnNpb25zPzogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogeyBmdW5jdGlvbkFzc29jaWF0aW9uczogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW107IG9yaWdpblJlcXVlc3RQb2xpY3k/OiBjbG91ZGZyb250Lk9yaWdpblJlcXVlc3RQb2xpY3kgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFleHRlbnNpb25zIHx8IGV4dGVuc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGNhY2hlIGtleSBmb3IgdGhpcyBjb21iaW5hdGlvbiBvZiBleHRlbnNpb25zICsgY29uZmlnXG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25DYWNoZUtleShleHRlbnNpb25zLCBjb25maWcpO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBjcmVhdGVkIHRoaXMgZnVuY3Rpb25cbiAgICBsZXQgZnVuYyA9IHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWZ1bmMpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGNvbWJpbmVkIGZ1bmN0aW9uIGNvZGUgd2l0aCBBenVyZSBBRCBjb25maWd1cmF0aW9uXG4gICAgICBjb25zdCBjb2RlID0gdGhpcy5mdW5jdGlvbkNvbXBvc2VyLmNvbXBvc2UoZXh0ZW5zaW9ucywgY29uZmlnLCB7XG4gICAgICAgIHRlbmFudElkOiB0aGlzLnRlbmFudElkLFxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgICAgcmVkaXJlY3RVcmk6IHRoaXMucmVkaXJlY3RVcmksXG4gICAgICAgIGNvb2tpZURvbWFpbjogdGhpcy5jb29raWVEb21haW4sXG4gICAgICAgIHJlcXVpcmVNZmE6IHRoaXMucmVxdWlyZU1mYSxcbiAgICAgICAgZW5hYmxlSGVhZGVySW5qZWN0aW9uOiB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbixcbiAgICAgICAgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyxcbiAgICAgICAgZW5hYmxlUmVmcmVzaDogdGhpcy5lbmFibGVSZWZyZXNoRW5kcG9pbnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIENsb3VkRnJvbnQgRnVuY3Rpb25cbiAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25JZChleHRlbnNpb25zLCBjb25maWcpO1xuXG4gICAgICAvLyBBZGQgS1ZTIGlmIGF1dGggZXh0ZW5zaW9uIGlzIGluY2x1ZGVkXG4gICAgICBjb25zdCBmdW5jdGlvblByb3BzID0gZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9BVVRIKVxuICAgICAgICA/IHtcbiAgICAgICAgICBjb2RlOiBjbG91ZGZyb250LkZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGNvZGUpLFxuICAgICAgICAgIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCxcbiAgICAgICAgICBjb21tZW50OiBgQ29tYmluZWQ6ICR7ZXh0ZW5zaW9ucy5qb2luKCcsICcpfWAsXG4gICAgICAgICAga2V5VmFsdWVTdG9yZTogdGhpcy5rdnMsXG4gICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgY29kZTogY2xvdWRmcm9udC5GdW5jdGlvbkNvZGUuZnJvbUlubGluZShjb2RlKSxcbiAgICAgICAgICBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsXG4gICAgICAgICAgY29tbWVudDogYENvbWJpbmVkOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX1gLFxuICAgICAgICB9O1xuXG4gICAgICBmdW5jID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgZnVuY3Rpb25JZCwgZnVuY3Rpb25Qcm9wcyk7XG5cbiAgICAgIGlmICh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pIHtcbiAgICAgICAgZnVuYy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IGZ1bmM7XG5cbiAgICAgIHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2V0KGNhY2hlS2V5LCBmdW5jKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHsgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdOyBvcmlnaW5SZXF1ZXN0UG9saWN5PzogY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UG9saWN5IH0gPSB7XG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW3tcbiAgICAgICAgZnVuY3Rpb246IGZ1bmMsXG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgIH1dLFxuICAgIH07XG5cbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9UTFNfMTMpKSB7XG4gICAgICByZXN1bHQub3JpZ2luUmVxdWVzdFBvbGljeSA9IHRoaXMudGxzT3JpZ2luUmVxdWVzdFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gW2V4dGVuc2lvbnMuc29ydCgpLmpvaW4oJywnKV07XG4gICAgaWYgKGNvbmZpZz8ucmVxdWlyZWRSb2xlcykge1xuICAgICAgcGFydHMucHVzaChbLi4uY29uZmlnLnJlcXVpcmVkUm9sZXNdLnNvcnQoKS5qb2luKCcsJykpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yb2xlTWF0Y2hNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGdW5jdGlvbklkKGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdLCBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBleHRlbnNpb25QYXJ0ID0gZXh0ZW5zaW9ucy5tYXAoZSA9PiBlLnJlcGxhY2UoJ1JFUVVJUkVfJywgJycpKS5qb2luKCcnKTtcbiAgICBpZiAoY29uZmlnPy5yZXF1aXJlZFJvbGVzICYmIGNvbmZpZy5yZXF1aXJlZFJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJvbGVIYXNoID0gY29uZmlnLnJlcXVpcmVkUm9sZXMuam9pbignJykucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKS5zdWJzdHJpbmcoMCwgOCk7XG4gICAgICBjb25zdCBtb2RlUGFydCA9IGNvbmZpZy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SID8gY29uZmlnLnJvbGVNYXRjaE1vZGUgOiAnJztcbiAgICAgIHJldHVybiBgQ29tcG9zZWRGdW5jdGlvbiR7ZXh0ZW5zaW9uUGFydH0ke3JvbGVIYXNofSR7bW9kZVBhcnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGBDb21wb3NlZEZ1bmN0aW9uJHtleHRlbnNpb25QYXJ0fWA7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVJlZGlyZWN0VXJpKHJlZGlyZWN0VXJpPzogc3RyaW5nLCBkb21haW5OYW1lcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBpZiAocmVkaXJlY3RVcmkpIHtcbiAgICAgIHJldHVybiByZWRpcmVjdFVyaTtcbiAgICB9XG4gICAgaWYgKCFkb21haW5OYW1lcyB8fCBkb21haW5OYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIHJlZGlyZWN0VXJpIG9yIGRvbWFpbk5hbWVzIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGBodHRwczovLyR7ZG9tYWluTmFtZXNbMF19L29hdXRoMi9jYWxsYmFja2A7XG4gIH1cblxuICBwcml2YXRlIGxvYWRBbmRSZXBsYWNlQXV0aENoZWNrQ29kZSh0ZW5hbnRJZDogc3RyaW5nLCBjbGllbnRJZDogc3RyaW5nLCByZWRpcmVjdFVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2RlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9jbG91ZGZyb250LWZ1bmN0aW9ucy9hdXRoLWNoZWNrLmpzJyk7XG4gICAgbGV0IGNvZGUgPSBmcy5yZWFkRmlsZVN5bmMoY29kZVBhdGgsICd1dGYtOCcpO1xuICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoJ1RFTkFOVF9JRF9QTEFDRUhPTERFUicsIHRlbmFudElkKTtcbiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCdDTElFTlRfSURfUExBQ0VIT0xERVInLCBjbGllbnRJZCk7XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZSgnUkVESVJFQ1RfVVJJX1BMQUNFSE9MREVSJywgcmVkaXJlY3RVcmkpO1xuICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoJ0NPT0tJRV9ET01BSU5fUExBQ0VIT0xERVInLCB0aGlzLmNvb2tpZURvbWFpbik7XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZSgvRU5BQkxFX0hFQURFUl9JTkpFQ1RJT05fUExBQ0VIT0xERVIvZywgU3RyaW5nKHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uKSk7XG4gICAgaWYgKHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uICYmIE9iamVjdC5rZXlzKHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX01BUF9QTEFDRUhPTERFUi9nLCBKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcykpO1xuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvSEVBREVSX0lOSkVDVElPTl9LRVlTX1BMQUNFSE9MREVSL2csIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX01BUF9QTEFDRUhPTERFUi9nLCAne30nKTtcbiAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL0hFQURFUl9JTkpFQ1RJT05fS0VZU19QTEFDRUhPTERFUi9nLCAnW10nKTtcbiAgICB9XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZSgvRU5BQkxFX1JFRlJFU0hfUExBQ0VIT0xERVIvZywgU3RyaW5nKHRoaXMuZW5hYmxlUmVmcmVzaEVuZHBvaW50KSk7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBwcml2YXRlIGxvYWRBbmRSZXBsYWNlVXNlckluZm9Db2RlKG5hbWVGaWVsZHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2RlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9jbG91ZGZyb250LWZ1bmN0aW9ucy91c2VyaW5mby1lbmRwb2ludC5qcycpO1xuICAgIGxldCBjb2RlID0gZnMucmVhZEZpbGVTeW5jKGNvZGVQYXRoLCAndXRmLTgnKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIG5hbWVGaWVsZHMgYXJyYXkgd2l0aCB0aGUgcHJvdmlkZWQgZmllbGRzXG4gICAgY29uc3QgbmFtZUZpZWxkc0pzb24gPSBKU09OLnN0cmluZ2lmeShuYW1lRmllbGRzKTtcbiAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgXCJ2YXIgbmFtZUZpZWxkcyA9IFsna2V5MScsICdrZXkyJywgJ2tleTMnXTtcIixcbiAgICAgIGB2YXIgbmFtZUZpZWxkcyA9ICR7bmFtZUZpZWxkc0pzb259O2AsXG4gICAgKTtcblxuICAgIHJldHVybiBjb2RlO1xuICB9XG59XG4iXX0=
682
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlZENsb3VkRnJvbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xvdWRmcm9udC9wYXR0ZXJucy9zZWN1cmVkQ2xvdWRGcm9udC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0RBQW9DO0FBQ3BDLDZDQVFxQjtBQUNyQix1REFBeUM7QUFFekMsaUZBQWlHO0FBRWpHOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsZUFBdUI7SUFDbEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTdCLDJEQUEyRDtJQUMzRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9DLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElB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ckJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfY2xvdWRmcm9udCBhcyBjbG91ZGZyb250LFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG4gIGF3c19rbXMgYXMga21zLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zMyBhcyBzMyxcbiAgYXdzX3NzbSBhcyBzc20sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdXRoU2VjdXJpdHlUYWJsZSB9IGZyb20gJy4uL2F1dGhTZWN1cml0eVRhYmxlJztcbmltcG9ydCB7IEZ1bmN0aW9uQ29tcG9zZXIsIG1pbmlmeUZ1bmN0aW9uQ29kZSB9IGZyb20gJy4uL2Nsb3VkZnJvbnQtZnVuY3Rpb25zL2Z1bmN0aW9uLWNvbXBvc2VyJztcblxuLyoqXG4gKiBDb21wdXRlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoIGZvciBhIExhbWJkYSBhc3NldCBidW5kbGUgYmFzZWQgb24gc291cmNlXG4gKiBkaXJlY3RvcnkgY29udGVudHMgYW5kIGdlbmVyYXRlZCBjb25maWcuIFRoaXMgcHJldmVudHMgc3B1cmlvdXMgTGFtYmRhXG4gKiB2ZXJzaW9uIHJvdGF0aW9ucyBvbiBldmVyeSBDREsgc3ludGguXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVBc3NldEhhc2goc291cmNlRGlyOiBzdHJpbmcsIGdlbmVyYXRlZENvbmZpZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoZ2VuZXJhdGVkQ29uZmlnKTtcblxuICAvLyBIYXNoIGFsbCBzb3VyY2UgZmlsZXMgZGV0ZXJtaW5pc3RpY2FsbHkgKHNvcnRlZCBieSBuYW1lKVxuICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHNvdXJjZURpcikuc29ydCgpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihzb3VyY2VEaXIsIGZpbGUpO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgIGhhc2gudXBkYXRlKGZpbGUpO1xuICAgICAgaGFzaC51cGRhdGUoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW5jbHVkZSBwcmUtYnVuZGxlZCBkZXBzIGhhc2ggaWYgdGhleSBleGlzdFxuICBjb25zdCBidW5kbGVkRGVwc0RpciA9IHBhdGguam9pbihzb3VyY2VEaXIsICcuLi8uLi9sYW1iZGEtYnVuZGxlZCcsIHBhdGguYmFzZW5hbWUoc291cmNlRGlyKSk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGJ1bmRsZWREZXBzRGlyKSkge1xuICAgIGNvbnN0IGRlcEZpbGVzID0gZnMucmVhZGRpclN5bmMoYnVuZGxlZERlcHNEaXIpLnNvcnQoKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZGVwRmlsZXMpIHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGJ1bmRsZWREZXBzRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgICBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShgZGVwOiR7ZmlsZX1gKTtcbiAgICAgICAgaGFzaC51cGRhdGUoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc2guZGlnZXN0KCdoZXgnKTtcbn1cblxuZXhwb3J0IGVudW0gRXh0ZW5zaW9uIHtcbiAgUkVRVUlSRV9BVVRIID0gJ1JFUVVJUkVfQVVUSCcsXG4gIFJFUVVJUkVfVExTXzEzID0gJ1JFUVVJUkVfVExTXzEzJyxcbiAgUkVXUklURV9UT19JTkRFWF9IVE1MID0gJ1JFV1JJVEVfVE9fSU5ERVhfSFRNTCcsXG59XG5cbmV4cG9ydCBlbnVtIFJvbGVNYXRjaE1vZGUge1xuICBPUiA9ICdPUicsXG4gIEFORCA9ICdBTkQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbkNvbmZpZzxUUm9sZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICByZWFkb25seSByZXF1aXJlZFJvbGVzPzogcmVhZG9ubHkgVFJvbGVbXTtcbiAgcmVhZG9ubHkgcm9sZU1hdGNoTW9kZT86IFJvbGVNYXRjaE1vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQmVoYXZpb3JPcHRpb25zPFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXTtcbiAgcmVhZG9ubHkgZXh0ZW5zaW9uQ29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPjtcbiAgcmVhZG9ubHkgYmVoYXZpb3JPcHRpb25zPzogT21pdDxjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucywgJ29yaWdpbic+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRXaXRoQXp1cmVBdXRoU3BsaXRQcm9wczxUUm9sZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICByZWFkb25seSBkZWZhdWx0QmVoYXZpb3I6IGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgT21pdDxjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucywgJ2VkZ2VMYW1iZGFzJz4+O1xuICByZWFkb25seSBkb21haW5OYW1lczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlOiBhbnk7XG4gIHJlYWRvbmx5IHJlZGlyZWN0VXJpPzogc3RyaW5nO1xuICByZWFkb25seSBjb29raWVEb21haW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xuICByZWFkb25seSBobWFjU2VjcmV0Um90YXRpb25TY2hlZHVsZT86IGNvcmUuRHVyYXRpb247XG4gIHJlYWRvbmx5IHNlY3VyaXR5QWxlcnRzVG9waWNBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlc3Npb25SZXZvY2F0aW9uVG9waWNBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dG9SZXZva2VPblJldXNlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgand0Q2xhaW1zV2hpdGVsaXN0Pzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGF1ZGl0TG9nUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgYXVkaXRBcmNoaXZlUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgYXV0aFNzbVBhcmFtUHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dGhSZWdpb246IHN0cmluZztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBjb25maWcgc2VjcmV0IG5hbWUgdGhhdCB0aGUgT0F1dGggY2FsbGJhY2sgLyBsb2dvdXQgLyByZWZyZXNoXG4gICAqIExhbWJkYXMgcmVhZC4gRGVmYXVsdHMgdG8gYGNsb3VkZnJvbnQtYXV0aC1jb25maWctJHtkb21haW5OYW1lc1swXX1gLlxuICAgKiBTZXQgdGhpcyB3aGVuIHRoZSBBdXRoSW5mcmFzdHJ1Y3R1cmUgY3JlYXRlZCB0aGUgY29uZmlnIHNlY3JldCB1bmRlciBhXG4gICAqIGRpZmZlcmVudCBuYW1lIChlLmcuIGEgc2hhcmVkIHpvbmUgbmFtZSB0aGF0IHNlcnZlcyBtdWx0aXBsZSBzdWJkb21haW5zKS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhDb25maWdTZWNyZXROYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjcmVhdGVPQXV0aENhbGxiYWNrPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXTtcbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbkNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT47XG4gIHJlYWRvbmx5IGRlZmF1bHRSb290T2JqZWN0Pzogc3RyaW5nO1xuICByZWFkb25seSBlcnJvclJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIGFkZCBjdXN0b20gZXJyb3IgcmVzcG9uc2VzIChTUEEgcm91dGluZykuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICByZWFkb25seSBlbmFibGVFcnJvclJlc3BvbnNlcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuYWJsZVVzZXJJbmZvSW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlckluZm9OYW1lRmllbGRzPzogc3RyaW5nW107XG4gIC8qKiBFbmFibGUgQ2xvdWRGcm9udCBzdGFuZGFyZCBhY2Nlc3MgbG9nZ2luZy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQWNjZXNzTG9nZ2luZz86IGJvb2xlYW47XG4gIC8qKiBTMyBidWNrZXQgZm9yIGFjY2VzcyBsb2dzLiBJZiBub3QgcHJvdmlkZWQsIGEgYnVja2V0IHdpbGwgYmUgY3JlYXRlZC4gQGRlZmF1bHQgYXV0by1jcmVhdGVkIGJ1Y2tldCAqL1xuICByZWFkb25seSBhY2Nlc3NMb2dCdWNrZXQ/OiBzMy5JQnVja2V0O1xuICAvKiogUHJlZml4IGZvciBhY2Nlc3MgbG9nIGZpbGVzLiBAZGVmYXVsdCAnY2RuLWxvZ3MvJyAqL1xuICByZWFkb25seSBhY2Nlc3NMb2dQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgYWNjZXNzIGxvZ3MgdHJhbnNpdGlvbiB0byBJbmZyZXF1ZW50IEFjY2Vzcy4gQGRlZmF1bHQgMzAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzTG9nVHJhbnNpdGlvbkRheXM/OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgYWNjZXNzIGxvZ3MgYXJlIGRlbGV0ZWQuIEBkZWZhdWx0IDM2NSAqL1xuICByZWFkb25seSBhY2Nlc3NMb2dFeHBpcmF0aW9uRGF5cz86IG51bWJlcjtcbiAgLyoqIFJlcXVpcmUgTUZBIChhbXIgY2xhaW0gbXVzdCBjb250YWluICdtZmEnKS4gRGVmZW5jZSBpbiBkZXB0aCDigJQgcHJpbWFyeSBlbmZvcmNlbWVudCBzaG91bGQgYmUgdmlhIEVudHJhIENvbmRpdGlvbmFsIEFjY2Vzcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZU1mYT86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc3RyaXBwaW5nIGFuZCBpbmplY3Rpb24gb2YgaWRlbnRpdHkgY2xhaW0gaGVhZGVycyBvbiBvcmlnaW4tYm91bmQgcmVxdWVzdHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUhlYWRlckluamVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBNYXAgb2YgSFRUUCBoZWFkZXIgbmFtZSB0byBKV1QgY2xhaW0ga2V5IGZvciBoZWFkZXIgaW5qZWN0aW9uLiBPbmx5IHVzZWQgd2hlbiBlbmFibGVIZWFkZXJJbmplY3Rpb24gaXMgdHJ1ZS4gZS5nLiB7ICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJywgJ3gtY3VzdG9tZXItZW1haWwnOiAnZW1haWwnIH0gKi9cbiAgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEVuYWJsZSB0aGUgL29hdXRoMi9yZWZyZXNoIGVuZHBvaW50IGZvciBzaWxlbnQgdG9rZW4gcmVuZXdhbC4gV2hlbiB0cnVlLCBleHBpcmVkLWJ1dC12YWxpZCB0b2tlbnMgcmVkaXJlY3QgdG8gcmVmcmVzaCBpbnN0ZWFkIG9mIEVudHJhIGxvZ2luLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVSZWZyZXNoRW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHRoZSAvb2F1dGgyL2xvZ291dCBlbmRwb2ludCBmb3IgZXhwbGljaXQgc2Vzc2lvbiB0ZXJtaW5hdGlvbi4gV2hlbiB0cnVlLCBkZXBsb3lzIGEgTG9nb3V0IExhbWJkYSB0aGF0IGNsZWFycyBjb29raWVzLCByZXZva2VzIHRoZSBzZXNzaW9uLCBhbmQgcmVkaXJlY3RzIHRvIEVudHJhIC9sb2dvdXQuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUxvZ291dEVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqIFVSTCBmb3IgdGhlIHBvc3QtYXV0aCBpZGVudGl0eSBob29rLiBDYWxsZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCB0b2tlbiBleGNoYW5nZSB0byByZXNvbHZlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNsYWltcyAoZS5nLiwgY3VzdG9tZXJfaWQpLiBNdXN0IGJlIGFuIGludGVybmFsIFVSTCAoQUxCL0xhbWJkYSkuIEBkZWZhdWx0IHVuZGVmaW5lZCAobm8gaG9vaykgKi9cbiAgcmVhZG9ubHkgcG9zdEF1dGhIb29rVXJsPzogc3RyaW5nO1xuICAvKiogVGltZW91dCBpbiBzZWNvbmRzIGZvciB0aGUgcG9zdC1hdXRoIGlkZW50aXR5IGhvb2sgY2FsbC4gQGRlZmF1bHQgMyAqL1xuICByZWFkb25seSBwb3N0QXV0aEhvb2tUaW1lb3V0PzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBmYWlsIGNsb3NlZCAoZGVueSBhdXRoKSBpZiB0aGUgcG9zdC1hdXRoIGhvb2sgcmV0dXJucyBhbiBlcnJvciBvciBpcyB1bmF2YWlsYWJsZS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBwb3N0QXV0aEhvb2tGYWlsQ2xvc2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZWRDbG91ZEZyb250PFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZ1NlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldEFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkga21zS2V5OiBrbXMuSUtleTtcbiAgcHVibGljIHJlYWRvbmx5IGF1dGhTZWN1cml0eVRhYmxlOiBBdXRoU2VjdXJpdHlUYWJsZTtcbiAgcHVibGljIHJlYWRvbmx5IGF1ZGl0TG9nQXJjaGl2ZTogYW55O1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhRWRnZVJvbGU6IGlhbS5Sb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjZXNzTG9nQnVja2V0PzogczMuSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoQ2hlY2tGdW5jdGlvbjogY2xvdWRmcm9udC5GdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VySW5mb0Z1bmN0aW9uPzogY2xvdWRmcm9udC5GdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBmdW5jdGlvbkNvbXBvc2VyOiBGdW5jdGlvbkNvbXBvc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VkRnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBjbG91ZGZyb250LkZ1bmN0aW9uPjtcbiAgcHJpdmF0ZSBsYXN0Q3JlYXRlZEZ1bmN0aW9uOiBjbG91ZGZyb250LkZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IHRsc09yaWdpblJlcXVlc3RQb2xpY3k6IGNsb3VkZnJvbnQuT3JpZ2luUmVxdWVzdFBvbGljeTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW5hbnRJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudElkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb29raWVEb21haW46IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBrdnM6IGNsb3VkZnJvbnQuSUtleVZhbHVlU3RvcmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZU1mYTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb246IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVJlZnJlc2hFbmRwb2ludDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbG91ZEZyb250V2l0aEF6dXJlQXV0aFNwbGl0UHJvcHM8VFJvbGU+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5kZXRlcm1pbmVSZWRpcmVjdFVyaShwcm9wcy5yZWRpcmVjdFVyaSwgcHJvcHMuZG9tYWluTmFtZXMpO1xuXG4gICAgY29uc3QgcCA9IHByb3BzLmF1dGhTc21QYXJhbVByZWZpeDtcbiAgICBjb25zdCBjb25maWdTZWNyZXRBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2NvbmZpZ1NlY3JldEFybmApO1xuICAgIGNvbnN0IGttc0tleUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0va21zS2V5QXJuYCk7XG4gICAgY29uc3QgYXV0aFRhYmxlQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9hdXRoVGFibGVBcm5gKTtcbiAgICBjb25zdCBrdnNBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2t2c0FybmApO1xuICAgIGNvbnN0IHRlbmFudElkID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS90ZW5hbnRJZGApO1xuICAgIGNvbnN0IGNsaWVudElkID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9jbGllbnRJZGApO1xuICAgIGNvbnN0IG9hdXRoMkNhbGxiYWNrUm9sZU5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L29hdXRoMkNhbGxiYWNrUm9sZU5hbWVgKTtcblxuICAgIHRoaXMuY29uZmlnU2VjcmV0ID0gc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXRDb21wbGV0ZUFybih0aGlzLCAnSW1wb3J0ZWRTZWNyZXQnLCBjb25maWdTZWNyZXRBcm4pO1xuICAgIHRoaXMua21zS2V5ID0ga21zLktleS5mcm9tS2V5QXJuKHRoaXMsICdJbXBvcnRlZEtleScsIGttc0tleUFybik7XG4gICAgdGhpcy5hdXRoU2VjdXJpdHlUYWJsZSA9IHsgdGFibGU6IHsgdGFibGVBcm46IGF1dGhUYWJsZUFybiB9IH0gYXMgYW55O1xuICAgIHRoaXMuYXVkaXRMb2dBcmNoaXZlID0gbnVsbDtcbiAgICB0aGlzLnNlY3JldEFybiA9IGNvbmZpZ1NlY3JldEFybjtcblxuICAgIHRoaXMubGFtYmRhRWRnZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0xhbWJkYUVkZ2VSb2xlJywge1xuICAgICAgcm9sZU5hbWU6IG9hdXRoMkNhbGxiYWNrUm9sZU5hbWUsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWRnZWxhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIHdlIG5lZWQgdG8gYWRkIHRoZXNlIGRpcmVjdGx5LCByYXRoZXIgdGhhbiB1c2UgZ3JhbnQgbWV0aG9kcywgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kbmFjaWVzLlxuICAgIHRoaXMubGFtYmRhRWRnZVJvbGUuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsICdzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldCddLFxuICAgICAgcmVzb3VyY2VzOiBbY29uZmlnU2VjcmV0QXJuXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLmxhbWJkYUVkZ2VSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgIHJlc291cmNlczogW2ttc0tleUFybl0sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5sYW1iZGFFZGdlUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2R5bmFtb2RiOkdldEl0ZW0nLCAnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpRdWVyeScsICdkeW5hbW9kYjpTY2FuJywgJ2R5bmFtb2RiOlVwZGF0ZUl0ZW0nLCAnZHluYW1vZGI6RGVsZXRlSXRlbSddLFxuICAgICAgcmVzb3VyY2VzOiBbYXV0aFRhYmxlQXJuXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLmxhbWJkYUVkZ2VSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc3RzOkdldFdlYklkZW50aXR5VG9rZW4nXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5sYW1iZGFFZGdlUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2Nsb3VkZnJvbnQta2V5dmFsdWVzdG9yZTpQdXRLZXknLCAnY2xvdWRmcm9udC1rZXl2YWx1ZXN0b3JlOkRlc2NyaWJlS2V5VmFsdWVTdG9yZSddLFxuICAgICAgcmVzb3VyY2VzOiBba3ZzQXJuXSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBrdnMgPSBjbG91ZGZyb250LktleVZhbHVlU3RvcmUuZnJvbUtleVZhbHVlU3RvcmVBcm4odGhpcywgJ0tWUycsIGt2c0Fybik7XG4gICAgdGhpcy5rdnMgPSBrdnM7XG4gICAgdGhpcy50ZW5hbnRJZCA9IHRlbmFudElkO1xuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICB0aGlzLnJlZGlyZWN0VXJpID0gcmVkaXJlY3RVcmk7XG4gICAgdGhpcy5jb29raWVEb21haW4gPSBwcm9wcy5jb29raWVEb21haW4gfHwgJyc7XG4gICAgdGhpcy5yZXF1aXJlTWZhID0gcHJvcHMucmVxdWlyZU1mYSA/PyBmYWxzZTtcbiAgICB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbiA9IHByb3BzLmVuYWJsZUhlYWRlckluamVjdGlvbiA/PyBmYWxzZTtcbiAgICB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyA9IHByb3BzLmhlYWRlckluamVjdGlvbkNsYWltcyA/PyB7fTtcbiAgICB0aGlzLmVuYWJsZVJlZnJlc2hFbmRwb2ludCA9IHByb3BzLmVuYWJsZVJlZnJlc2hFbmRwb2ludCA/PyBmYWxzZTtcblxuICAgIGNvbnN0IGNvbmZpZ1B5Q29udGVudCA9IGAjIEdlbmVyYXRlZCBjb25maWd1cmF0aW9uXG5pbXBvcnQganNvblxuaW1wb3J0IGJvdG8zXG5pbXBvcnQgb3NcbmltcG9ydCBsb2dnaW5nXG5cbmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKClcblxuIyBTZWNyZXQgbmFtZSBhbmQgcmVnaW9uIC0gdGhlc2UgbXVzdCBiZSBjb25jcmV0ZSB2YWx1ZXMsIG5vdCBDbG91ZEZvcm1hdGlvbiB0b2tlbnNcbiMgVGhlIHNlY3JldCBuYW1lIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGRvbWFpbiBuYW1lXG5DT05GSUdfU0VDUkVUX05BTUUgPSAnJHtwcm9wcy5hdXRoQ29uZmlnU2VjcmV0TmFtZSA/PyBgY2xvdWRmcm9udC1hdXRoLWNvbmZpZy0ke3Byb3BzLmRvbWFpbk5hbWVzWzBdfWB9J1xuQ09ORklHX1JFR0lPTiA9ICcke3Byb3BzLmF1dGhSZWdpb259J1xuXG5kZWYgZ2V0X2NvbmZpZygpOlxuICAgIGxvZ2dlci5pbmZvKGYnQXR0ZW1wdGluZyB0byBsb2FkIGNvbmZpZyBmcm9tIFNlY3JldHMgTWFuYWdlcicpXG4gICAgbG9nZ2VyLmluZm8oZidDT05GSUdfU0VDUkVUX05BTUU6IHtDT05GSUdfU0VDUkVUX05BTUV9JylcbiAgICBsb2dnZXIuaW5mbyhmJ0NPTkZJR19SRUdJT046IHtDT05GSUdfUkVHSU9OfScpXG4gICAgdHJ5OlxuICAgICAgICBjbGllbnQgPSBib3RvMy5jbGllbnQoJ3NlY3JldHNtYW5hZ2VyJywgcmVnaW9uX25hbWU9Q09ORklHX1JFR0lPTilcbiAgICAgICAgcmVzcG9uc2UgPSBjbGllbnQuZ2V0X3NlY3JldF92YWx1ZShTZWNyZXRJZD1DT05GSUdfU0VDUkVUX05BTUUpXG4gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3BvbnNlWydTZWNyZXRTdHJpbmcnXSlcbiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4gICAgICAgIGxvZ2dlci5lcnJvcihmJ0ZhaWxlZCB0byBnZXQgc2VjcmV0LiBOYW1lPVwie0NPTkZJR19TRUNSRVRfTkFNRX1cIiwgUmVnaW9uPVwie0NPTkZJR19SRUdJT059XCInKVxuICAgICAgICBsb2dnZXIuZXJyb3IoZidFcnJvcjoge3N0cihlKX0nKVxuICAgICAgICByYWlzZVxuYDtcblxuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdlZGdlLWF1dGgtJykpO1xuICAgIGNvbnN0IGNvbmZpZ1B5UGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCAnY29uZmlnX2dlbmVyYXRlZC5weScpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUHlQYXRoLCBjb25maWdQeUNvbnRlbnQpO1xuXG4gICAgY29uc3Qgb2F1dGhDYWxsYmFja0Z1bmN0aW9uID0gbmV3IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbih0aGlzLCAnT0F1dGhDYWxsYmFjaycsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgaGFuZGxlcjogJ29hdXRoLWNhbGxiYWNrLmxhbWJkYV9oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2VkZ2UtYXV0aCcpLCB7XG4gICAgICAgIGFzc2V0SGFzaDogY29tcHV0ZUFzc2V0SGFzaChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2VkZ2UtYXV0aCcpLCBjb25maWdQeUNvbnRlbnQpLFxuICAgICAgICBhc3NldEhhc2hUeXBlOiBjb3JlLkFzc2V0SGFzaFR5cGUuQ1VTVE9NLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgY29uc3QgYnVuZGxlZERlcHNEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhLWJ1bmRsZWQvZWRnZS1hdXRoJyk7XG4gICAgICAgICAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvZWRnZS1hdXRoJyk7XG5cbiAgICAgICAgICAgICAgLy8gQ29weSBwcmUtYnVuZGxlZCBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgICAgZnMuY3BTeW5jKGJ1bmRsZWREZXBzRGlyLCBvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICAgIC8vIENvcHkgTGFtYmRhIHNvdXJjZSBmaWxlcyAob3ZlcndyaXRlIGFueSBjb25mbGljdHMgd2l0aCBzb3VyY2UpXG4gICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUZpbGVzID0gZnMucmVhZGRpclN5bmMoc291cmNlRGlyKTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUgPT09ICdyZXF1aXJlbWVudHMudHh0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjUGF0aCA9IHBhdGguam9pbihzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSk7XG4gICAgICAgICAgICAgICAgZnMuY3BTeW5jKHNyY1BhdGgsIGRlc3RQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBnZW5lcmF0ZWQgY29uZmlnXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKSwgY29uZmlnUHlDb250ZW50KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBGYWxsYmFjazogRG9ja2VyLWJhc2VkIGJ1bmRsaW5nIGlmIGxvY2FsIGJ1bmRsaW5nIGZhaWxzIChlLmcuIHByZS1idW5kbGVkIGRlcHMgbWlzc2luZylcbiAgICAgICAgICBpbWFnZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICAnYmFzaCcsICctYycsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0ICYmICcgK1xuICAgICAgICAgICAgJ2NwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiAnICtcbiAgICAgICAgICAgICdjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaG9zdFBhdGg6IGNvbmZpZ1B5UGF0aCxcbiAgICAgICAgICAgICAgY29udGFpbmVyUGF0aDogJy90bXAvY29uZmlnX2dlbmVyYXRlZC5weScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICByb2xlOiB0aGlzLmxhbWJkYUVkZ2VSb2xlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXV0aENoZWNrQ29kZSA9IHRoaXMubG9hZEFuZFJlcGxhY2VBdXRoQ2hlY2tDb2RlKFxuICAgICAgdGVuYW50SWQsXG4gICAgICBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgICk7XG5cbiAgICB0aGlzLmF1dGhDaGVja0Z1bmN0aW9uID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgJ0F1dGhDaGVjaycsIHtcbiAgICAgIGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoYXV0aENoZWNrQ29kZSksXG4gICAgICBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsXG4gICAgICBrZXlWYWx1ZVN0b3JlOiBrdnMsXG4gICAgICBjb21tZW50OiAndmVyaWZpZXMgdG9rZW5zJyxcbiAgICB9KTtcbiAgICB0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24gPSB0aGlzLmF1dGhDaGVja0Z1bmN0aW9uO1xuXG4gICAgLy8gQ3JlYXRlIHVzZXIgaW5mbyBlbmRwb2ludCBmdW5jdGlvbiBpZiBlbmFibGVkXG4gICAgaWYgKHByb3BzLmVuYWJsZVVzZXJJbmZvSW5qZWN0aW9uICE9PSBmYWxzZSkge1xuICAgICAgaWYgKCFwcm9wcy51c2VySW5mb05hbWVGaWVsZHMgfHwgcHJvcHMudXNlckluZm9OYW1lRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZXJJbmZvTmFtZUZpZWxkcyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gZW5hYmxlVXNlckluZm9JbmplY3Rpb24gaXMgdHJ1ZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNlckluZm9Db2RlID0gdGhpcy5sb2FkQW5kUmVwbGFjZVVzZXJJbmZvQ29kZShwcm9wcy51c2VySW5mb05hbWVGaWVsZHMpO1xuICAgICAgdGhpcy51c2VySW5mb0Z1bmN0aW9uID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgJ1VzZXJJbmZvRW5kcG9pbnQnLCB7XG4gICAgICAgIGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUodXNlckluZm9Db2RlKSxcbiAgICAgICAgcnVudGltZTogY2xvdWRmcm9udC5GdW5jdGlvblJ1bnRpbWUuSlNfMl8wLFxuICAgICAgICBrZXlWYWx1ZVN0b3JlOiBrdnMsXG4gICAgICAgIGNvbW1lbnQ6ICdSZXR1cm5zIHVzZXIgaW5mbyBKU09OIGZyb20gSldUJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy51c2VySW5mb0Z1bmN0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmF1dGhDaGVja0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IHRoaXMudXNlckluZm9GdW5jdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsQmVoYXZpb3JzOiBSZWNvcmQ8c3RyaW5nLCBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcblxuICAgIGlmIChwcm9wcy5jcmVhdGVPQXV0aENhbGxiYWNrICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmV0YWluIG9sZCBMYW1iZGFARWRnZSB2ZXJzaW9ucyDigJQgQ2xvdWRGcm9udCBlZGdlIHJlcGxpY2FzIHRha2UgdXAgdG9cbiAgICAgIC8vIHNldmVyYWwgaG91cnMgdG8gZHJhaW4gYWZ0ZXIgYSB2ZXJzaW9uIGNoYW5nZSwgYW5kIENsb3VkRm9ybWF0aW9uIGNhbm5vdFxuICAgICAgLy8gZGVsZXRlIGEgdmVyc2lvbiB0aGF0IGlzIHN0aWxsIHJlcGxpY2F0ZWQuIFJldGFpbmluZyBwcmV2ZW50cyBkZXBsb3kgZmFpbHVyZXMuXG4gICAgICBjb25zdCBjYWxsYmFja1ZlcnNpb24gPSBvYXV0aENhbGxiYWNrRnVuY3Rpb24uY3VycmVudFZlcnNpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29yZS5DZm5SZXNvdXJjZTtcbiAgICAgIGlmIChjYWxsYmFja1ZlcnNpb24pIHtcbiAgICAgICAgY2FsbGJhY2tWZXJzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICAgIH1cblxuICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9jYWxsYmFjayddID0ge1xuICAgICAgICBvcmlnaW46IHByb3BzLmRlZmF1bHRCZWhhdmlvci5vcmlnaW4sXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICAuLi5wcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzPy5bJy9vYXV0aDIvY2FsbGJhY2snXSxcbiAgICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBvYXV0aENhbGxiYWNrRnVuY3Rpb24uY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIH1dLFxuICAgICAgICAvLyBUaGUgT0F1dGggY2FsbGJhY2sgcmVzcG9uc2Ugc2V0cyB0aGUgc2Vzc2lvbiBjb29raWVzIChhdXRoX3Nlc3Npb24sXG4gICAgICAgIC8vIGF6dXJlX3Rva2VuKSB2aWEgU2V0LUNvb2tpZS4gQ2xvdWRGcm9udCBzdHJpcHMgU2V0LUNvb2tpZSBmcm9tIGFueVxuICAgICAgICAvLyBjYWNoZWFibGUgcmVzcG9uc2Ugd2hvc2UgY2FjaGUgcG9saWN5IGRvZXMgbm90IGtleSBvbiB0aG9zZSBjb29raWVzIOKAlFxuICAgICAgICAvLyBzbyBhIGNhY2hlYWJsZSBwb2xpY3kgaGVyZSAoZXZlbiBtYXhUdGw9MXMpIHNpbGVudGx5IGRyb3BzIHRoZSBhdXRoXG4gICAgICAgIC8vIGNvb2tpZXMgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIGJyb3dzZXIsIGJyZWFraW5nIGxvZ2luIGVudGlyZWx5LlxuICAgICAgICAvLyBUaGUgY2FsbGJhY2sgbXVzdCB0aGVyZWZvcmUgYmUgbm9uLWNhY2hlYWJsZTogQ0FDSElOR19ESVNBQkxFRCBsZXRzXG4gICAgICAgIC8vIFNldC1Db29raWUgcGFzcyBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSB2aWV3ZXIuIFRoZSBpbmJvdW5kIG9hdXRoX3N0YXRlXG4gICAgICAgIC8vIGNvb2tpZSBpcyByZWFkIGZyb20gdGhlIHJlcXVlc3QgYnkgdGhlIHZpZXdlci1yZXF1ZXN0IExhbWJkYUBFZGdlIGFuZFxuICAgICAgICAvLyBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcnQgb2YgdGhlIGNhY2hlIGtleS5cbiAgICAgICAgY2FjaGVQb2xpY3k6IHByb3BzLmFkZGl0aW9uYWxCZWhhdmlvcnM/LlsnL29hdXRoMi9jYWxsYmFjayddPy5jYWNoZVBvbGljeSA/PyBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIERlcGxveSBSZWZyZXNoIExhbWJkYSB3aGVuIGVuYWJsZVJlZnJlc2hFbmRwb2ludCBpcyB0cnVlXG4gICAgaWYgKHRoaXMuZW5hYmxlUmVmcmVzaEVuZHBvaW50KSB7XG4gICAgICBjb25zdCByZWZyZXNoRnVuY3Rpb24gPSBuZXcgY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKHRoaXMsICdSZWZyZXNoRW5kcG9pbnQnLCB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgICBoYW5kbGVyOiAnaW5kZXgubGFtYmRhX2hhbmRsZXInLFxuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9yZWZyZXNoJyksIHtcbiAgICAgICAgICBhc3NldEhhc2g6IGNvbXB1dGVBc3NldEhhc2gocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9yZWZyZXNoJyksIGNvbmZpZ1B5Q29udGVudCksXG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogY29yZS5Bc3NldEhhc2hUeXBlLkNVU1RPTSxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9yZWZyZXNoJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhzb3VyY2VEaXIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBzb3VyY2VGaWxlcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGUgPT09ICdyZXF1aXJlbWVudHMudHh0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBmcy5jcFN5bmMocGF0aC5qb2luKHNvdXJjZURpciwgZmlsZSksIHBhdGguam9pbihvdXRwdXREaXIsIGZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0RGlyLCAnY29uZmlnX2dlbmVyYXRlZC5weScpLCBjb25maWdQeUNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltYWdlOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMS5idW5kbGluZ0ltYWdlLFxuICAgICAgICAgICAgY29tbWFuZDogWydiYXNoJywgJy1jJywgJ2NwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiBjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5J10sXG4gICAgICAgICAgICB2b2x1bWVzOiBbeyBob3N0UGF0aDogY29uZmlnUHlQYXRoLCBjb250YWluZXJQYXRoOiAnL3RtcC9jb25maWdfZ2VuZXJhdGVkLnB5JyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgdGltZW91dDogY29yZS5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICByb2xlOiB0aGlzLmxhbWJkYUVkZ2VSb2xlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlZnJlc2hWZXJzaW9uID0gcmVmcmVzaEZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvcmUuQ2ZuUmVzb3VyY2U7XG4gICAgICBpZiAocmVmcmVzaFZlcnNpb24pIHtcbiAgICAgICAgcmVmcmVzaFZlcnNpb24uYXBwbHlSZW1vdmFsUG9saWN5KGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU4pO1xuICAgICAgfVxuXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL3JlZnJlc2gnXSA9IHtcbiAgICAgICAgb3JpZ2luOiBwcm9wcy5kZWZhdWx0QmVoYXZpb3Iub3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiByZWZyZXNoRnVuY3Rpb24uY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIH1dLFxuICAgICAgICBjYWNoZVBvbGljeTogY2xvdWRmcm9udC5DYWNoZVBvbGljeS5DQUNISU5HX0RJU0FCTEVELFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXBsb3kgTG9nb3V0IExhbWJkYSB3aGVuIGVuYWJsZUxvZ291dEVuZHBvaW50IGlzIHRydWVcbiAgICBpZiAocHJvcHMuZW5hYmxlTG9nb3V0RW5kcG9pbnQpIHtcbiAgICAgIC8vIExvZ291dCBMYW1iZGEgbmVlZHMgS1ZTIEFSTiBmb3Igc2Vzc2lvbiByZXZvY2F0aW9uIOKAlCBiYWtlZCBpbnRvIGl0cyBjb25maWdcbiAgICAgIGNvbnN0IGxvZ291dENvbmZpZ1B5Q29udGVudCA9IGAjIEdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGZvciBMb2dvdXQgTGFtYmRhXG5pbXBvcnQganNvblxuaW1wb3J0IGJvdG8zXG5pbXBvcnQgbG9nZ2luZ1xuXG5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpXG5cbkNPTkZJR19TRUNSRVRfTkFNRSA9ICcke3Byb3BzLmF1dGhDb25maWdTZWNyZXROYW1lID8/IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7cHJvcHMuZG9tYWluTmFtZXNbMF19YH0nXG5DT05GSUdfUkVHSU9OID0gJyR7cHJvcHMuYXV0aFJlZ2lvbn0nXG5LVlNfQVJOID0gJyR7a3ZzQXJufSdcblxuZGVmIGdldF9jb25maWcoKTpcbiAgICBsb2dnZXIuaW5mbyhmJ0xvYWRpbmcgY29uZmlnIGZyb20gU2VjcmV0cyBNYW5hZ2VyOiB7Q09ORklHX1NFQ1JFVF9OQU1FfSBpbiB7Q09ORklHX1JFR0lPTn0nKVxuICAgIHRyeTpcbiAgICAgICAgY2xpZW50ID0gYm90bzMuY2xpZW50KCdzZWNyZXRzbWFuYWdlcicsIHJlZ2lvbl9uYW1lPUNPTkZJR19SRUdJT04pXG4gICAgICAgIHJlc3BvbnNlID0gY2xpZW50LmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9Q09ORklHX1NFQ1JFVF9OQU1FKVxuICAgICAgICBjb25maWcgPSBqc29uLmxvYWRzKHJlc3BvbnNlWydTZWNyZXRTdHJpbmcnXSlcbiAgICAgICAgY29uZmlnWydrdnNfYXJuJ10gPSBLVlNfQVJOXG4gICAgICAgIHJldHVybiBjb25maWdcbiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4gICAgICAgIGxvZ2dlci5lcnJvcihmJ0ZhaWxlZCB0byBnZXQgc2VjcmV0OiB7ZX0nKVxuICAgICAgICByYWlzZVxuYDtcblxuICAgICAgY29uc3QgbG9nb3V0RnVuY3Rpb24gPSBuZXcgY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKHRoaXMsICdMb2dvdXRFbmRwb2ludCcsIHtcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEsXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5sYW1iZGFfaGFuZGxlcicsXG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL2xvZ291dCcpLCB7XG4gICAgICAgICAgYXNzZXRIYXNoOiBjb21wdXRlQXNzZXRIYXNoKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9sYW1iZGEvbG9nb3V0JyksIGxvZ291dENvbmZpZ1B5Q29udGVudCksXG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogY29yZS5Bc3NldEhhc2hUeXBlLkNVU1RPTSxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9sb2dvdXQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VGaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHNvdXJjZURpcik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZSA9PT0gJ3JlcXVpcmVtZW50cy50eHQnKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oc291cmNlRGlyLCBmaWxlKSwgcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRwdXREaXIsICdjb25maWdfZ2VuZXJhdGVkLnB5JyksIGxvZ291dENvbmZpZ1B5Q29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1hZ2U6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgICBjb21tYW5kOiBbJ2Jhc2gnLCAnLWMnLCAnY3AgLXIgLiAvYXNzZXQtb3V0cHV0ICYmIGNwIC90bXAvY29uZmlnX2dlbmVyYXRlZC5weSAvYXNzZXQtb3V0cHV0L2NvbmZpZ19nZW5lcmF0ZWQucHknXSxcbiAgICAgICAgICAgIHZvbHVtZXM6IFt7IGhvc3RQYXRoOiBjb25maWdQeVBhdGgsIGNvbnRhaW5lclBhdGg6ICcvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHknIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgIHJvbGU6IHRoaXMubGFtYmRhRWRnZVJvbGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbG9nb3V0VmVyc2lvbiA9IGxvZ291dEZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvcmUuQ2ZuUmVzb3VyY2U7XG4gICAgICBpZiAobG9nb3V0VmVyc2lvbikge1xuICAgICAgICBsb2dvdXRWZXJzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICAgIH1cblxuICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9sb2dvdXQnXSA9IHtcbiAgICAgICAgb3JpZ2luOiBwcm9wcy5kZWZhdWx0QmVoYXZpb3Iub3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBsb2dvdXRGdW5jdGlvbi5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgfV0sXG4gICAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKS5mb3JFYWNoKChbcGF0aFBhdHRlcm4sIGJlaGF2aW9yXSkgPT4ge1xuICAgICAgICBpZiAocGF0aFBhdHRlcm4gIT09ICcvb2F1dGgyL2NhbGxiYWNrJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnNbcGF0aFBhdHRlcm5dID0gYmVoYXZpb3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE9yaWdpbiByZXF1ZXN0IHBvbGljeSB0aGF0IGZvcndhcmRzIENsb3VkRnJvbnQtVmlld2VyLVRMUyBoZWFkZXIgKHJlcXVpcmVkIGZvciBSRVFVSVJFX1RMU18xMylcbiAgICB0aGlzLnRsc09yaWdpblJlcXVlc3RQb2xpY3kgPSBuZXcgY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UG9saWN5KHRoaXMsICdUbHNPcmlnaW5SZXF1ZXN0UG9saWN5Jywge1xuICAgICAgaGVhZGVyQmVoYXZpb3I6IGNsb3VkZnJvbnQuT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLmFsbG93TGlzdCgnQ2xvdWRGcm9udC1WaWV3ZXItVExTJyksXG4gICAgICBjb29raWVCZWhhdmlvcjogY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0Q29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgcXVlcnlTdHJpbmdCZWhhdmlvcjogY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UXVlcnlTdHJpbmdCZWhhdmlvci5ub25lKCksXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIGNvbXBvc2VyXG4gICAgdGhpcy5mdW5jdGlvbkNvbXBvc2VyID0gbmV3IEZ1bmN0aW9uQ29tcG9zZXIoKTtcbiAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zID0gbmV3IE1hcCgpO1xuXG4gICAgLy8gQWNjZXNzIGxvZ2dpbmdcbiAgICBsZXQgbG9nQnVja2V0OiBzMy5JQnVja2V0IHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5lbmFibGVBY2Nlc3NMb2dnaW5nKSB7XG4gICAgICBpZiAocHJvcHMuYWNjZXNzTG9nQnVja2V0KSB7XG4gICAgICAgIGxvZ0J1Y2tldCA9IHByb3BzLmFjY2Vzc0xvZ0J1Y2tldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ0J1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0FjY2Vzc0xvZ0J1Y2tldCcsIHtcbiAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgICAgIG9iamVjdE93bmVyc2hpcDogczMuT2JqZWN0T3duZXJzaGlwLkJVQ0tFVF9PV05FUl9QUkVGRVJSRUQsXG4gICAgICAgICAgcmVtb3ZhbFBvbGljeTogY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0cmFuc2l0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0b3JhZ2VDbGFzczogczMuU3RvcmFnZUNsYXNzLklORlJFUVVFTlRfQUNDRVNTLFxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkFmdGVyOiBjb3JlLkR1cmF0aW9uLmRheXMocHJvcHMuYWNjZXNzTG9nVHJhbnNpdGlvbkRheXMgPz8gMzApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGV4cGlyYXRpb246IGNvcmUuRHVyYXRpb24uZGF5cyhwcm9wcy5hY2Nlc3NMb2dFeHBpcmF0aW9uRGF5cyA/PyAzNjUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWNjZXNzTG9nQnVja2V0ID0gbG9nQnVja2V0O1xuICAgIH1cblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsICdEaXN0cmlidXRpb24nLCB7XG4gICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDI1LFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0QnVpbHQgPSB0aGlzLmJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMocHJvcHMuZGVmYXVsdEV4dGVuc2lvbnMsIHByb3BzLmRlZmF1bHRFeHRlbnNpb25Db25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKGRlZmF1bHRCdWlsdD8uZnVuY3Rpb25Bc3NvY2lhdGlvbnMsIHByb3BzLmRlZmF1bHRCZWhhdmlvci5mdW5jdGlvbkFzc29jaWF0aW9ucyksXG4gICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogZGVmYXVsdEJ1aWx0Py5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgICB9O1xuICAgICAgfSkoKSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IGFkZGl0aW9uYWxCZWhhdmlvcnMsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgICBsb2dCdWNrZXQ6IGxvZ0J1Y2tldCxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IHByb3BzLmVuYWJsZUFjY2Vzc0xvZ2dpbmcgPyAocHJvcHMuYWNjZXNzTG9nUHJlZml4ID8/ICdjZG4tbG9ncy8nKSA6IHVuZGVmaW5lZCxcbiAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCA/PyAnaW5kZXguaHRtbCcsXG4gICAgICBlcnJvclJlc3BvbnNlczogcHJvcHMuZW5hYmxlRXJyb3JSZXNwb25zZXMgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDQsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA1MDAsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaHR0cFN0YXR1czogNTAyLFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLmVycm9yUmVzcG9uc2VQYWdlUGF0aCA/PyAnL2Vycm9yLmh0bWwnLFxuICAgICAgICAgIHR0bDogY29yZS5EdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDUwMyxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBwcm9wcy5lcnJvclJlc3BvbnNlUGFnZVBhdGggPz8gJy9lcnJvci5odG1sJyxcbiAgICAgICAgICB0dGw6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA1MDQsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgdHRsOiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICB9LFxuICAgICAgXSA6IFtdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIC91c2VyaW5mbyBiZWhhdmlvciBpZiB1c2VyIGluZm8gZW5kcG9pbnQgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLnVzZXJJbmZvRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvdXNlcmluZm8nLCBwcm9wcy5kZWZhdWx0QmVoYXZpb3Iub3JpZ2luLCB7XG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiB0aGlzLnVzZXJJbmZvRnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2FjaGVQb2xpY3k6IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gfCBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucyA9IHt9LFxuICAgIGFwcGx5QXV0aD86IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIC8vIFN1cHBvcnQgbGVnYWN5IHNpZ25hdHVyZTogYWRkQmVoYXZpb3IocGF0aCwgYmVoYXZpb3JPcHRpb25zLCBhcHBseUF1dGgpXG4gICAgaWYgKCdvcmlnaW4nIGluIG9wdGlvbnMgfHwgJ3ZpZXdlclByb3RvY29sUG9saWN5JyBpbiBvcHRpb25zKSB7XG4gICAgICBjb25zdCBiZWhhdmlvck9wdGlvbnMgPSBvcHRpb25zIGFzIGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICAgICAgY29uc3Qgc2hvdWxkQXBwbHlBdXRoID0gYXBwbHlBdXRoICE9PSBmYWxzZTtcblxuICAgICAgaWYgKHNob3VsZEFwcGx5QXV0aCkge1xuICAgICAgICBjb25zdCBmdW5jdGlvbkFzc29jaWF0aW9uczogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gPSBbXG4gICAgICAgICAgLi4uKGJlaGF2aW9yT3B0aW9ucy5mdW5jdGlvbkFzc29jaWF0aW9ucyB8fCBbXSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246IHRoaXMuYXV0aENoZWNrRnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwge1xuICAgICAgICAgIC4uLmJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwgYmVoYXZpb3JPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOZXcgc2lnbmF0dXJlOiBhZGRCZWhhdmlvcihwYXRoLCBvcmlnaW4sIEFkZEJlaGF2aW9yT3B0aW9ucylcbiAgICBjb25zdCBhZGRCZWhhdmlvck9wdGlvbnMgPSBvcHRpb25zIGFzIEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT47XG5cbiAgICBjb25zdCBidWlsdCA9IHRoaXMuYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICAgIGFkZEJlaGF2aW9yT3B0aW9ucy5leHRlbnNpb25zLFxuICAgICAgYWRkQmVoYXZpb3JPcHRpb25zLmV4dGVuc2lvbkNvbmZpZyxcbiAgICApO1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwge1xuICAgICAgLi4uYWRkQmVoYXZpb3JPcHRpb25zLmJlaGF2aW9yT3B0aW9ucyxcbiAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiB0aGlzLm1lcmdlRnVuY3Rpb25Bc3NvY2lhdGlvbnMoYnVpbHQ/LmZ1bmN0aW9uQXNzb2NpYXRpb25zLCBhZGRCZWhhdmlvck9wdGlvbnMuYmVoYXZpb3JPcHRpb25zPy5mdW5jdGlvbkFzc29jaWF0aW9ucyksXG4gICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBidWlsdD8ub3JpZ2luUmVxdWVzdFBvbGljeSA/PyBhZGRCZWhhdmlvck9wdGlvbnMuYmVoYXZpb3JPcHRpb25zPy5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBzZXRzIG9mIGZ1bmN0aW9uIGFzc29jaWF0aW9ucywgZW5mb3JjaW5nIENsb3VkRnJvbnQncyBydWxlIG9mIG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLiBUaGUgY29uc3RydWN0IG5ldmVyIGluc3BlY3RzIG9yXG4gICAqIGNvbXBvc2VzIGEgY29uc3VtZXIncyBmdW5jdGlvbiDigJQgY29tYmluaW5nIHR3byBmdW5jdGlvbnMgb24gdGhlIHNhbWUgZXZlbnRcbiAgICogdHlwZSBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBhPzogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10sXG4gICAgYj86IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdLFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWxsID0gWy4uLihhID8/IFtdKSwgLi4uKGIgPz8gW10pXTtcbiAgICBpZiAoYWxsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8Y2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZT4oKTtcbiAgICBmb3IgKGNvbnN0IGZhIG9mIGFsbCkge1xuICAgICAgaWYgKHNlZW4uaGFzKGZhLmV2ZW50VHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLCBidXQgdHdvICcke2ZhLmV2ZW50VHlwZX0nIGAgK1xuICAgICAgICAgICdmdW5jdGlvbnMgd2VyZSBzdXBwbGllZCAoZS5nLiBSRVFVSVJFX0FVVEggcGx1cyB5b3VyIG93biBmdW5jdGlvbikuIEtlZXAgYXV0aCBhbmQgeW91ciBvdGhlciAnICtcbiAgICAgICAgICAnZnVuY3Rpb24gb24gc2VwYXJhdGUgcGF0aCBiZWhhdmlvdXJzLCBvciBjb21iaW5lIHRoZW0gaW50byBhIHNpbmdsZSBmdW5jdGlvbiB5b3Vyc2VsZi4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoZmEuZXZlbnRUeXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBleHRlbnNpb25zPzogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogeyBmdW5jdGlvbkFzc29jaWF0aW9uczogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW107IG9yaWdpblJlcXVlc3RQb2xpY3k/OiBjbG91ZGZyb250Lk9yaWdpblJlcXVlc3RQb2xpY3kgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFleHRlbnNpb25zIHx8IGV4dGVuc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGNhY2hlIGtleSBmb3IgdGhpcyBjb21iaW5hdGlvbiBvZiBleHRlbnNpb25zICsgY29uZmlnXG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25DYWNoZUtleShleHRlbnNpb25zLCBjb25maWcpO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBjcmVhdGVkIHRoaXMgZnVuY3Rpb25cbiAgICBsZXQgZnVuYyA9IHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWZ1bmMpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGNvbWJpbmVkIGZ1bmN0aW9uIGNvZGUgd2l0aCBBenVyZSBBRCBjb25maWd1cmF0aW9uXG4gICAgICBjb25zdCBjb2RlID0gdGhpcy5mdW5jdGlvbkNvbXBvc2VyLmNvbXBvc2UoZXh0ZW5zaW9ucywgY29uZmlnLCB7XG4gICAgICAgIHRlbmFudElkOiB0aGlzLnRlbmFudElkLFxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgICAgcmVkaXJlY3RVcmk6IHRoaXMucmVkaXJlY3RVcmksXG4gICAgICAgIGNvb2tpZURvbWFpbjogdGhpcy5jb29raWVEb21haW4sXG4gICAgICAgIHJlcXVpcmVNZmE6IHRoaXMucmVxdWlyZU1mYSxcbiAgICAgICAgZW5hYmxlSGVhZGVySW5qZWN0aW9uOiB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbixcbiAgICAgICAgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyxcbiAgICAgICAgZW5hYmxlUmVmcmVzaDogdGhpcy5lbmFibGVSZWZyZXNoRW5kcG9pbnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIENsb3VkRnJvbnQgRnVuY3Rpb25cbiAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25JZChleHRlbnNpb25zLCBjb25maWcpO1xuXG4gICAgICAvLyBBZGQgS1ZTIGlmIGF1dGggZXh0ZW5zaW9uIGlzIGluY2x1ZGVkXG4gICAgICBjb25zdCBmdW5jdGlvblByb3BzID0gZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9BVVRIKVxuICAgICAgICA/IHtcbiAgICAgICAgICBjb2RlOiBjbG91ZGZyb250LkZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGNvZGUpLFxuICAgICAgICAgIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCxcbiAgICAgICAgICBjb21tZW50OiBgQ29tYmluZWQ6ICR7ZXh0ZW5zaW9ucy5qb2luKCcsICcpfWAsXG4gICAgICAgICAga2V5VmFsdWVTdG9yZTogdGhpcy5rdnMsXG4gICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgY29kZTogY2xvdWRmcm9udC5GdW5jdGlvbkNvZGUuZnJvbUlubGluZShjb2RlKSxcbiAgICAgICAgICBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsXG4gICAgICAgICAgY29tbWVudDogYENvbWJpbmVkOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX1gLFxuICAgICAgICB9O1xuXG4gICAgICBmdW5jID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgZnVuY3Rpb25JZCwgZnVuY3Rpb25Qcm9wcyk7XG5cbiAgICAgIGlmICh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pIHtcbiAgICAgICAgZnVuYy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IGZ1bmM7XG5cbiAgICAgIHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2V0KGNhY2hlS2V5LCBmdW5jKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHsgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdOyBvcmlnaW5SZXF1ZXN0UG9saWN5PzogY2xvdWRmcm9udC5PcmlnaW5SZXF1ZXN0UG9saWN5IH0gPSB7XG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogW3tcbiAgICAgICAgZnVuY3Rpb246IGZ1bmMsXG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgIH1dLFxuICAgIH07XG5cbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9UTFNfMTMpKSB7XG4gICAgICByZXN1bHQub3JpZ2luUmVxdWVzdFBvbGljeSA9IHRoaXMudGxzT3JpZ2luUmVxdWVzdFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gW2V4dGVuc2lvbnMuc29ydCgpLmpvaW4oJywnKV07XG4gICAgaWYgKGNvbmZpZz8ucmVxdWlyZWRSb2xlcykge1xuICAgICAgcGFydHMucHVzaChbLi4uY29uZmlnLnJlcXVpcmVkUm9sZXNdLnNvcnQoKS5qb2luKCcsJykpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yb2xlTWF0Y2hNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGdW5jdGlvbklkKGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdLCBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBleHRlbnNpb25QYXJ0ID0gZXh0ZW5zaW9ucy5tYXAoZSA9PiBlLnJlcGxhY2UoJ1JFUVVJUkVfJywgJycpKS5qb2luKCcnKTtcbiAgICBpZiAoY29uZmlnPy5yZXF1aXJlZFJvbGVzICYmIGNvbmZpZy5yZXF1aXJlZFJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJvbGVIYXNoID0gY29uZmlnLnJlcXVpcmVkUm9sZXMuam9pbignJykucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKS5zdWJzdHJpbmcoMCwgOCk7XG4gICAgICBjb25zdCBtb2RlUGFydCA9IGNvbmZpZy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SID8gY29uZmlnLnJvbGVNYXRjaE1vZGUgOiAnJztcbiAgICAgIHJldHVybiBgQ29tcG9zZWRGdW5jdGlvbiR7ZXh0ZW5zaW9uUGFydH0ke3JvbGVIYXNofSR7bW9kZVBhcnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGBDb21wb3NlZEZ1bmN0aW9uJHtleHRlbnNpb25QYXJ0fWA7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVJlZGlyZWN0VXJpKHJlZGlyZWN0VXJpPzogc3RyaW5nLCBkb21haW5OYW1lcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBpZiAocmVkaXJlY3RVcmkpIHtcbiAgICAgIHJldHVybiByZWRpcmVjdFVyaTtcbiAgICB9XG4gICAgaWYgKCFkb21haW5OYW1lcyB8fCBkb21haW5OYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIHJlZGlyZWN0VXJpIG9yIGRvbWFpbk5hbWVzIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGBodHRwczovLyR7ZG9tYWluTmFtZXNbMF19L29hdXRoMi9jYWxsYmFja2A7XG4gIH1cblxuICBwcml2YXRlIGxvYWRBbmRSZXBsYWNlQXV0aENoZWNrQ29kZSh0ZW5hbnRJZDogc3RyaW5nLCBjbGllbnRJZDogc3RyaW5nLCByZWRpcmVjdFVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2RlUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9jbG91ZGZyb250LWZ1bmN0aW9ucy9hdXRoLWNoZWNrLmpzJyk7XG4gICAgbGV0IGNvZGUgPSBmcy5yZWFkRmlsZVN5bmMoY29kZVBhdGgsICd1dGYtOCcpO1xuICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoJ1RFTkFOVF9JRF9QTEFDRUhPTERFUicsIHRlbmFudElkKTtcbiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCdDTElFTlRfSURfUExBQ0VIT0xERVInLCBjbGllbnRJZCk7XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZSgnUkVESVJFQ1RfVVJJX1BMQUNFSE9MREVSJywgcmVkaXJlY3RVcmkpO1xuICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoJ0NPT0tJRV9ET01BSU5fUExBQ0VIT0xERVInLCB0aGlzLmNvb2tpZURvbWFpbik7XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZSgvRU5BQkxFX0hFQURFUl9JTkpFQ1RJT05fUExBQ0VIT0xERVIvZywgU3RyaW5nKHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uKSk7XG4gICAgaWYgKHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uICYmIE9iamVjdC5rZXlzKHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX01BUF9QTEFDRUhPTERFUi9nLCBKU09OLnN0cmluZ2lmeSh0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcykpO1xuICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvSEVBREVSX0lOSkVDVElPTl9LRVlTX1BMQUNFSE9MREVSL2csIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9IRUFERVJfSU5KRUNUSU9OX01BUF9QTEFDRUhPTERFUi9nLCAne30nKTtcbiAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL0hFQURFUl9JTkpFQ1RJT05fS0VZU19QTEFDRUhPTERFUi9nLCAnW10nKTtcbiAgICB9XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZSgvRU5BQkxFX1JFRlJFU0hfUExBQ0VIT0xERVIvZywgU3RyaW5nKHRoaXMuZW5hYmxlUmVmcmVzaEVuZHBvaW50KSk7XG5cbiAgICAvLyBNaW5pZnkgdG8gc3RheSB1bmRlciBDbG91ZEZyb250J3MgMTBLQiBmdW5jdGlvbi1zaXplIGxpbWl0LiB0ZXJzZXIgY2Fubm90XG4gICAgLy8gcGFyc2UgdGhlIEVTIGBpbXBvcnRgIGluIHNjcmlwdCBtb2RlLCBhbmQgQ2xvdWRGcm9udCBuZWVkcyB0aGUgaW1wb3J0LFxuICAgIC8vIGB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylgLCBhbmQgYGNvbnN0IGt2c0hhbmRsZSA9IGNmLmt2cygpYCBhdCB0aGVcbiAgICAvLyB0b3AgbGV2ZWwsIHNvIGV4dHJhY3QgdGhhdCBwcmVhbWJsZSwgbWluaWZ5IHRoZSBib2R5LCBhbmQgcHJlcGVuZCBpdCBiYWNrIOKAlFxuICAgIC8vIHRoZSBzYW1lIHNoYXBlIEZ1bmN0aW9uQ29tcG9zZXIuY29tcG9zZSgpIHVzZXMuXG4gICAgY29uc3QgY2ZJbXBvcnQgPSBcImltcG9ydCBjZiBmcm9tICdjbG91ZGZyb250JztcXG5cIjtcbiAgICBjb25zdCBjcnlwdG9SZXF1aXJlID0gXCJ2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XFxuXCI7XG4gICAgY29uc3Qga3ZzRGVjbCA9ICdjb25zdCBrdnNIYW5kbGUgPSBjZi5rdnMoKTtcXG4nO1xuICAgIGNvbnN0IGJvZHkgPSBjb2RlXG4gICAgICAucmVwbGFjZSgvaW1wb3J0IGNmIGZyb20gJ2Nsb3VkZnJvbnQnO1xccyovZywgJycpXG4gICAgICAucmVwbGFjZSgvdmFyIGNyeXB0byA9IHJlcXVpcmVcXCgnY3J5cHRvJ1xcKTtcXHMqL2csICcnKVxuICAgICAgLnJlcGxhY2UoL2NvbnN0IGt2c0hhbmRsZSA9IGNmXFwua3ZzXFwoXFwpO1xccyovZywgJycpO1xuICAgIHJldHVybiBjZkltcG9ydCArIGNyeXB0b1JlcXVpcmUgKyBrdnNEZWNsICsgbWluaWZ5RnVuY3Rpb25Db2RlKGJvZHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQW5kUmVwbGFjZVVzZXJJbmZvQ29kZShuYW1lRmllbGRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgY29kZVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vY2xvdWRmcm9udC1mdW5jdGlvbnMvdXNlcmluZm8tZW5kcG9pbnQuanMnKTtcbiAgICBsZXQgY29kZSA9IGZzLnJlYWRGaWxlU3luYyhjb2RlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBuYW1lRmllbGRzIGFycmF5IHdpdGggdGhlIHByb3ZpZGVkIGZpZWxkc1xuICAgIGNvbnN0IG5hbWVGaWVsZHNKc29uID0gSlNPTi5zdHJpbmdpZnkobmFtZUZpZWxkcyk7XG4gICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgIFwidmFyIG5hbWVGaWVsZHMgPSBbJ2tleTEnLCAna2V5MicsICdrZXkzJ107XCIsXG4gICAgICBgdmFyIG5hbWVGaWVsZHMgPSAke25hbWVGaWVsZHNKc29ufTtgLFxuICAgICk7XG5cbiAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "main": "lib/index.js",
61
61
  "license": "Apache-2.0",
62
- "version": "0.0.39",
62
+ "version": "0.0.41",
63
63
  "jest": {
64
64
  "coverageProvider": "v8",
65
65
  "testMatch": [