@1money/component-ui 0.0.75 → 0.0.77

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 (153) hide show
  1. package/es/components/ProForm/ProForm.d.ts +1 -1
  2. package/es/components/ProForm/ProForm.js +46 -34
  3. package/es/components/ProForm/ProFormDependency.d.ts +2 -1
  4. package/es/components/ProForm/ProFormDependency.js +6 -16
  5. package/es/components/ProForm/ProFormItem.d.ts +7 -2
  6. package/es/components/ProForm/ProFormItem.js +5 -7
  7. package/es/components/ProForm/ProFormList.d.ts +6 -1
  8. package/es/components/ProForm/ProFormList.js +122 -42
  9. package/es/components/ProForm/SchemaForm.d.ts +1 -1
  10. package/es/components/ProForm/SchemaForm.js +8 -5
  11. package/es/components/ProForm/context.d.ts +8 -7
  12. package/es/components/ProForm/context.js +1 -1
  13. package/es/components/ProForm/core/constants.d.ts +3 -1
  14. package/es/components/ProForm/core/constants.js +8 -2
  15. package/es/components/ProForm/core/devWarning.d.ts +3 -0
  16. package/es/components/ProForm/core/devWarning.js +22 -0
  17. package/es/components/ProForm/core/formStore.d.ts +14 -6
  18. package/es/components/ProForm/core/formStore.js +21 -2
  19. package/es/components/ProForm/core/hooks/useForm.d.ts +1 -1
  20. package/es/components/ProForm/core/hooks/useForm.js +275 -107
  21. package/es/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
  22. package/es/components/ProForm/core/hooks/useFormCore.js +121 -121
  23. package/es/components/ProForm/core/interface.d.ts +157 -103
  24. package/es/components/ProForm/core/namePathType.d.ts +25 -0
  25. package/es/components/ProForm/core/namePathType.js +2 -0
  26. package/es/components/ProForm/core/pathUtils.d.ts +5 -3
  27. package/es/components/ProForm/core/pathUtils.js +19 -1
  28. package/es/components/ProForm/core/runRules.d.ts +40 -17
  29. package/es/components/ProForm/core/runRules.js +480 -136
  30. package/es/components/ProForm/core/useFormItem.d.ts +7 -8
  31. package/es/components/ProForm/core/useFormItem.js +52 -82
  32. package/es/components/ProForm/core/validationError.d.ts +13 -0
  33. package/es/components/ProForm/core/validationError.js +29 -0
  34. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
  35. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
  36. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
  37. package/es/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
  38. package/es/components/ProForm/fields/ProFormDatePicker.js +1 -1
  39. package/es/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
  40. package/es/components/ProForm/fields/ProFormFieldSet.js +49 -12
  41. package/es/components/ProForm/fields/ProFormPassword.d.ts +1 -1
  42. package/es/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
  43. package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
  44. package/es/components/ProForm/fields/ProFormSelect.d.ts +1 -1
  45. package/es/components/ProForm/fields/ProFormSelect.js +13 -7
  46. package/es/components/ProForm/fields/ProFormSlider.d.ts +1 -1
  47. package/es/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
  48. package/es/components/ProForm/fields/ProFormText.d.ts +1 -1
  49. package/es/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
  50. package/es/components/ProForm/fields/ProFormUpload.d.ts +1 -1
  51. package/es/components/ProForm/fields/ProFormUpload.js +1 -1
  52. package/es/components/ProForm/fields/createProFormField.d.ts +8 -2
  53. package/es/components/ProForm/fields/createProFormField.js +20 -27
  54. package/es/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
  55. package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
  56. package/es/components/ProForm/hooks/useUrlSync.d.ts +8 -7
  57. package/es/components/ProForm/hooks/useUrlSync.js +1 -1
  58. package/es/components/ProForm/index.d.ts +37 -27
  59. package/es/components/ProForm/index.js +4 -1
  60. package/es/components/ProForm/interface.d.ts +115 -119
  61. package/es/components/ProForm/layouts/DialogForm.d.ts +1 -1
  62. package/es/components/ProForm/layouts/DialogForm.js +1 -1
  63. package/es/components/ProForm/layouts/DrawerForm.d.ts +1 -1
  64. package/es/components/ProForm/layouts/DrawerForm.js +1 -1
  65. package/es/components/ProForm/layouts/QueryFilter.d.ts +1 -1
  66. package/es/components/ProForm/layouts/QueryFilter.js +24 -16
  67. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  68. package/es/components/ProForm/layouts/useOverlayForm.js +1 -1
  69. package/es/components/ProForm/utils.d.ts +15 -7
  70. package/es/components/ProForm/utils.js +51 -3
  71. package/es/components/Table/core/useTableSetup.js +2 -2
  72. package/es/components/Table/interface.d.ts +1 -1
  73. package/es/index.css +1 -1
  74. package/es/index.d.ts +1 -1
  75. package/es/index.js +1 -1
  76. package/lib/components/ProForm/ProForm.d.ts +1 -1
  77. package/lib/components/ProForm/ProForm.js +45 -33
  78. package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
  79. package/lib/components/ProForm/ProFormDependency.js +5 -15
  80. package/lib/components/ProForm/ProFormItem.d.ts +7 -2
  81. package/lib/components/ProForm/ProFormItem.js +5 -7
  82. package/lib/components/ProForm/ProFormList.d.ts +6 -1
  83. package/lib/components/ProForm/ProFormList.js +120 -40
  84. package/lib/components/ProForm/SchemaForm.d.ts +1 -1
  85. package/lib/components/ProForm/SchemaForm.js +8 -5
  86. package/lib/components/ProForm/context.d.ts +8 -7
  87. package/lib/components/ProForm/context.js +1 -1
  88. package/lib/components/ProForm/core/constants.d.ts +3 -1
  89. package/lib/components/ProForm/core/constants.js +9 -3
  90. package/lib/components/ProForm/core/devWarning.d.ts +3 -0
  91. package/lib/components/ProForm/core/devWarning.js +29 -0
  92. package/lib/components/ProForm/core/formStore.d.ts +14 -6
  93. package/lib/components/ProForm/core/formStore.js +23 -2
  94. package/lib/components/ProForm/core/hooks/useForm.d.ts +1 -1
  95. package/lib/components/ProForm/core/hooks/useForm.js +271 -103
  96. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
  97. package/lib/components/ProForm/core/hooks/useFormCore.js +119 -119
  98. package/lib/components/ProForm/core/interface.d.ts +157 -103
  99. package/lib/components/ProForm/core/namePathType.d.ts +25 -0
  100. package/lib/components/ProForm/core/namePathType.js +6 -0
  101. package/lib/components/ProForm/core/pathUtils.d.ts +5 -3
  102. package/lib/components/ProForm/core/pathUtils.js +20 -1
  103. package/lib/components/ProForm/core/runRules.d.ts +40 -17
  104. package/lib/components/ProForm/core/runRules.js +483 -137
  105. package/lib/components/ProForm/core/useFormItem.d.ts +7 -8
  106. package/lib/components/ProForm/core/useFormItem.js +54 -84
  107. package/lib/components/ProForm/core/validationError.d.ts +13 -0
  108. package/lib/components/ProForm/core/validationError.js +36 -0
  109. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
  110. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
  111. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
  112. package/lib/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
  113. package/lib/components/ProForm/fields/ProFormDatePicker.js +1 -1
  114. package/lib/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
  115. package/lib/components/ProForm/fields/ProFormFieldSet.js +49 -12
  116. package/lib/components/ProForm/fields/ProFormPassword.d.ts +1 -1
  117. package/lib/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
  118. package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
  119. package/lib/components/ProForm/fields/ProFormSelect.d.ts +1 -1
  120. package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
  121. package/lib/components/ProForm/fields/ProFormSlider.d.ts +1 -1
  122. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
  123. package/lib/components/ProForm/fields/ProFormText.d.ts +1 -1
  124. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
  125. package/lib/components/ProForm/fields/ProFormUpload.d.ts +1 -1
  126. package/lib/components/ProForm/fields/ProFormUpload.js +1 -1
  127. package/lib/components/ProForm/fields/createProFormField.d.ts +8 -2
  128. package/lib/components/ProForm/fields/createProFormField.js +20 -27
  129. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
  130. package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
  131. package/lib/components/ProForm/hooks/useUrlSync.d.ts +8 -7
  132. package/lib/components/ProForm/hooks/useUrlSync.js +1 -1
  133. package/lib/components/ProForm/index.d.ts +37 -27
  134. package/lib/components/ProForm/index.js +10 -1
  135. package/lib/components/ProForm/interface.d.ts +115 -119
  136. package/lib/components/ProForm/layouts/DialogForm.d.ts +1 -1
  137. package/lib/components/ProForm/layouts/DialogForm.js +1 -1
  138. package/lib/components/ProForm/layouts/DrawerForm.d.ts +1 -1
  139. package/lib/components/ProForm/layouts/DrawerForm.js +1 -1
  140. package/lib/components/ProForm/layouts/QueryFilter.d.ts +1 -1
  141. package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
  142. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  143. package/lib/components/ProForm/layouts/useOverlayForm.js +1 -1
  144. package/lib/components/ProForm/utils.d.ts +15 -7
  145. package/lib/components/ProForm/utils.js +52 -3
  146. package/lib/components/Table/core/useTableSetup.js +2 -2
  147. package/lib/components/Table/interface.d.ts +1 -1
  148. package/lib/index.css +1 -1
  149. package/lib/index.d.ts +1 -1
  150. package/lib/index.js +1 -1
  151. package/package.json +1 -1
  152. package/scripts/mcp-server/examples.generated.json +95 -53
  153. package/scripts/mcp-server/index.generated.json +1715 -185
@@ -128,7 +128,6 @@ var ProFormItemBase = function ProFormItemBase(props) {
128
128
  label = _mergedProps.label,
129
129
  description = _mergedProps.description,
130
130
  rules = _mergedProps.rules,
131
- required = _mergedProps.required,
132
131
  feedback = _mergedProps.feedback,
133
132
  validateStatus = _mergedProps.validateStatus,
134
133
  _mergedProps$classNam = _mergedProps.className,
@@ -146,23 +145,22 @@ var ProFormItemBase = function ProFormItemBase(props) {
146
145
  emptyText = _mergedProps$emptyTex === void 0 ? EMPTY_TEXT_DEFAULT : _mergedProps$emptyTex,
147
146
  valueEnum = _mergedProps.valueEnum,
148
147
  valuePropName = _mergedProps.valuePropName,
149
- validateDebounce = _mergedProps.validateDebounce;
148
+ validateDebounce = _mergedProps.validateDebounce,
149
+ validateTrigger = _mergedProps.validateTrigger;
150
150
  var mergedMode = modeProp !== null && modeProp !== void 0 ? modeProp : ctx.mode;
151
151
  var isReadonly = mergedMode === 'read';
152
152
  var _useFormItem = useFormItem({
153
153
  name: name,
154
154
  rules: rules,
155
- required: required,
156
155
  validateStatus: validateStatus,
157
156
  valuePropName: valuePropName,
158
- validateDebounce: validateDebounce
157
+ validateDebounce: validateDebounce,
158
+ validateTrigger: validateTrigger
159
159
  }),
160
160
  fieldError = _useFormItem.fieldError,
161
161
  fieldWarning = _useFormItem.fieldWarning,
162
- isRequired = _useFormItem.isRequired,
163
162
  size = _useFormItem.size,
164
163
  labelAlign = _useFormItem.labelAlign,
165
- requiredMark = _useFormItem.requiredMark,
166
164
  injectField = _useFormItem.injectField;
167
165
  // Register transform / valueType DURING render (idempotent ref writes, like
168
166
  // registerField): consumers rendered later in the same pass — e.g. a
@@ -311,4 +309,4 @@ var ProFormItemBase = function ProFormItemBase(props) {
311
309
  ProFormItemBase.displayName = 'ProFormItem';
312
310
  export var ProFormItem = /*#__PURE__*/memo(ProFormItemBase);
313
311
  export default ProFormItem;
314
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS50c3giXSwibmFtZXMiOlsianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIlJlYWN0IiwibWVtbyIsInVzZUVmZmVjdCIsInVzZVJlZiIsIkNvbCIsIlR5cG9ncmFwaHlCb2R5IiwiVHlwb2dyYXBoeUxhYmVsIiwiZGVmYXVsdCIsImNsYXNzbmFtZXMiLCJqb2luQ2xzIiwidXNlRm9ybUl0ZW0iLCJGT1JNX0VSUk9SX0NPTE9SIiwiRk9STV9FUlJPUl9TSVpFIiwiRk9STV9XQVJOSU5HX0NPTE9SIiwiRk9STV9XQVJOSU5HX1NJWkUiLCJGT1JNX0RFU0NSSVBUSU9OX0NPTE9SIiwiRk9STV9ERVNDUklQVElPTl9TSVpFIiwiRk9STV9GRUVEQkFDS19DT0xPUiIsIkZPUk1fRkVFREJBQ0tfU0laRSIsIkZPUk1fTEFCRUxfQ09MT1IiLCJGT1JNX0xBQkVMX1NJWkVTIiwidXNlUHJvRm9ybVN0YWJsZSIsInVzZVByb0Zvcm1TdG9yZSIsInVzZVN0b3JlU2VsZWN0b3IiLCJzaGFsbG93RXF1YWxBcnJheXMiLCJyZXNvbHZlVmFsdWUiLCJERUZBVUxUX0NPTF9TUEFOIiwidmFsdWVFbnVtVG9PcHRpb25zIiwiZm9ybWF0RGF0ZUJ5UGF0dGVybiIsIkRBVEVfRk9STUFUIiwiREFURV9USU1FX0ZPUk1BVCIsIkVNUFRZX1RFWFRfREVGQVVMVCIsInJlbmRlckJ5VmFsdWVUeXBlIiwidmFsdWVUeXBlIiwidmFsdWUiLCJwcm9wcyIsInVuZGVmaW5lZCIsInJlcGVhdCIsIlN0cmluZyIsImxlbmd0aCIsIm51bSIsIk51bWJlciIsImlzTmFOIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZUVudW0iLCJvcHRpb25zIiwibWF0Y2giLCJmaW5kIiwibyIsImxhYmVsIiwiRGF0ZSIsIlJlYWRvbmx5Q2hpbGRCYXNlIiwiX3JlZiIsIm5hbWUiLCJjb252ZXJ0VmFsdWUiLCJyZWFkb25seVJlbmRlciIsImVtcHR5VGV4dCIsInN0b3JlIiwiX3VzZVN0b3JlU2VsZWN0b3IiLCJzdGF0ZSIsInZhbHVlcyIsIl91c2VTdG9yZVNlbGVjdG9yMiIsIl9zbGljZWRUb0FycmF5IiwicmF3IiwiYWxsVmFsdWVzIiwibm9kZSIsImdldFN0YXRlIiwiY2hpbGRyZW4iLCJyZW5kZXJlZCIsImRpc3BsYXlOYW1lIiwiUmVhZG9ubHlDaGlsZCIsIkNvbnZlcnRWYWx1ZUNoaWxkQmFzZSIsIl9yZWYyIiwiX3JlZjIkdmFsdWVQcm9wTmFtZSIsInZhbHVlUHJvcE5hbWUiLCJjb252ZXJ0ZWQiLCJjbG9uZUVsZW1lbnQiLCJfZGVmaW5lUHJvcGVydHkiLCJDb252ZXJ0VmFsdWVDaGlsZCIsIlByb0Zvcm1JdGVtQmFzZSIsIl9hIiwiY3R4IiwibWVyZ2VkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwibWVyZ2VkIiwiT2JqZWN0IiwiYXNzaWduIiwiX2kiLCJfT2JqZWN0JGtleXMiLCJrZXlzIiwia2V5IiwiX21lcmdlZFByb3BzIiwiZGVzY3JpcHRpb24iLCJydWxlcyIsInJlcXVpcmVkIiwiZmVlZGJhY2siLCJ2YWxpZGF0ZVN0YXR1cyIsIl9tZXJnZWRQcm9wcyRjbGFzc05hbSIsImNsYXNzTmFtZSIsIl9tZXJnZWRQcm9wcyRwcmVmaXhDbCIsInByZWZpeENscyIsImhpZGRlbiIsInRyYW5zZm9ybSIsImNvbFByb3BzIiwibW9kZVByb3AiLCJtb2RlIiwiX21lcmdlZFByb3BzJGVtcHR5VGV4IiwidmFsaWRhdGVEZWJvdW5jZSIsIm1lcmdlZE1vZGUiLCJpc1JlYWRvbmx5IiwiX3VzZUZvcm1JdGVtIiwiZmllbGRFcnJvciIsImZpZWxkV2FybmluZyIsImlzUmVxdWlyZWQiLCJzaXplIiwibGFiZWxBbGlnbiIsInJlcXVpcmVkTWFyayIsImluamVjdEZpZWxkIiwib3duVHJhbnNmb3JtUmVmIiwib3duVmFsdWVUeXBlUmVmIiwicHJldlRyYW5zZm9ybSIsImN1cnJlbnQiLCJ1bnJlZ2lzdGVyVHJhbnNmb3JtIiwiZm4iLCJyZWdpc3RlclRyYW5zZm9ybSIsInByZXZWYWx1ZVR5cGUiLCJ1bnJlZ2lzdGVyVmFsdWVUeXBlIiwicmVnaXN0ZXJWYWx1ZVR5cGUiLCJ0cmFuc2Zvcm1SZWciLCJ2YWx1ZVR5cGVSZWciLCJ0IiwidiIsImNvbnRyb2xDaGlsZCIsImluamVjdGVkIiwiaXNWYWxpZEVsZW1lbnQiLCJjbGFzc2VzIiwiaXRlbUdhcCIsImxheW91dCIsImdhcFN0eWxlIiwibWFyZ2luQm90dG9tIiwiY29uY2F0Iiwic2hlbGwiLCJzdHlsZSIsImFzIiwiY29sb3IiLCJncmlkIiwiX21lcmdlZCRzcGFuIiwic3BhbiIsInNtIiwibWQiLCJsZyIsIlByb0Zvcm1JdGVtIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLEdBQUcsSUFBSUMsSUFBSSxFQUFFQyxJQUFJLElBQUlDLEtBQUssUUFBUSxtQkFBbUI7QUNBOUQsT0FBT0MsS0FBSyxJQUFJQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFFdEQsU0FBU0MsR0FBRyxRQUFRLFNBQVM7QUFDN0IsU0FBU0MsY0FBYyxFQUFFQyxlQUFlLFFBQVEsZUFBZTtBQUMvRCxTQUFTQyxPQUFPLElBQUlDLFVBQVUsRUFBRUMsT0FBTyxRQUFRLHdCQUF3QjtBQUN2RSxTQUFTQyxXQUFXLFFBQVEsb0JBQW9CO0FBQ2hELFNBQ0VDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsc0JBQXNCLEVBQ3RCQyxxQkFBcUIsRUFDckJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLGdCQUFnQixRQUNYLGtCQUFrQjtBQUN6QixTQUFTQyxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFRLFdBQVc7QUFDN0QsU0FBU0MsZ0JBQWdCLEVBQUVDLGtCQUFrQixRQUFRLGtCQUFrQjtBQUN2RSxTQUFTQyxZQUFZLFFBQVEsa0JBQWtCO0FBQy9D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d0gsWUFBQTtNQUFFRSxFQUFFLEdBQWFoRSxPQUFNLENBQXJCZ0UsRUFBRTtNQUFFQyxFQUFFLEdBQVNqRSxPQUFNLENBQWpCaUUsRUFBRTtNQUFFQyxFQUFFLEdBQUtsRSxPQUFNLENBQWJrRSxFQUFFO0lBQzNDLE9BQU96SixJQUFBLENBQUNPLEdBQUcsRUFBQTtNQUFDK0ksSUFBSSxFQUFFQSxJQUFJO01BQUVDLEVBQUUsRUFBRUEsRUFBRTtNQUFFQyxFQUFFLEVBQUVBLEVBQUU7TUFBRUMsRUFBRSxFQUFFQSxFQUFFO01BQUFuRixRQUFBLEVBQUcwRTtJQUFLLENBQUEsQ0FBTztFQUMvRDtFQUVBLE9BQU9BLEtBQUs7QUFDZCxDQUFDO0FBRUQ5RCxlQUFlLENBQUNWLFdBQVcsR0FBRyxhQUFhO0FBRTNDLE9BQU8sSUFBTWtGLFdBQVcsZ0JBQUd0SixJQUFJLENBQUM4RSxlQUFlLENBQUM7QUFFaEQsZUFBZXdFLFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm1JdGVtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvbCB9IGZyb20gJy4uL0dyaWQnO1xuaW1wb3J0IHsgVHlwb2dyYXBoeUJvZHksIFR5cG9ncmFwaHlMYWJlbCB9IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzLCBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VGb3JtSXRlbSB9IGZyb20gJy4vY29yZS91c2VGb3JtSXRlbSc7XG5pbXBvcnQgeyBGT1JNX0VSUk9SX0NPTE9SLCBGT1JNX0VSUk9SX1NJWkUsIEZPUk1fV0FSTklOR19DT0xPUiwgRk9STV9XQVJOSU5HX1NJWkUsIEZPUk1fREVTQ1JJUFRJT05fQ09MT1IsIEZPUk1fREVTQ1JJUFRJT05fU0laRSwgRk9STV9GRUVEQkFDS19DT0xPUiwgRk9STV9GRUVEQkFDS19TSVpFLCBGT1JNX0xBQkVMX0NPTE9SLCBGT1JNX0xBQkVMX1NJWkVTLCB9IGZyb20gJy4vY29yZS9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlUHJvRm9ybVN0YWJsZSwgdXNlUHJvRm9ybVN0b3JlIH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IHVzZVN0b3JlU2VsZWN0b3IsIHNoYWxsb3dFcXVhbEFycmF5cyB9IGZyb20gJy4vY29yZS9mb3JtU3RvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi9jb3JlL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTF9TUEFOIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsdWVFbnVtVG9PcHRpb25zLCBmb3JtYXREYXRlQnlQYXR0ZXJuLCBEQVRFX0ZPUk1BVCwgREFURV9USU1FX0ZPUk1BVCB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgRU1QVFlfVEVYVF9ERUZBVUxUID0gJy0nO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWFkLW1vZGUgcmVuZGVyaW5nIGZvciBlYWNoIHN1cHBvcnRlZCB2YWx1ZVR5cGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gcmVuZGVyQnlWYWx1ZVR5cGUodmFsdWVUeXBlLCB2YWx1ZSwgcHJvcHMpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgICAgICAgIHJldHVybiAnKicucmVwZWF0KFN0cmluZyh2YWx1ZSkubGVuZ3RoKTtcbiAgICAgICAgY2FzZSAnc3dpdGNoJzpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICdPbicgOiAnT2ZmJztcbiAgICAgICAgY2FzZSAnZGlnaXQnOiB7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihudW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG51bS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgICAgY2FzZSAndGFnJzoge1xuICAgICAgICAgICAgaWYgKCFwcm9wcy52YWx1ZUVudW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVFbnVtVG9PcHRpb25zKHByb3BzLnZhbHVlRW51bSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IG9wdGlvbnMuZmluZCgobykgPT4gU3RyaW5nKG8udmFsdWUpID09PSBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoLmxhYmVsIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBmb3JtYXREYXRlQnlQYXR0ZXJuKHZhbHVlLCBEQVRFX0ZPUk1BVCkgOiBTdHJpbmcodmFsdWUpO1xuICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZm9ybWF0RGF0ZUJ5UGF0dGVybih2YWx1ZSwgREFURV9USU1FX0ZPUk1BVCkgOiBTdHJpbmcodmFsdWUpO1xuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbn1cbmNvbnN0IFJlYWRvbmx5Q2hpbGRCYXNlID0gKHsgbmFtZSwgdmFsdWVUeXBlLCB2YWx1ZUVudW0sIGNvbnZlcnRWYWx1ZSwgcmVhZG9ubHlSZW5kZXIsIGVtcHR5VGV4dCwgfSkgPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gdXNlUHJvRm9ybVN0b3JlKCk7XG4gICAgLy8gU3Vic2NyaWJlIHBlci1maWVsZDsgb25seSBhIGN1c3RvbSByZWFkb25seVJlbmRlciAod2hpY2ggcmVjZWl2ZXMgQUxMXG4gICAgLy8gdmFsdWVzKSBuZWVkcyB0byB0cmFjayB0aGUgd2hvbGUgdmFsdWVzIG9iamVjdC5cbiAgICBjb25zdCBbcmF3LCBhbGxWYWx1ZXNdID0gdXNlU3RvcmVTZWxlY3RvcihzdG9yZSwgKHN0YXRlKSA9PiBbXG4gICAgICAgIG5hbWUgPyByZXNvbHZlVmFsdWUoc3RhdGUudmFsdWVzLCBuYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVhZG9ubHlSZW5kZXIgPyBzdGF0ZS52YWx1ZXMgOiB1bmRlZmluZWQsXG4gICAgXSwgc2hhbGxvd0VxdWFsQXJyYXlzKTtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZSAmJiBuYW1lID8gY29udmVydFZhbHVlKHJhdywgbmFtZSkgOiByYXc7XG4gICAgaWYgKHJlYWRvbmx5UmVuZGVyKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByZWFkb25seVJlbmRlcih2YWx1ZSwgYWxsVmFsdWVzICE9PSBudWxsICYmIGFsbFZhbHVlcyAhPT0gdm9pZCAwID8gYWxsVmFsdWVzIDogc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXMpO1xuICAgICAgICByZXR1cm4gX2pzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogbm9kZSAhPT0gbnVsbCAmJiBub2RlICE9PSB2b2lkIDAgPyBub2RlIDogZW1wdHlUZXh0IH0pO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IGVtcHR5VGV4dCB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVyZWQgPSByZW5kZXJCeVZhbHVlVHlwZSh2YWx1ZVR5cGUsIHZhbHVlLCB7IHZhbHVlRW51bSB9KTtcbiAgICByZXR1cm4gX2pzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogcmVuZGVyZWQgIT09IG51bGwgJiYgcmVuZGVyZWQgIT09IHZvaWQgMCA/IHJlbmRlcmVkIDogZW1wdHlUZXh0IH0pO1xufTtcblJlYWRvbmx5Q2hpbGRCYXNlLmRpc3BsYXlOYW1lID0gJ1Byb0Zvcm1JdGVtUmVhZG9ubHknO1xuY29uc3QgUmVhZG9ubHlDaGlsZCA9IG1lbW8oUmVhZG9ubHlDaGlsZEJhc2UpO1xuY29uc3QgQ29udmVydFZhbHVlQ2hpbGRCYXNlID0gKHsgbmFtZSwgY29udmVydFZhbHVlLCB2YWx1ZVByb3BOYW1lID0gJ3ZhbHVlJywgY2hpbGRyZW4sIH0pID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVByb0Zvcm1TdG9yZSgpO1xuICAgIGNvbnN0IHJhdyA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4gcmVzb2x2ZVZhbHVlKHN0YXRlLnZhbHVlcywgbmFtZSkpO1xuICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRWYWx1ZSA/IGNvbnZlcnRWYWx1ZShyYXcsIG5hbWUpIDogcmF3O1xuICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHsgW3ZhbHVlUHJvcE5hbWVdOiBjb252ZXJ0ZWQgfSk7XG59O1xuQ29udmVydFZhbHVlQ2hpbGRCYXNlLmRpc3BsYXlOYW1lID0gJ1Byb0Zvcm1JdGVtQ29udmVydFZhbHVlJztcbmNvbnN0IENvbnZlcnRWYWx1ZUNoaWxkID0gbWVtbyhDb252ZXJ0VmFsdWVDaGlsZEJhc2UpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcm9Gb3JtSXRlbVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jb25zdCBQcm9Gb3JtSXRlbUJhc2UgPSAocHJvcHMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgLy8gU3RhYmxlIHNsaWNlIG9ubHkg4oCUIHZhbHVlL2Vycm9yIHJlYWN0aXZpdHkgbGl2ZXMgaW4gdXNlRm9ybUl0ZW0nc1xuICAgIC8vIHBlci1maWVsZCBzdWJzY3JpcHRpb24sIHNvIHRoaXMgc2hlbGwgbmV2ZXIgcmUtcmVuZGVycyBmb3Igc2libGluZ3MuXG4gICAgY29uc3QgY3R4ID0gdXNlUHJvRm9ybVN0YWJsZSgpO1xuICAgIC8vIEZvcm0tbGV2ZWwgYGZvcm1JdGVtUHJvcHNgIGFjdCBhcyBERUZBVUxUUzsgcHJvcHMgZXhwbGljaXRseSBzZXQgb24gdGhlXG4gICAgLy8gaXRlbSB3aW4uIEpTWCBmcmVxdWVudGx5IHBhc3NlcyBgdW5kZWZpbmVkYCBmb3IgdW5zZXQgcHJvcHMgKGUuZy4gdGhlXG4gICAgLy8gY3JlYXRlUHJvRm9ybUZpZWxkIHBhc3MtdGhyb3VnaCksIHNvIG9ubHkgZGVmaW5lZCB2YWx1ZXMgbWF5IG92ZXJyaWRlLlxuICAgIGxldCBtZXJnZWRQcm9wcyA9IHByb3BzO1xuICAgIGlmIChjdHguZm9ybUl0ZW1Qcm9wcykge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKHt9LCBjdHguZm9ybUl0ZW1Qcm9wcyk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgbWVyZ2VkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZWRQcm9wcyA9IG1lcmdlZDtcbiAgICB9XG4gICAgY29uc3QgeyBjaGlsZHJlbiwgbmFtZSwgbGFiZWwsIGRlc2NyaXB0aW9uLCBydWxlcywgcmVxdWlyZWQsIGZlZWRiYWNrLCB2YWxpZGF0ZVN0YXR1cywgY2xhc3NOYW1lID0gJycsIHByZWZpeENscyA9ICdmb3JtLWl0ZW0nLCBoaWRkZW4sIHRyYW5zZm9ybSwgY29udmVydFZhbHVlLCB2YWx1ZVR5cGUsIHJlYWRvbmx5UmVuZGVyLCBjb2xQcm9wcywgbW9kZTogbW9kZVByb3AsIGVtcHR5VGV4dCA9IEVNUFRZX1RFWFRfREVGQVVMVCwgdmFsdWVFbnVtLCB2YWx1ZVByb3BOYW1lLCB2YWxpZGF0ZURlYm91bmNlLCB9ID0gbWVyZ2VkUHJvcHM7XG4gICAgY29uc3QgbWVyZ2VkTW9kZSA9IG1vZGVQcm9wICE9PSBudWxsICYmIG1vZGVQcm9wICE9PSB2b2lkIDAgPyBtb2RlUHJvcCA6IGN0eC5tb2RlO1xuICAgIGNvbnN0IGlzUmVhZG9ubHkgPSBtZXJnZWRNb2RlID09PSAncmVhZCc7XG4gICAgY29uc3QgeyBmaWVsZEVycm9yLCBmaWVsZFdhcm5pbmcsIGlzUmVxdWlyZWQsIHNpemUsIGxhYmVsQWxpZ24sIHJlcXVpcmVkTWFyaywgaW5qZWN0RmllbGQsIH0gPSB1c2VGb3JtSXRlbSh7IG5hbWUsIHJ1bGVzLCByZXF1aXJlZCwgdmFsaWRhdGVTdGF0dXMsIHZhbHVlUHJvcE5hbWUsIHZhbGlkYXRlRGVib3VuY2UgfSk7XG4gICAgLy8gUmVnaXN0ZXIgdHJhbnNmb3JtIC8gdmFsdWVUeXBlIERVUklORyByZW5kZXIgKGlkZW1wb3RlbnQgcmVmIHdyaXRlcywgbGlrZVxuICAgIC8vIHJlZ2lzdGVyRmllbGQpOiBjb25zdW1lcnMgcmVuZGVyZWQgbGF0ZXIgaW4gdGhlIHNhbWUgcGFzcyDigJQgZS5nLiBhXG4gICAgLy8gRGVwZW5kZW5jeSByZWFkaW5nIGZvcm1hdHRlZCB2YWx1ZXMg4oCUIG11c3QgYWxyZWFkeSBzZWUgdGhlbS4gRWZmZWN0c1xuICAgIC8vIHdvdWxkIHJlZ2lzdGVyIHRvbyBsYXRlIChhZnRlciB0aGUgd2hvbGUgdHJlZSByZW5kZXJlZCkuXG4gICAgLy9cbiAgICAvLyBFYWNoIGluc3RhbmNlIHRyYWNrcyB0aGUge25hbWUsIHZhbHVlfSBQQUlSIGl0IHJlZ2lzdGVyZWQuIFJlbW92YWwgaXNcbiAgICAvLyBhbHdheXMgcGVyZm9ybWVkIHdpdGggdGhlIHBhaXIncyBvd24gbmFtZSBBTkQgdmFsdWU6IGFuIGl0ZW0gd2l0aG91dCBhXG4gICAgLy8gdHJhbnNmb3JtIG5ldmVyIHRvdWNoZXMgYSBzYW1lLW5hbWUgc2libGluZydzIHJlZ2lzdHJhdGlvbiwgYW4gdW5tb3VudFxuICAgIC8vIGNsZWFudXAgY2FuJ3Qgd2lwZSBhIHN1Y2Nlc3NvcidzICh2YWx1ZS1ndWFyZGVkKSwgYW5kIGEgTkFNRSBjaGFuZ2VcbiAgICAvLyByZW1vdmVzIHRoZSBvbGQgbmFtZSdzIGVudHJ5IHdpdGggdGhlIE9MRCB2YWx1ZSBiZWZvcmUgdGhlIHJlZiBpc1xuICAgIC8vIG92ZXJ3cml0dGVuIChhIGxpdmUgc2luZ2xlLXZhbHVlIHJlZiB3b3VsZCBsZWFrIGl0KS5cbiAgICBjb25zdCBvd25UcmFuc2Zvcm1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3Qgb3duVmFsdWVUeXBlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHByZXZUcmFuc2Zvcm0gPSBvd25UcmFuc2Zvcm1SZWYuY3VycmVudDtcbiAgICBpZiAocHJldlRyYW5zZm9ybSAmJiAocHJldlRyYW5zZm9ybS5uYW1lICE9PSBuYW1lIHx8ICF0cmFuc2Zvcm0pKSB7XG4gICAgICAgIGN0eC51bnJlZ2lzdGVyVHJhbnNmb3JtKHByZXZUcmFuc2Zvcm0ubmFtZSwgcHJldlRyYW5zZm9ybS5mbik7XG4gICAgICAgIG93blRyYW5zZm9ybVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKG5hbWUgJiYgdHJhbnNmb3JtKSB7XG4gICAgICAgIGN0eC5yZWdpc3RlclRyYW5zZm9ybShuYW1lLCB0cmFuc2Zvcm0pO1xuICAgICAgICBvd25UcmFuc2Zvcm1SZWYuY3VycmVudCA9IHsgbmFtZSwgZm46IHRyYW5zZm9ybSB9O1xuICAgIH1cbiAgICBjb25zdCBwcmV2VmFsdWVUeXBlID0gb3duVmFsdWVUeXBlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHByZXZWYWx1ZVR5cGUgJiYgKHByZXZWYWx1ZVR5cGUubmFtZSAhPT0gbmFtZSB8fCAhdmFsdWVUeXBlKSkge1xuICAgICAgICBjdHgudW5yZWdpc3RlclZhbHVlVHlwZShwcmV2VmFsdWVUeXBlLm5hbWUsIHByZXZWYWx1ZVR5cGUudmFsdWVUeXBlKTtcbiAgICAgICAgb3duVmFsdWVUeXBlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobmFtZSAmJiB2YWx1ZVR5cGUpIHtcbiAgICAgICAgY3R4LnJlZ2lzdGVyVmFsdWVUeXBlKG5hbWUsIHZhbHVlVHlwZSk7XG4gICAgICAgIG93blZhbHVlVHlwZVJlZi5jdXJyZW50ID0geyBuYW1lLCB2YWx1ZVR5cGUgfTtcbiAgICB9XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gUkUtUkVHSVNURVIgaW4gdGhlIGJvZHk6IFN0cmljdE1vZGUncyBtb3VudOKGkmNsZWFudXDihpJyZS1ydW4gY3ljbGUgYW5kXG4gICAgICAgIC8vIGtleWVkIHJlbW91bnRzIChvbGQgaW5zdGFuY2UncyBjbGVhbnVwIHJ1bnMgQUZURVIgdGhlIG5ldyByZW5kZXJcbiAgICAgICAgLy8gcmVnaXN0ZXJlZCkgYm90aCBlbmQgd2l0aCBhIGNsZWFudXAgaGF2aW5nIGRlbGV0ZWQgdGhlIGVudHJ5IOKAlCB0aGVcbiAgICAgICAgLy8gZWZmZWN0IGJvZHkgbXVzdCByZXN0b3JlIHRoZSBsYXRlc3QgcmVnaXN0cmF0aW9uLlxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1SZWcgPSBvd25UcmFuc2Zvcm1SZWYuY3VycmVudDtcbiAgICAgICAgaWYgKHRyYW5zZm9ybVJlZylcbiAgICAgICAgICAgIGN0eC5yZWdpc3RlclRyYW5zZm9ybSh0cmFuc2Zvcm1SZWcubmFtZSwgdHJhbnNmb3JtUmVnLmZuKTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlUmVnID0gb3duVmFsdWVUeXBlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICh2YWx1ZVR5cGVSZWcpXG4gICAgICAgICAgICBjdHgucmVnaXN0ZXJWYWx1ZVR5cGUodmFsdWVUeXBlUmVnLm5hbWUsIHZhbHVlVHlwZVJlZy52YWx1ZVR5cGUpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdCA9IG93blRyYW5zZm9ybVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICAgICAgY3R4LnVucmVnaXN0ZXJUcmFuc2Zvcm0odC5uYW1lLCB0LmZuKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBvd25WYWx1ZVR5cGVSZWYuY3VycmVudDtcbiAgICAgICAgICAgIGlmICh2KVxuICAgICAgICAgICAgICAgIGN0eC51bnJlZ2lzdGVyVmFsdWVUeXBlKHYubmFtZSwgdi52YWx1ZVR5cGUpO1xuICAgICAgICB9O1xuICAgIH0sIFtuYW1lLCBjdHgucmVnaXN0ZXJUcmFuc2Zvcm0sIGN0eC51bnJlZ2lzdGVyVHJhbnNmb3JtLCBjdHgucmVnaXN0ZXJWYWx1ZVR5cGUsIGN0eC51bnJlZ2lzdGVyVmFsdWVUeXBlXSk7XG4gICAgaWYgKGhpZGRlbilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNvbnRyb2xDaGlsZDtcbiAgICBpZiAoaXNSZWFkb25seSkge1xuICAgICAgICBjb250cm9sQ2hpbGQgPSAoX2pzeChSZWFkb25seUNoaWxkLCB7IG5hbWU6IG5hbWUsIHZhbHVlVHlwZTogdmFsdWVUeXBlLCB2YWx1ZUVudW06IHZhbHVlRW51bSwgY29udmVydFZhbHVlOiBjb252ZXJ0VmFsdWUsIHJlYWRvbmx5UmVuZGVyOiByZWFkb25seVJlbmRlciwgZW1wdHlUZXh0OiBlbXB0eVRleHQgfSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gSW5qZWN0IGZpcnN0IHNvIHRoZSByZWFsIGZpZWxkIHJlY2VpdmVzIHZhbHVlL29uQ2hhbmdlL29uQmx1cixcbiAgICAgICAgLy8gdGhlbiBvcHRpb25hbGx5IHdyYXAgaW4gQ29udmVydFZhbHVlQ2hpbGQgdG8gb3ZlcnJpZGUgdGhlIGRpc3BsYXllZCB2YWx1ZS5cbiAgICAgICAgY29uc3QgaW5qZWN0ZWQgPSBpbmplY3RGaWVsZChjaGlsZHJlbik7XG4gICAgICAgIGlmIChjb252ZXJ0VmFsdWUgJiYgbmFtZSAmJiBSZWFjdC5pc1ZhbGlkRWxlbWVudChpbmplY3RlZCkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xDaGlsZCA9IChfanN4KENvbnZlcnRWYWx1ZUNoaWxkLCB7IG5hbWU6IG5hbWUsIGNvbnZlcnRWYWx1ZTogY29udmVydFZhbHVlLCB2YWx1ZVByb3BOYW1lOiB2YWx1ZVByb3BOYW1lLCBjaGlsZHJlbjogaW5qZWN0ZWQgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29udHJvbENoaWxkID0gaW5qZWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMocHJlZml4Q2xzKTtcbiAgICAvLyBGb3JtLWxldmVsIGxheW91dC5pdGVtR2FwIG92ZXJyaWRlcyB0aGUgc2l6ZS1jbGFzcyBtYXJnaW4gKGlubGluZSBzdHlsZVxuICAgIC8vIHdpbnMpOyBpdGVtR2FwPTAgaXMgbWVhbmluZ2Z1bC5cbiAgICBjb25zdCBpdGVtR2FwID0gKF9hID0gY3R4LmxheW91dCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLml0ZW1HYXA7XG4gICAgY29uc3QgZ2FwU3R5bGUgPSBpdGVtR2FwICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IG1hcmdpbkJvdHRvbTogdHlwZW9mIGl0ZW1HYXAgPT09ICdudW1iZXInID8gYCR7aXRlbUdhcH1weGAgOiBpdGVtR2FwIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2hlbGwgPSAoX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXModW5kZWZpbmVkLCBqb2luQ2xzKGNsYXNzZXMoc2l6ZSksIGNsYXNzTmFtZSkpLCBzdHlsZTogZ2FwU3R5bGUsIGNoaWxkcmVuOiBbbGFiZWwgJiYgKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdsYWJlbC13cmFwcGVyJywgam9pbkNscyhjbGFzc2VzKCdsYWJlbC13cmFwcGVyLXZlcnRpY2FsJyksIGxhYmVsQWxpZ24gJiYgY2xhc3NlcyhgbGFiZWwtd3JhcHBlci0ke2xhYmVsQWxpZ259YCkpKSwgY2hpbGRyZW46IFtfanN4KFR5cG9ncmFwaHlMYWJlbCwgeyBhczogXCJsYWJlbFwiLCBzaXplOiBGT1JNX0xBQkVMX1NJWkVTW3NpemVdLCBjb2xvcjogRk9STV9MQUJFTF9DT0xPUiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdsYWJlbCcpLCBjaGlsZHJlbjogbGFiZWwgfSksIGRlc2NyaXB0aW9uICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2Rlc2NyaXB0aW9uJyksIHNpemU6IEZPUk1fREVTQ1JJUFRJT05fU0laRSwgY29sb3I6IEZPUk1fREVTQ1JJUFRJT05fQ09MT1IsIGNoaWxkcmVuOiBkZXNjcmlwdGlvbiB9KSldIH0pKSwgX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2NvbnRyb2wnKSwgY2hpbGRyZW46IFtjb250cm9sQ2hpbGQsIGZpZWxkRXJyb3IgJiYgKF9qc3goVHlwb2dyYXBoeUJvZHksIHsgYXM6IFwiZGl2XCIsIGNsYXNzTmFtZTogY2xhc3NlcygnZXJyb3InKSwgc2l6ZTogRk9STV9FUlJPUl9TSVpFLCBjb2xvcjogRk9STV9FUlJPUl9DT0xPUiwgY2hpbGRyZW46IGZpZWxkRXJyb3IgfSkpLCAhZmllbGRFcnJvciAmJiBmaWVsZFdhcm5pbmcgJiYgKF9qc3goVHlwb2dyYXBoeUJvZHksIHsgYXM6IFwiZGl2XCIsIGNsYXNzTmFtZTogY2xhc3Nlcygnd2FybmluZycpLCBzaXplOiBGT1JNX1dBUk5JTkdfU0laRSwgY29sb3I6IEZPUk1fV0FSTklOR19DT0xPUiwgY2hpbGRyZW46IGZpZWxkV2FybmluZyB9KSksICFmaWVsZEVycm9yICYmICFmaWVsZFdhcm5pbmcgJiYgZmVlZGJhY2sgJiYgKF9qc3goVHlwb2dyYXBoeUJvZHksIHsgYXM6IFwiZGl2XCIsIGNsYXNzTmFtZTogY2xhc3NlcygnZmVlZGJhY2snKSwgc2l6ZTogRk9STV9GRUVEQkFDS19TSVpFLCBjb2xvcjogRk9STV9GRUVEQkFDS19DT0xPUiwgY2hpbGRyZW46IGZlZWRiYWNrIH0pKV0gfSldIH0pKTtcbiAgICBpZiAoY3R4LmdyaWQpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdHguY29sUHJvcHMpLCBjb2xQcm9wcyk7XG4gICAgICAgIGNvbnN0IHsgc3BhbiA9IERFRkFVTFRfQ09MX1NQQU4sIHNtLCBtZCwgbGcgfSA9IG1lcmdlZDtcbiAgICAgICAgcmV0dXJuIF9qc3goQ29sLCB7IHNwYW46IHNwYW4sIHNtOiBzbSwgbWQ6IG1kLCBsZzogbGcsIGNoaWxkcmVuOiBzaGVsbCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNoZWxsO1xufTtcblByb0Zvcm1JdGVtQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtSXRlbSc7XG5leHBvcnQgY29uc3QgUHJvRm9ybUl0ZW0gPSBtZW1vKFByb0Zvcm1JdGVtQmFzZSk7XG5leHBvcnQgZGVmYXVsdCBQcm9Gb3JtSXRlbTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
312
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS50c3giXSwibmFtZXMiOlsianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIlJlYWN0IiwibWVtbyIsInVzZUVmZmVjdCIsInVzZVJlZiIsIkNvbCIsIlR5cG9ncmFwaHlCb2R5IiwiVHlwb2dyYXBoeUxhYmVsIiwiZGVmYXVsdCIsImNsYXNzbmFtZXMiLCJqb2luQ2xzIiwidXNlRm9ybUl0ZW0iLCJGT1JNX0VSUk9SX0NPTE9SIiwiRk9STV9FUlJPUl9TSVpFIiwiRk9STV9XQVJOSU5HX0NPTE9SIiwiRk9STV9XQVJOSU5HX1NJWkUiLCJGT1JNX0RFU0NSSVBUSU9OX0NPTE9SIiwiRk9STV9ERVNDUklQVElPTl9TSVpFIiwiRk9STV9GRUVEQkFDS19DT0xPUiIsIkZPUk1fRkVFREJBQ0tfU0laRSIsIkZPUk1fTEFCRUxfQ09MT1IiLCJGT1JNX0xBQkVMX1NJWkVTIiwidXNlUHJvRm9ybVN0YWJsZSIsInVzZVByb0Zvcm1TdG9yZSIsInVzZVN0b3JlU2VsZWN0b3IiLCJzaGFsbG93RXF1YWxBcnJheXMiLCJyZXNvbHZlVmFsdWUiLCJERUZBVUxUX0NPTF9TUEFOIiwidmFsdWVFbnVtVG9PcHRpb25zIiwiZm9ybWF0RGF0ZUJ5UGF0dGVybiIsIkRBVEVfRk9STUFUIiwiREFURV9USU1FX0ZPUk1BVCIsIkVNUFRZX1RFWFRfREVGQVVMVCIsInJlbmRlckJ5VmFsdWVUeXBlIiwidmFsdWVUeXBlIiwidmFsdWUiLCJwcm9wcyIsInVuZGVmaW5lZCIsInJlcGVhdCIsIlN0cmluZyIsImxlbmd0aCIsIm51bSIsIk51bWJlciIsImlzTmFOIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZUVudW0iLCJvcHRpb25zIiwibWF0Y2giLCJmaW5kIiwibyIsImxhYmVsIiwiRGF0ZSIsIlJlYWRvbmx5Q2hpbGRCYXNlIiwiX3JlZiIsIm5hbWUiLCJjb252ZXJ0VmFsdWUiLCJyZWFkb25seVJlbmRlciIsImVtcHR5VGV4dCIsInN0b3JlIiwiX3VzZVN0b3JlU2VsZWN0b3IiLCJzdGF0ZSIsInZhbHVlcyIsIl91c2VTdG9yZVNlbGVjdG9yMiIsIl9zbGljZWRUb0FycmF5IiwicmF3IiwiYWxsVmFsdWVzIiwibm9kZSIsImdldFN0YXRlIiwiY2hpbGRyZW4iLCJyZW5kZXJlZCIsImRpc3BsYXlOYW1lIiwiUmVhZG9ubHlDaGlsZCIsIkNvbnZlcnRWYWx1ZUNoaWxkQmFzZSIsIl9yZWYyIiwiX3JlZjIkdmFsdWVQcm9wTmFtZSIsInZhbHVlUHJvcE5hbWUiLCJjb252ZXJ0ZWQiLCJjbG9uZUVsZW1lbnQiLCJfZGVmaW5lUHJvcGVydHkiLCJDb252ZXJ0VmFsdWVDaGlsZCIsIlByb0Zvcm1JdGVtQmFzZSIsIl9hIiwiY3R4IiwibWVyZ2VkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwibWVyZ2VkIiwiT2JqZWN0IiwiYXNzaWduIiwiX2kiLCJfT2JqZWN0JGtleXMiLCJrZXlzIiwia2V5IiwiX21lcmdlZFByb3BzIiwiZGVzY3JpcHRpb24iLCJydWxlcyIsImZlZWRiYWNrIiwidmFsaWRhdGVTdGF0dXMiLCJfbWVyZ2VkUHJvcHMkY2xhc3NOYW0iLCJjbGFzc05hbWUiLCJfbWVyZ2VkUHJvcHMkcHJlZml4Q2wiLCJwcmVmaXhDbHMiLCJoaWRkZW4iLCJ0cmFuc2Zvcm0iLCJjb2xQcm9wcyIsIm1vZGVQcm9wIiwibW9kZSIsIl9tZXJnZWRQcm9wcyRlbXB0eVRleCIsInZhbGlkYXRlRGVib3VuY2UiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJtZXJnZWRNb2RlIiwiaXNSZWFkb25seSIsIl91c2VGb3JtSXRlbSIsImZpZWxkRXJyb3IiLCJmaWVsZFdhcm5pbmciLCJzaXplIiwibGFiZWxBbGlnbiIsImluamVjdEZpZWxkIiwib3duVHJhbnNmb3JtUmVmIiwib3duVmFsdWVUeXBlUmVmIiwicHJldlRyYW5zZm9ybSIsImN1cnJlbnQiLCJ1bnJlZ2lzdGVyVHJhbnNmb3JtIiwiZm4iLCJyZWdpc3RlclRyYW5zZm9ybSIsInByZXZWYWx1ZVR5cGUiLCJ1bnJlZ2lzdGVyVmFsdWVUeXBlIiwicmVnaXN0ZXJWYWx1ZVR5cGUiLCJ0cmFuc2Zvcm1SZWciLCJ2YWx1ZVR5cGVSZWciLCJ0IiwidiIsImNvbnRyb2xDaGlsZCIsImluamVjdGVkIiwiaXNWYWxpZEVsZW1lbnQiLCJjbGFzc2VzIiwiaXRlbUdhcCIsImxheW91dCIsImdhcFN0eWxlIiwibWFyZ2luQm90dG9tIiwiY29uY2F0Iiwic2hlbGwiLCJzdHlsZSIsImFzIiwiY29sb3IiLCJncmlkIiwiX21lcmdlZCRzcGFuIiwic3BhbiIsInNtIiwibWQiLCJsZyIsIlByb0Zvcm1JdGVtIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLEdBQUcsSUFBSUMsSUFBSSxFQUFFQyxJQUFJLElBQUlDLEtBQUssUUFBUSxtQkFBbUI7QUNBOUQsT0FBT0MsS0FBSyxJQUFJQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFFdEQsU0FBU0MsR0FBRyxRQUFRLFNBQVM7QUFDN0IsU0FBU0MsY0FBYyxFQUFFQyxlQUFlLFFBQVEsZUFBZTtBQUMvRCxTQUFTQyxPQUFPLElBQUlDLFVBQVUsRUFBRUMsT0FBTyxRQUFRLHdCQUF3QjtBQUN2RSxTQUFTQyxXQUFXLFFBQVEsb0JBQW9CO0FBQ2hELFNBQ0VDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsc0JBQXNCLEVBQ3RCQyxxQkFBcUIsRUFDckJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLGdCQUFnQixRQUNYLGtCQUFrQjtBQUN6QixTQUFTQyxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFRLFdBQVc7QUFDN0QsU0FBU0MsZ0JBQWdCLEVBQUVDLGtCQUFrQixRQUFRLGtCQUFrQjtBQUN2RSxTQUFTQyxZQUFZLFFBQVEsa0JBQWtCO0FBQy9DLFNBQVNDLGdCQUFnQixRQUFRLGFB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QyxFQUFFLEdBQUtoRSxPQUFNLENBQWJnRSxFQUFFO0lBQzNDLE9BQU92SixJQUFBLENBQUNPLEdBQUcsRUFBQTtNQUFDNkksSUFBSSxFQUFFQSxJQUFJO01BQUVDLEVBQUUsRUFBRUEsRUFBRTtNQUFFQyxFQUFFLEVBQUVBLEVBQUU7TUFBRUMsRUFBRSxFQUFFQSxFQUFFO01BQUFqRixRQUFBLEVBQUd3RTtJQUFLLENBQUEsQ0FBTztFQUMvRDtFQUVBLE9BQU9BLEtBQUs7QUFDZCxDQUFDO0FBRUQ1RCxlQUFlLENBQUNWLFdBQVcsR0FBRyxhQUFhO0FBWTNDLE9BQU8sSUFBTWdGLFdBQVcsZ0JBQUdwSixJQUFJLENBQUM4RSxlQUFlLENBQWdDO0FBRS9FLGVBQWVzRSxXQUFXIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtSXRlbS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb2wgfSBmcm9tICcuLi9HcmlkJztcbmltcG9ydCB7IFR5cG9ncmFwaHlCb2R5LCBUeXBvZ3JhcGh5TGFiZWwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUl0ZW0gfSBmcm9tICcuL2NvcmUvdXNlRm9ybUl0ZW0nO1xuaW1wb3J0IHsgRk9STV9FUlJPUl9DT0xPUiwgRk9STV9FUlJPUl9TSVpFLCBGT1JNX1dBUk5JTkdfQ09MT1IsIEZPUk1fV0FSTklOR19TSVpFLCBGT1JNX0RFU0NSSVBUSU9OX0NPTE9SLCBGT1JNX0RFU0NSSVBUSU9OX1NJWkUsIEZPUk1fRkVFREJBQ0tfQ09MT1IsIEZPUk1fRkVFREJBQ0tfU0laRSwgRk9STV9MQUJFTF9DT0xPUiwgRk9STV9MQUJFTF9TSVpFUywgfSBmcm9tICcuL2NvcmUvY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZVByb0Zvcm1TdGFibGUsIHVzZVByb0Zvcm1TdG9yZSB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yLCBzaGFsbG93RXF1YWxBcnJheXMgfSBmcm9tICcuL2NvcmUvZm9ybVN0b3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4vY29yZS9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9DT0xfU1BBTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbHVlRW51bVRvT3B0aW9ucywgZm9ybWF0RGF0ZUJ5UGF0dGVybiwgREFURV9GT1JNQVQsIERBVEVfVElNRV9GT1JNQVQgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IEVNUFRZX1RFWFRfREVGQVVMVCA9ICctJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVhZC1tb2RlIHJlbmRlcmluZyBmb3IgZWFjaCBzdXBwb3J0ZWQgdmFsdWVUeXBlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlbmRlckJ5VmFsdWVUeXBlKHZhbHVlVHlwZSwgdmFsdWUsIHByb3BzKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgICAgICByZXR1cm4gJyonLnJlcGVhdChTdHJpbmcodmFsdWUpLmxlbmd0aCk7XG4gICAgICAgIGNhc2UgJ3N3aXRjaCc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPyAnT24nIDogJ09mZic7XG4gICAgICAgIGNhc2UgJ2RpZ2l0Jzoge1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBudW0udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIGNhc2UgJ3RhZyc6IHtcbiAgICAgICAgICAgIGlmICghcHJvcHMudmFsdWVFbnVtKVxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHZhbHVlRW51bVRvT3B0aW9ucyhwcm9wcy52YWx1ZUVudW0pO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBvcHRpb25zLmZpbmQoKG8pID0+IFN0cmluZyhvLnZhbHVlKSA9PT0gU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5sYWJlbCA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZm9ybWF0RGF0ZUJ5UGF0dGVybih2YWx1ZSwgREFURV9GT1JNQVQpIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdERhdGVCeVBhdHRlcm4odmFsdWUsIERBVEVfVElNRV9GT1JNQVQpIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG59XG5jb25zdCBSZWFkb25seUNoaWxkQmFzZSA9ICh7IG5hbWUsIHZhbHVlVHlwZSwgdmFsdWVFbnVtLCBjb252ZXJ0VmFsdWUsIHJlYWRvbmx5UmVuZGVyLCBlbXB0eVRleHQsIH0pID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVByb0Zvcm1TdG9yZSgpO1xuICAgIC8vIFN1YnNjcmliZSBwZXItZmllbGQ7IG9ubHkgYSBjdXN0b20gcmVhZG9ubHlSZW5kZXIgKHdoaWNoIHJlY2VpdmVzIEFMTFxuICAgIC8vIHZhbHVlcykgbmVlZHMgdG8gdHJhY2sgdGhlIHdob2xlIHZhbHVlcyBvYmplY3QuXG4gICAgY29uc3QgW3JhdywgYWxsVmFsdWVzXSA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4gW1xuICAgICAgICBuYW1lID8gcmVzb2x2ZVZhbHVlKHN0YXRlLnZhbHVlcywgbmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlYWRvbmx5UmVuZGVyID8gc3RhdGUudmFsdWVzIDogdW5kZWZpbmVkLFxuICAgIF0sIHNoYWxsb3dFcXVhbEFycmF5cyk7XG4gICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0VmFsdWUgJiYgbmFtZSA/IGNvbnZlcnRWYWx1ZShyYXcsIG5hbWUpIDogcmF3O1xuICAgIGlmIChyZWFkb25seVJlbmRlcikge1xuICAgICAgICBjb25zdCBub2RlID0gcmVhZG9ubHlSZW5kZXIodmFsdWUsIGFsbFZhbHVlcyAhPT0gbnVsbCAmJiBhbGxWYWx1ZXMgIT09IHZvaWQgMCA/IGFsbFZhbHVlcyA6IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IG5vZGUgIT09IG51bGwgJiYgbm9kZSAhPT0gdm9pZCAwID8gbm9kZSA6IGVtcHR5VGV4dCB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBlbXB0eVRleHQgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkID0gcmVuZGVyQnlWYWx1ZVR5cGUodmFsdWVUeXBlLCB2YWx1ZSwgeyB2YWx1ZUVudW0gfSk7XG4gICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IHJlbmRlcmVkICE9PSBudWxsICYmIHJlbmRlcmVkICE9PSB2b2lkIDAgPyByZW5kZXJlZCA6IGVtcHR5VGV4dCB9KTtcbn07XG5SZWFkb25seUNoaWxkQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtSXRlbVJlYWRvbmx5JztcbmNvbnN0IFJlYWRvbmx5Q2hpbGQgPSBtZW1vKFJlYWRvbmx5Q2hpbGRCYXNlKTtcbmNvbnN0IENvbnZlcnRWYWx1ZUNoaWxkQmFzZSA9ICh7IG5hbWUsIGNvbnZlcnRWYWx1ZSwgdmFsdWVQcm9wTmFtZSA9ICd2YWx1ZScsIGNoaWxkcmVuLCB9KSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSB1c2VQcm9Gb3JtU3RvcmUoKTtcbiAgICBjb25zdCByYXcgPSB1c2VTdG9yZVNlbGVjdG9yKHN0b3JlLCAoc3RhdGUpID0+IHJlc29sdmVWYWx1ZShzdGF0ZS52YWx1ZXMsIG5hbWUpKTtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VmFsdWUgPyBjb252ZXJ0VmFsdWUocmF3LCBuYW1lKSA6IHJhdztcbiAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7IFt2YWx1ZVByb3BOYW1lXTogY29udmVydGVkIH0pO1xufTtcbkNvbnZlcnRWYWx1ZUNoaWxkQmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtSXRlbUNvbnZlcnRWYWx1ZSc7XG5jb25zdCBDb252ZXJ0VmFsdWVDaGlsZCA9IG1lbW8oQ29udmVydFZhbHVlQ2hpbGRCYXNlKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJvRm9ybUl0ZW1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY29uc3QgUHJvRm9ybUl0ZW1CYXNlID0gKHByb3BzKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIC8vIFN0YWJsZSBzbGljZSBvbmx5IOKAlCB2YWx1ZS9lcnJvciByZWFjdGl2aXR5IGxpdmVzIGluIHVzZUZvcm1JdGVtJ3NcbiAgICAvLyBwZXItZmllbGQgc3Vic2NyaXB0aW9uLCBzbyB0aGlzIHNoZWxsIG5ldmVyIHJlLXJlbmRlcnMgZm9yIHNpYmxpbmdzLlxuICAgIGNvbnN0IGN0eCA9IHVzZVByb0Zvcm1TdGFibGUoKTtcbiAgICAvLyBGb3JtLWxldmVsIGBmb3JtSXRlbVByb3BzYCBhY3QgYXMgREVGQVVMVFM7IHByb3BzIGV4cGxpY2l0bHkgc2V0IG9uIHRoZVxuICAgIC8vIGl0ZW0gd2luLiBKU1ggZnJlcXVlbnRseSBwYXNzZXMgYHVuZGVmaW5lZGAgZm9yIHVuc2V0IHByb3BzIChlLmcuIHRoZVxuICAgIC8vIGNyZWF0ZVByb0Zvcm1GaWVsZCBwYXNzLXRocm91Z2gpLCBzbyBvbmx5IGRlZmluZWQgdmFsdWVzIG1heSBvdmVycmlkZS5cbiAgICBsZXQgbWVyZ2VkUHJvcHMgPSBwcm9wcztcbiAgICBpZiAoY3R4LmZvcm1JdGVtUHJvcHMpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbih7fSwgY3R4LmZvcm1JdGVtUHJvcHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG1lcmdlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbWVyZ2VkUHJvcHMgPSBtZXJnZWQ7XG4gICAgfVxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIG5hbWUsIGxhYmVsLCBkZXNjcmlwdGlvbiwgcnVsZXMsIGZlZWRiYWNrLCB2YWxpZGF0ZVN0YXR1cywgY2xhc3NOYW1lID0gJycsIHByZWZpeENscyA9ICdmb3JtLWl0ZW0nLCBoaWRkZW4sIHRyYW5zZm9ybSwgY29udmVydFZhbHVlLCB2YWx1ZVR5cGUsIHJlYWRvbmx5UmVuZGVyLCBjb2xQcm9wcywgbW9kZTogbW9kZVByb3AsIGVtcHR5VGV4dCA9IEVNUFRZX1RFWFRfREVGQVVMVCwgdmFsdWVFbnVtLCB2YWx1ZVByb3BOYW1lLCB2YWxpZGF0ZURlYm91bmNlLCB2YWxpZGF0ZVRyaWdnZXIsIH0gPSBtZXJnZWRQcm9wcztcbiAgICBjb25zdCBtZXJnZWRNb2RlID0gbW9kZVByb3AgIT09IG51bGwgJiYgbW9kZVByb3AgIT09IHZvaWQgMCA/IG1vZGVQcm9wIDogY3R4Lm1vZGU7XG4gICAgY29uc3QgaXNSZWFkb25seSA9IG1lcmdlZE1vZGUgPT09ICdyZWFkJztcbiAgICBjb25zdCB7IGZpZWxkRXJyb3IsIGZpZWxkV2FybmluZywgc2l6ZSwgbGFiZWxBbGlnbiwgaW5qZWN0RmllbGQsIH0gPSB1c2VGb3JtSXRlbSh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICB2YWxpZGF0ZVN0YXR1cyxcbiAgICAgICAgdmFsdWVQcm9wTmFtZSxcbiAgICAgICAgdmFsaWRhdGVEZWJvdW5jZSxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH0pO1xuICAgIC8vIFJlZ2lzdGVyIHRyYW5zZm9ybSAvIHZhbHVlVHlwZSBEVVJJTkcgcmVuZGVyIChpZGVtcG90ZW50IHJlZiB3cml0ZXMsIGxpa2VcbiAgICAvLyByZWdpc3RlckZpZWxkKTogY29uc3VtZXJzIHJlbmRlcmVkIGxhdGVyIGluIHRoZSBzYW1lIHBhc3Mg4oCUIGUuZy4gYVxuICAgIC8vIERlcGVuZGVuY3kgcmVhZGluZyBmb3JtYXR0ZWQgdmFsdWVzIOKAlCBtdXN0IGFscmVhZHkgc2VlIHRoZW0uIEVmZmVjdHNcbiAgICAvLyB3b3VsZCByZWdpc3RlciB0b28gbGF0ZSAoYWZ0ZXIgdGhlIHdob2xlIHRyZWUgcmVuZGVyZWQpLlxuICAgIC8vXG4gICAgLy8gRWFjaCBpbnN0YW5jZSB0cmFja3MgdGhlIHtuYW1lLCB2YWx1ZX0gUEFJUiBpdCByZWdpc3RlcmVkLiBSZW1vdmFsIGlzXG4gICAgLy8gYWx3YXlzIHBlcmZvcm1lZCB3aXRoIHRoZSBwYWlyJ3Mgb3duIG5hbWUgQU5EIHZhbHVlOiBhbiBpdGVtIHdpdGhvdXQgYVxuICAgIC8vIHRyYW5zZm9ybSBuZXZlciB0b3VjaGVzIGEgc2FtZS1uYW1lIHNpYmxpbmcncyByZWdpc3RyYXRpb24sIGFuIHVubW91bnRcbiAgICAvLyBjbGVhbnVwIGNhbid0IHdpcGUgYSBzdWNjZXNzb3IncyAodmFsdWUtZ3VhcmRlZCksIGFuZCBhIE5BTUUgY2hhbmdlXG4gICAgLy8gcmVtb3ZlcyB0aGUgb2xkIG5hbWUncyBlbnRyeSB3aXRoIHRoZSBPTEQgdmFsdWUgYmVmb3JlIHRoZSByZWYgaXNcbiAgICAvLyBvdmVyd3JpdHRlbiAoYSBsaXZlIHNpbmdsZS12YWx1ZSByZWYgd291bGQgbGVhayBpdCkuXG4gICAgY29uc3Qgb3duVHJhbnNmb3JtUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IG93blZhbHVlVHlwZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBwcmV2VHJhbnNmb3JtID0gb3duVHJhbnNmb3JtUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHByZXZUcmFuc2Zvcm0gJiYgKHByZXZUcmFuc2Zvcm0ubmFtZSAhPT0gbmFtZSB8fCAhdHJhbnNmb3JtKSkge1xuICAgICAgICBjdHgudW5yZWdpc3RlclRyYW5zZm9ybShwcmV2VHJhbnNmb3JtLm5hbWUsIHByZXZUcmFuc2Zvcm0uZm4pO1xuICAgICAgICBvd25UcmFuc2Zvcm1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChuYW1lICYmIHRyYW5zZm9ybSkge1xuICAgICAgICBjdHgucmVnaXN0ZXJUcmFuc2Zvcm0obmFtZSwgdHJhbnNmb3JtKTtcbiAgICAgICAgb3duVHJhbnNmb3JtUmVmLmN1cnJlbnQgPSB7IG5hbWUsIGZuOiB0cmFuc2Zvcm0gfTtcbiAgICB9XG4gICAgY29uc3QgcHJldlZhbHVlVHlwZSA9IG93blZhbHVlVHlwZVJlZi5jdXJyZW50O1xuICAgIGlmIChwcmV2VmFsdWVUeXBlICYmIChwcmV2VmFsdWVUeXBlLm5hbWUgIT09IG5hbWUgfHwgIXZhbHVlVHlwZSkpIHtcbiAgICAgICAgY3R4LnVucmVnaXN0ZXJWYWx1ZVR5cGUocHJldlZhbHVlVHlwZS5uYW1lLCBwcmV2VmFsdWVUeXBlLnZhbHVlVHlwZSk7XG4gICAgICAgIG93blZhbHVlVHlwZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKG5hbWUgJiYgdmFsdWVUeXBlKSB7XG4gICAgICAgIGN0eC5yZWdpc3RlclZhbHVlVHlwZShuYW1lLCB2YWx1ZVR5cGUpO1xuICAgICAgICBvd25WYWx1ZVR5cGVSZWYuY3VycmVudCA9IHsgbmFtZSwgdmFsdWVUeXBlIH07XG4gICAgfVxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIFJFLVJFR0lTVEVSIGluIHRoZSBib2R5OiBTdHJpY3RNb2RlJ3MgbW91bnTihpJjbGVhbnVw4oaScmUtcnVuIGN5Y2xlIGFuZFxuICAgICAgICAvLyBrZXllZCByZW1vdW50cyAob2xkIGluc3RhbmNlJ3MgY2xlYW51cCBydW5zIEFGVEVSIHRoZSBuZXcgcmVuZGVyXG4gICAgICAgIC8vIHJlZ2lzdGVyZWQpIGJvdGggZW5kIHdpdGggYSBjbGVhbnVwIGhhdmluZyBkZWxldGVkIHRoZSBlbnRyeSDigJQgdGhlXG4gICAgICAgIC8vIGVmZmVjdCBib2R5IG11c3QgcmVzdG9yZSB0aGUgbGF0ZXN0IHJlZ2lzdHJhdGlvbi5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtUmVnID0gb3duVHJhbnNmb3JtUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1SZWcpXG4gICAgICAgICAgICBjdHgucmVnaXN0ZXJUcmFuc2Zvcm0odHJhbnNmb3JtUmVnLm5hbWUsIHRyYW5zZm9ybVJlZy5mbik7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZVJlZyA9IG93blZhbHVlVHlwZVJlZi5jdXJyZW50O1xuICAgICAgICBpZiAodmFsdWVUeXBlUmVnKVxuICAgICAgICAgICAgY3R4LnJlZ2lzdGVyVmFsdWVUeXBlKHZhbHVlVHlwZVJlZy5uYW1lLCB2YWx1ZVR5cGVSZWcudmFsdWVUeXBlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBvd25UcmFuc2Zvcm1SZWYuY3VycmVudDtcbiAgICAgICAgICAgIGlmICh0KVxuICAgICAgICAgICAgICAgIGN0eC51bnJlZ2lzdGVyVHJhbnNmb3JtKHQubmFtZSwgdC5mbik7XG4gICAgICAgICAgICBjb25zdCB2ID0gb3duVmFsdWVUeXBlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAodilcbiAgICAgICAgICAgICAgICBjdHgudW5yZWdpc3RlclZhbHVlVHlwZSh2Lm5hbWUsIHYudmFsdWVUeXBlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbbmFtZSwgY3R4LnJlZ2lzdGVyVHJhbnNmb3JtLCBjdHgudW5yZWdpc3RlclRyYW5zZm9ybSwgY3R4LnJlZ2lzdGVyVmFsdWVUeXBlLCBjdHgudW5yZWdpc3RlclZhbHVlVHlwZV0pO1xuICAgIGlmIChoaWRkZW4pXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBjb250cm9sQ2hpbGQ7XG4gICAgaWYgKGlzUmVhZG9ubHkpIHtcbiAgICAgICAgY29udHJvbENoaWxkID0gKF9qc3goUmVhZG9ubHlDaGlsZCwgeyBuYW1lOiBuYW1lLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSwgdmFsdWVFbnVtOiB2YWx1ZUVudW0sIGNvbnZlcnRWYWx1ZTogY29udmVydFZhbHVlLCByZWFkb25seVJlbmRlcjogcmVhZG9ubHlSZW5kZXIsIGVtcHR5VGV4dDogZW1wdHlUZXh0IH0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEluamVjdCBmaXJzdCBzbyB0aGUgcmVhbCBmaWVsZCByZWNlaXZlcyB2YWx1ZS9vbkNoYW5nZS9vbkJsdXIsXG4gICAgICAgIC8vIHRoZW4gb3B0aW9uYWxseSB3cmFwIGluIENvbnZlcnRWYWx1ZUNoaWxkIHRvIG92ZXJyaWRlIHRoZSBkaXNwbGF5ZWQgdmFsdWUuXG4gICAgICAgIGNvbnN0IGluamVjdGVkID0gaW5qZWN0RmllbGQoY2hpbGRyZW4pO1xuICAgICAgICBpZiAoY29udmVydFZhbHVlICYmIG5hbWUgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQoaW5qZWN0ZWQpKSB7XG4gICAgICAgICAgICBjb250cm9sQ2hpbGQgPSAoX2pzeChDb252ZXJ0VmFsdWVDaGlsZCwgeyBuYW1lOiBuYW1lLCBjb252ZXJ0VmFsdWU6IGNvbnZlcnRWYWx1ZSwgdmFsdWVQcm9wTmFtZTogdmFsdWVQcm9wTmFtZSwgY2hpbGRyZW46IGluamVjdGVkIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2xDaGlsZCA9IGluamVjdGVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgLy8gRm9ybS1sZXZlbCBsYXlvdXQuaXRlbUdhcCBvdmVycmlkZXMgdGhlIHNpemUtY2xhc3MgbWFyZ2luIChpbmxpbmUgc3R5bGVcbiAgICAvLyB3aW5zKTsgaXRlbUdhcD0wIGlzIG1lYW5pbmdmdWwuXG4gICAgY29uc3QgaXRlbUdhcCA9IChfYSA9IGN0eC5sYXlvdXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pdGVtR2FwO1xuICAgIGNvbnN0IGdhcFN0eWxlID0gaXRlbUdhcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBtYXJnaW5Cb3R0b206IHR5cGVvZiBpdGVtR2FwID09PSAnbnVtYmVyJyA/IGAke2l0ZW1HYXB9cHhgIDogaXRlbUdhcCB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNoZWxsID0gKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKHVuZGVmaW5lZCwgam9pbkNscyhjbGFzc2VzKHNpemUpLCBjbGFzc05hbWUpKSwgc3R5bGU6IGdhcFN0eWxlLCBjaGlsZHJlbjogW2xhYmVsICYmIChfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtd3JhcHBlcicsIGpvaW5DbHMoY2xhc3NlcygnbGFiZWwtd3JhcHBlci12ZXJ0aWNhbCcpLCBsYWJlbEFsaWduICYmIGNsYXNzZXMoYGxhYmVsLXdyYXBwZXItJHtsYWJlbEFsaWdufWApKSksIGNoaWxkcmVuOiBbX2pzeChUeXBvZ3JhcGh5TGFiZWwsIHsgYXM6IFwibGFiZWxcIiwgc2l6ZTogRk9STV9MQUJFTF9TSVpFU1tzaXplXSwgY29sb3I6IEZPUk1fTEFCRUxfQ09MT1IsIGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwnKSwgY2hpbGRyZW46IGxhYmVsIH0pLCBkZXNjcmlwdGlvbiAmJiAoX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBhczogXCJkaXZcIiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdkZXNjcmlwdGlvbicpLCBzaXplOiBGT1JNX0RFU0NSSVBUSU9OX1NJWkUsIGNvbG9yOiBGT1JNX0RFU0NSSVBUSU9OX0NPTE9SLCBjaGlsZHJlbjogZGVzY3JpcHRpb24gfSkpXSB9KSksIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdjb250cm9sJyksIGNoaWxkcmVuOiBbY29udHJvbENoaWxkLCBmaWVsZEVycm9yICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2Vycm9yJyksIHNpemU6IEZPUk1fRVJST1JfU0laRSwgY29sb3I6IEZPUk1fRVJST1JfQ09MT1IsIGNoaWxkcmVuOiBmaWVsZEVycm9yIH0pKSwgIWZpZWxkRXJyb3IgJiYgZmllbGRXYXJuaW5nICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ3dhcm5pbmcnKSwgc2l6ZTogRk9STV9XQVJOSU5HX1NJWkUsIGNvbG9yOiBGT1JNX1dBUk5JTkdfQ09MT1IsIGNoaWxkcmVuOiBmaWVsZFdhcm5pbmcgfSkpLCAhZmllbGRFcnJvciAmJiAhZmllbGRXYXJuaW5nICYmIGZlZWRiYWNrICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IGFzOiBcImRpdlwiLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2ZlZWRiYWNrJyksIHNpemU6IEZPUk1fRkVFREJBQ0tfU0laRSwgY29sb3I6IEZPUk1fRkVFREJBQ0tfQ09MT1IsIGNoaWxkcmVuOiBmZWVkYmFjayB9KSldIH0pXSB9KSk7XG4gICAgaWYgKGN0eC5ncmlkKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY3R4LmNvbFByb3BzKSwgY29sUHJvcHMpO1xuICAgICAgICBjb25zdCB7IHNwYW4gPSBERUZBVUxUX0NPTF9TUEFOLCBzbSwgbWQsIGxnIH0gPSBtZXJnZWQ7XG4gICAgICAgIHJldHVybiBfanN4KENvbCwgeyBzcGFuOiBzcGFuLCBzbTogc20sIG1kOiBtZCwgbGc6IGxnLCBjaGlsZHJlbjogc2hlbGwgfSk7XG4gICAgfVxuICAgIHJldHVybiBzaGVsbDtcbn07XG5Qcm9Gb3JtSXRlbUJhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybUl0ZW0nO1xuZXhwb3J0IGNvbnN0IFByb0Zvcm1JdGVtID0gbWVtbyhQcm9Gb3JtSXRlbUJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgUHJvRm9ybUl0ZW07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -1,3 +1,8 @@
1
+ import type { ReactElement } from 'react';
1
2
  import type { ProFormListProps } from './interface';
2
- export declare const ProFormList: import("react").NamedExoticComponent<ProFormListProps>;
3
+ export interface ProFormListComponent {
4
+ <Item = Record<string, any>>(props: ProFormListProps<Item>): ReactElement | null;
5
+ displayName?: string;
6
+ }
7
+ export declare const ProFormList: ProFormListComponent;
3
8
  export default ProFormList;
@@ -4,12 +4,11 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { memo, useEffect, useMemo, useRef } from 'react';
6
6
  import useMemoizedFn from '@1money/hooks/useMemoizedFn';
7
- import useSafeState from '@1money/hooks/useSafeState';
8
7
  import { default as classnames } from '../../utils/classnames';
9
8
  import { Button } from '../Button';
10
9
  import { TypographyLabel, TypographyBody } from '../Typography';
11
- import { FormListContext, useFormListContext, useProFormStable, useProFormStore } from './context';
12
- import { useStoreSelector } from './core/formStore';
10
+ import { FormListContext, useProFormStable, useProFormStore } from './context';
11
+ import { useStoreSelector, shallowEqualArrays } from './core/formStore';
13
12
  import { CSS_PREFIX, DEFAULT_TEXT, PROFORM_LIST_LABEL_SIZE, PROFORM_LIST_LABEL_COLOR } from './constants';
14
13
  import { extractButtonProps, getNestedValue } from './utils';
15
14
  var classes = classnames("".concat(CSS_PREFIX, "-list"));
@@ -20,6 +19,51 @@ var generateKey = function generateKey() {
20
19
  // Stable empty result for the no-value case — a fresh [] per selector run
21
20
  // would never compare equal and loop the subscription.
22
21
  var EMPTY_LIST = [];
22
+ // Field meta (errors/warnings/touched/validating) is stored FLAT, keyed by
23
+ // the positional path (`items.1.title`). Row operations shift the VALUES but
24
+ // not those keys — remap them in the same handler so every row keeps its own
25
+ // meta. `mapIndex` returns the new index for an old one, or null to drop it.
26
+ var LIST_META_KEYS = ['errors', 'warnings', 'touched', 'validating'];
27
+ function remapListMeta(store, listName, mapIndex) {
28
+ var state = store.getState();
29
+ var prefix = "".concat(listName, ".");
30
+ var patch = {};
31
+ for (var _i = 0, _LIST_META_KEYS = LIST_META_KEYS; _i < _LIST_META_KEYS.length; _i++) {
32
+ var metaKey = _LIST_META_KEYS[_i];
33
+ var source = state[metaKey];
34
+ var changed = false;
35
+ var next = {};
36
+ for (var _i2 = 0, _Object$keys = Object.keys(source); _i2 < _Object$keys.length; _i2++) {
37
+ var key = _Object$keys[_i2];
38
+ if (!key.startsWith(prefix)) {
39
+ next[key] = source[key];
40
+ continue;
41
+ }
42
+ var rest = key.slice(prefix.length);
43
+ var dotAt = rest.indexOf('.');
44
+ var indexStr = dotAt === -1 ? rest : rest.slice(0, dotAt);
45
+ if (!/^\d+$/.test(indexStr)) {
46
+ next[key] = source[key];
47
+ continue;
48
+ }
49
+ var newIndex = mapIndex(Number(indexStr));
50
+ if (newIndex === null) {
51
+ changed = true; // row removed — drop its meta
52
+ continue;
53
+ }
54
+ if (newIndex === Number(indexStr)) {
55
+ next[key] = source[key];
56
+ continue;
57
+ }
58
+ next["".concat(prefix).concat(newIndex).concat(dotAt === -1 ? '' : rest.slice(dotAt))] = source[key];
59
+ changed = true;
60
+ }
61
+ if (changed) {
62
+ patch[metaKey] = next;
63
+ }
64
+ }
65
+ if (Object.keys(patch).length > 0) store.setState(patch);
66
+ }
23
67
  // Row-level memo boundary: setNestedValue clones ONLY the edited row, so
24
68
  // untouched rows keep their record identity and bail out here while a
25
69
  // sibling row is being edited.
@@ -83,7 +127,7 @@ ListRowActionsBase.displayName = 'ProFormListRowActions';
83
127
  var ListRowActions = /*#__PURE__*/memo(ListRowActionsBase);
84
128
  var ProFormListBase = function ProFormListBase(props) {
85
129
  var _a, _b;
86
- var rawName = props.name,
130
+ var fullName = props.name,
87
131
  label = props.label,
88
132
  min = props.min,
89
133
  max = props.max,
@@ -99,24 +143,30 @@ var ProFormListBase = function ProFormListBase(props) {
99
143
  children = props.children,
100
144
  onAfterAdd = props.onAfterAdd,
101
145
  onAfterRemove = props.onAfterRemove;
102
- // ── Nested list: prepend parent list name ──
103
- var parentCtx = useFormListContext();
104
- var fullName = parentCtx.listName ? "".concat(parentCtx.listName, ".").concat(rawName) : rawName;
146
+ // List names are ABSOLUTE paths, like every other field name. A nested
147
+ // list is written with the full row path (`name={`${field.name}.tags`}`),
148
+ // exactly like row fields the bare parent list name carries no row
149
+ // index, so auto-prefixing with it could never address a row's own
150
+ // sub-list (it would resolve `parent.tags` instead of `parent.0.tags`).
105
151
  var _useProFormStable = useProFormStable(),
106
- setFieldValue = _useProFormStable.setFieldValue;
152
+ setFieldValue = _useProFormStable.setFieldValue,
153
+ registerField = _useProFormStable.registerField,
154
+ unregisterField = _useProFormStable.unregisterField,
155
+ retainField = _useProFormStable.retainField,
156
+ releaseField = _useProFormStable.releaseField,
157
+ validateFieldAsync = _useProFormStable.validateFieldAsync;
107
158
  var store = useProFormStore();
108
159
  var initialApplied = useRef(false);
109
160
  var keysRef = useRef([]);
110
- var _useSafeState = useSafeState(null),
111
- _useSafeState2 = _slicedToArray(_useSafeState, 2),
112
- listError = _useSafeState2[0],
113
- setListError = _useSafeState2[1];
114
- // Subscribe ONLY to this list's own value: typing elsewhere in the form
115
- // leaves the array identity untouched and this component does not render.
116
- var list = useStoreSelector(store, function (state) {
117
- var raw = fullName.includes('.') ? getNestedValue(state.values, fullName) : state.values[fullName];
118
- return Array.isArray(raw) ? raw : EMPTY_LIST;
119
- });
161
+ // Subscribe ONLY to this list's own value and error: typing elsewhere in
162
+ // the form leaves both untouched and this component does not render.
163
+ var _useStoreSelector = useStoreSelector(store, function (state) {
164
+ var raw = fullName.includes('.') ? getNestedValue(state.values, fullName) : state.values[fullName];
165
+ return [Array.isArray(raw) ? raw : EMPTY_LIST, state.errors[fullName]];
166
+ }, shallowEqualArrays),
167
+ _useStoreSelector2 = _slicedToArray(_useStoreSelector, 2),
168
+ list = _useStoreSelector2[0],
169
+ listError = _useStoreSelector2[1];
120
170
  // Sync keys with list length
121
171
  while (keysRef.current.length < list.length) {
122
172
  keysRef.current.push(generateKey());
@@ -124,33 +174,49 @@ var ProFormListBase = function ProFormListBase(props) {
124
174
  if (keysRef.current.length > list.length) {
125
175
  keysRef.current = keysRef.current.slice(0, list.length);
126
176
  }
127
- // Apply initial value once
177
+ // initialValue is MOUNT-ONLY (like form initialValues): the decision is
178
+ // made exactly once. Without the unconditional flag, a list seeded by form
179
+ // initialValues would re-apply initialValue when the user empties it.
128
180
  useEffect(function () {
129
181
  if (initialApplied.current) return;
182
+ initialApplied.current = true;
130
183
  if (list.length !== 0) return;
131
184
  if (!Array.isArray(initialValue) || initialValue.length === 0) return;
132
- initialApplied.current = true;
133
185
  setFieldValue(fullName, _toConsumableArray(initialValue));
134
186
  keysRef.current = initialValue.map(function () {
135
187
  return generateKey();
136
188
  });
137
- }, [list.length, initialValue, fullName, setFieldValue]);
138
- // Clear error when list becomes non-empty
139
- useEffect(function () {
140
- if (required && list.length > 0 && listError) {
141
- setListError(null);
142
- }
143
- }, [list.length, required, listError, setListError]);
189
+ // Mount-only by design.
190
+ }, []);
144
191
  var canAdd = max == null || list.length < max;
145
192
  var canRemove = min == null || list.length > min;
146
- var validateList = useMemoizedFn(function () {
147
- if (!required) return true;
148
- if (list.length === 0) {
149
- setListError(requiredMessage);
150
- return false;
151
- }
152
- setListError(null);
153
- return true;
193
+ // `required` participates in REAL validation: the rule is registered with
194
+ // the form (so submit blocks on an empty list) and re-run after every
195
+ // structural mutation below.
196
+ var listRules = useMemo(function () {
197
+ return required ? [{
198
+ required: true,
199
+ message: requiredMessage
200
+ }] : [];
201
+ }, [required, requiredMessage]);
202
+ // Mount-counted lifetime (see useFormItem): the rules are removed only when
203
+ // the LAST same-name holder unmounts. Declared BEFORE the register effect so
204
+ // the registration below is classified as instance-owned.
205
+ useEffect(function () {
206
+ retainField(fullName);
207
+ return function () {
208
+ releaseField(fullName);
209
+ };
210
+ }, [fullName]);
211
+ useEffect(function () {
212
+ if (listRules.length > 0) registerField(fullName, listRules);else unregisterField(fullName);
213
+ });
214
+ var validateListValue = useMemoizedFn(function (nextList) {
215
+ // Async path so list-level rules with a Promise-returning validator are
216
+ // honored (the sync path would silently skip them); result lands on the
217
+ // next microtask, same as ProForm.Item. Fire-and-forget — the outcome is
218
+ // read from the store's error slice, not this call.
219
+ if (listRules.length > 0) validateFieldAsync(fullName, nextList, listRules);
154
220
  });
155
221
  var add = useMemoizedFn(function (defaultValue, index) {
156
222
  if (!canAdd) return;
@@ -162,6 +228,10 @@ var ProFormListBase = function ProFormListBase(props) {
162
228
  newKeys.splice(insertIndex, 0, generateKey());
163
229
  keysRef.current = newKeys;
164
230
  setFieldValue(fullName, newList);
231
+ remapListMeta(store, fullName, function (i) {
232
+ return i >= insertIndex ? i + 1 : i;
233
+ });
234
+ validateListValue(newList);
165
235
  onAfterAdd === null || onAfterAdd === void 0 ? void 0 : onAfterAdd(value, insertIndex);
166
236
  });
167
237
  var removeAt = useMemoizedFn(function (index) {
@@ -172,15 +242,16 @@ var ProFormListBase = function ProFormListBase(props) {
172
242
  newKeys.splice(index, 1);
173
243
  keysRef.current = newKeys;
174
244
  setFieldValue(fullName, newList);
245
+ remapListMeta(store, fullName, function (i) {
246
+ if (i === index) return null;
247
+ return i > index ? i - 1 : i;
248
+ });
249
+ validateListValue(newList);
175
250
  onAfterRemove === null || onAfterRemove === void 0 ? void 0 : onAfterRemove(index);
176
- // Validate after remove
177
- if (required && newList.length === 0) {
178
- setListError(requiredMessage);
179
- }
180
251
  });
181
252
  var copy = useMemoizedFn(function (index) {
182
253
  if (!canAdd) return;
183
- var value = list[index] ? Object.assign({}, list[index]) : {};
254
+ var value = list[index] && _typeof(list[index]) === 'object' ? Object.assign({}, list[index]) : list[index];
184
255
  add(value, index + 1);
185
256
  });
186
257
  var move = useMemoizedFn(function (from, to) {
@@ -198,6 +269,14 @@ var ProFormListBase = function ProFormListBase(props) {
198
269
  newKeys.splice(to, 0, movedKey);
199
270
  keysRef.current = newKeys;
200
271
  setFieldValue(fullName, newList);
272
+ remapListMeta(store, fullName, function (i) {
273
+ if (i === from) return to;
274
+ if (from < to) return i > from && i <= to ? i - 1 : i;
275
+ return i >= to && i < from ? i + 1 : i;
276
+ });
277
+ });
278
+ var get = useMemoizedFn(function (index) {
279
+ return list[index];
201
280
  });
202
281
  var getList = useMemoizedFn(function () {
203
282
  return list;
@@ -208,9 +287,10 @@ var ProFormListBase = function ProFormListBase(props) {
208
287
  remove: removeAt,
209
288
  move: move,
210
289
  copy: copy,
290
+ get: get,
211
291
  getList: getList
212
292
  };
213
- }, [add, removeAt, move, copy, getList]);
293
+ }, [add, removeAt, move, copy, get, getList]);
214
294
  // Per-key cache keeps each row's field object identity stable across list
215
295
  // commits (e.g. typing in a sibling row), so memoized row content sees
216
296
  // shallow-equal props and bails out.
@@ -302,4 +382,4 @@ var ProFormListBase = function ProFormListBase(props) {
302
382
  ProFormListBase.displayName = 'ProFormList';
303
383
  export var ProFormList = /*#__PURE__*/memo(ProFormListBase);
304
384
  export default ProFormList;
305
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC50c3giXSwibmFtZXMiOlsianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwibWVtbyIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwiZGVmYXVsdCIsImNsYXNzbmFtZXMiLCJCdXR0b24iLCJUeXBvZ3JhcGh5TGFiZWwiLCJUeXBvZ3JhcGh5Qm9keSIsIkZvcm1MaXN0Q29udGV4dCIsInVzZUZvcm1MaXN0Q29udGV4dCIsInVzZVByb0Zvcm1TdGFibGUiLCJ1c2VQcm9Gb3JtU3RvcmUiLCJ1c2VTdG9yZVNlbGVjdG9yIiwiQ1NTX1BSRUZJWCIsIkRFRkFVTFRfVEVYVCIsIlBST0ZPUk1fTElTVF9MQUJFTF9TSVpFIiwiUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SIiwiZXh0cmFjdEJ1dHRvblByb3BzIiwiZ2V0TmVzdGVkVmFsdWUiLCJjbGFzc2VzIiwiY29uY2F0IiwibGlzdEtleUNvdW50ZXIiLCJnZW5lcmF0ZUtleSIsIkVNUFRZX0xJU1QiLCJMaXN0Um93QWN0aW9uc0Jhc2UiLCJfcmVmIiwiaW5kZXgiLCJyZWNvcmQiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJjb3B5SWNvblByb3BzIiwiZGVsZXRlSWNvblByb3BzIiwiYWN0aW9uIiwiYWN0aW9uUmVuZGVyIiwiaXRlbVJlbmRlciIsIm9uQ29weSIsIm9uUmVtb3ZlIiwiY29weUJ0blByb3BzIiwiZGVsZXRlQnRuUHJvcHMiLCJkZWZhdWx0RG9tIiwiY29weSIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJjb2xvciIsInNpemUiLCJyZXN0Iiwib25DbGljayIsImRpc2FibGVkIiwiY2hpbGRyZW4iLCJyZW5kZXJlZEFjdGlvbnMiLCJmaWx0ZXIiLCJCb29sZWFuIiwicm93Tm9kZSIsImNsYXNzTmFtZSIsImxpc3REb20iLCJkaXNwbGF5TmFtZSIsIkxpc3RSb3dBY3Rpb25zIiwiUHJvRm9ybUxpc3RCYXNlIiwicHJvcHMiLCJfYSIsIl9iIiwicmF3TmFtZSIsIm5hbWUiLCJsYWJlbCIsIm1pbiIsIm1heCIsInJlcXVpcmVkIiwiX3Byb3BzJHJlcXVpcmVkTWVzc2FnIiwicmVxdWlyZWRNZXNzYWdlIiwiaW5pdGlhbFZhbHVlIiwiY3JlYXRvckJ1dHRvblByb3BzIiwib25BZnRlckFkZCIsIm9uQWZ0ZXJSZW1vdmUiLCJwYXJlbnRDdHgiLCJmdWxsTmFtZSIsImxpc3ROYW1lIiwiX3VzZVByb0Zvcm1TdGFibGUiLCJzZXRGaWVsZFZhbHVlIiwic3RvcmUiLCJpbml0aWFsQXBwbGllZCIsImtleXNSZWYiLCJfdXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImxpc3RFcnJvciIsInNldExpc3RFcnJvciIsImxpc3QiLCJzdGF0ZSIsInJhdyIsImluY2x1ZGVzIiwidmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiY3VycmVudCIsImxlbmd0aCIsInB1c2giLCJzbGljZSIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hcCIsInZhbGlkYXRlTGlzdCIsImFkZCIsImRlZmF1bHRWYWx1ZSIsInZhbHVlIiwibmV3TGlzdCIsIm5ld0tleXMiLCJpbnNlcnRJbmRleCIsInNwbGljZSIsInJlbW92ZUF0IiwibW92ZSIsImZyb20iLCJ0byIsIl9uZXdMaXN0JHNwbGljZSIsIl9uZXdMaXN0JHNwbGljZTIiLCJtb3ZlZEl0ZW0iLCJfbmV3S2V5cyRzcGxpY2UiLCJfbmV3S2V5cyRzcGxpY2UyIiwibW92ZWRLZXkiLCJnZXRMaXN0IiwicmVtb3ZlIiwiZmllbGRPYmpDYWNoZSIsIk1hcCIsIm1hcHBlZEZpZWxkcyIsIm5leHRDYWNoZSIsImZpZWxkcyIsIl9pdGVtIiwia2V5IiwiZmllbGROYW1lIiwiY2FjaGVkIiwiZ2V0IiwiZmllbGQiLCJzZXQiLCJhY3Rpb25Sb3dzIiwiaGFzQ3JlYXRvciIsImNyZWF0b3JDb25maWciLCJfdHlwZW9mIiwiY3JlYXRvclBvc2l0aW9uIiwicG9zaXRpb24iLCJjcmVhdG9yVGV4dCIsInRleHQiLCJjcmVhdG9yQnV0dG9uIiwiZm9ybUxpc3RDb250ZXh0VmFsdWUiLCJQcm92aWRlciIsImFzIiwiUHJvRm9ybUxpc3QiXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVNBLEdBQUcsSUFBSUMsSUFBSSxFQUFFQyxRQUFRLElBQUlDLFNBQVMsRUFBRUMsSUFBSSxJQUFJQyxLQUFLLFFBQVEsbUJBQW1CO0FDQXJGLFNBQVNDLElBQUksRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBRXhELE9BQU9DLGFBQWEsTUFBTSw2QkFBNkI7QUFDdkQsT0FBT0MsWUFBWSxNQUFNLDRCQUE0QjtBQUNyRCxTQUFTQyxPQUFPLElBQUlDLFVBQVUsUUFBUSx3QkFBd0I7QUFDOUQsU0FBU0MsTUFBTSxRQUFRLFdBQVc7QUFDbEMsU0FBU0MsZUFBZSxFQUFFQyxjQUFjLFFBQVEsZUFBZTtBQUMvRCxTQUFTQyxlQUFlLEVBQUVDLGtCQUFrQixFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFRLFdBQVc7QUFDbEcsU0FBU0MsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ25ELFNBQVNDLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyx1QkFBdUIsRUFBRUMsd0JBQXdCLFFBQVEsYUFBYTtBQUN6RyxTQUFTQyxrQkFBa0IsRUFBRUMsY0FBYyxRQUFRLFNBQVM7QUFHNUQsSUFBTUMsT0FBTyxHQUFHZixVQUFVLElBQUFnQixNQUFBLENBQUlQLFVBQVUsVUFBTyxDQUFDO0FBRWhELElBQUlRLGNBQWMsR0FBRyxDQUFDO0FBQ3RCLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBO0VBQUEsZUFBQUYsTUFBQSxDQUF5QixFQUFFQyxjQUFjO0FBQUEsQ0FBRTtBQUU1RDtBQUNBO0FBQ0EsSUFBTUUsVUFBVSxHQUE4QixFQUFFO0FBZ0JoRDtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxrQkFBa0IsR0FBNEIsU0FBOUNBLGtCQUFrQkEsQ0FBQUMsSUFBQSxFQVluQjtFQUFBLElBWEhDLEtBQUssR0FBQUQsSUFBQSxDQUFMQyxLQUFLO0lBQ0xDLE1BQU0sR0FBQUYsSUFBQSxDQUFORSxNQUFNO0lBQ05DLE1BQU0sR0FBQUgsSUFBQSxDQUFORyxNQUFNO0lBQ05DLFNBQVMsR0FBQUosSUFBQSxDQUFUSSxTQUFTO0lBQ1RDLGFBQWEsR0FBQUwsSUFBQSxDQUFiSyxhQUFhO0lBQ2JDLGVBQWUsR0FBQU4sSUFBQSxDQUFmTSxlQUFlO0lBQ2ZDLE1BQU0sR0FBQVAsSUFBQSxDQUFOTyxNQUFNO0lBQ05DLFlBQVksR0FBQVIsSUFBQSxDQUFaUSxZQUFZO0lBQ1pDLFVBQVUsR0FBQVQsSUFBQSxDQUFWUyxVQUFVO0lBQ1ZDLE1BQU0sR0FBQVYsSUFBQSxDQUFOVSxNQUFNO0lBQ05DLFFBQVEsR0FBQVgsSUFBQSxDQUFSVyxRQUFRO0VBRVIsSUFBTUMsWUFBWSxHQUFHcEIsa0JBQWtCLENBQUNhLGFBQWEsQ0FBQztFQUN0RCxJQUFNUSxjQUFjLEdBQUdyQixrQkFBa0IsQ0FBQ2MsZUFBZSxDQUFDO0VBRTFELElBQU1RLFVBQVUsR0FBRztJQUNqQkMsSUFBSSxFQUFFVixhQUFhLEtBQUssS0FBSyxHQUMzQnRDLElBQUEsQ0FBQ2EsTUFBTSxFQUFBb0MsTUFBQSxDQUFBQyxNQUFBLENBQUE7TUFFTEMsSUFBSSxFQUFDLFFBQVE7TUFDYkMsS0FBSyxFQUFDLFdBQVc7TUFDakJDLElBQUksRUFBQztJQUFPLENBQUEsRUFDUlIsWUFBWSxDQUFDUyxJQUFJLEVBQUE7TUFDckJDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUVosTUFBTSxDQUFDVCxLQUFLLENBQUM7TUFBQTtNQUM1QnNCLFFBQVEsRUFBRSxDQUFDcEIsTUFBTSxJQUFJUyxZQUFZLENBQUNXLFFBQVE7TUFBQUMsUUFBQSxFQUV6Q25DLFlBQVksQ0FBQzBCO0lBQUksQ0FBQSxDQUFBLFVBQUFwQixNQUFBLENBUkxNLEtBQUssQ0FBRSxDQVNiLEdBQ1AsSUFBSTtJQUNSLFVBQVFLLGVBQWUsS0FBSyxLQUFLLEdBQy9CdkMsSUFBQSxDQUFDYSxNQUFNLEVBQUFvQyxNQUFBLENBQUFDLE1BQUEsQ0FBQTtNQUVMQyxJQUFJLEVBQUMsUUFBUTtNQUNiQyxLQUFLLEVBQUMsV0FBVztNQUNqQkMsSUFBSSxFQUFDO0lBQU8sQ0FBQSxFQUNSUCxjQUFjLENBQUNRLElBQUksRUFBQTtNQUN2QkMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFRWCxRQUFRLENBQUNWLEtBQUssQ0FBQztNQUFBO01BQzlCc0IsUUFBUSxFQUFFLENBQUNuQixTQUFTLElBQUlTLGNBQWMsQ0FBQ1UsUUFBUTtNQUFBQyxRQUFBLEVBRTlDbkMsWUFBWTtJQUFPLENBQUEsQ0FBQSxZQUFBTSxNQUFBLENBUkxNLEtBQUssQ0FBRSxDQVNmLEdBQ1A7RUR2REosQ0N3REQ7RUFFRCxJQUFNd0IsZUFBZSxHQUFHakIsWUFBWSxHQUNoQ0EsWUFBWSxDQUFDO0lBQUVQLEtBQUssRUFBTEEsS0FBSztJQUFFQyxNQUFNLEVBQU5BO0VBQU0sQ0FBRSxFQUFFSyxNQUFNLEVBQUVPLFVBQVUsQ0FBQyxHQUNuRCxDQUFDQSxVQUFVLENBQUNDLElBQUksRUFBRUQsVUFBVSxVQUFPLENBQUMsQ0FBQ1ksTUFBTSxDQUFDQyxPQUFPLENBQUM7RUFFeEQsSUFBTUMsT0FBTyxHQUNYN0QsSUFBQSxDQUFBLEtBQUEsRUFBQTtJQUFLOEQsU0FBUyxFQUFFbkMsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUFBOEIsUUFBQSxFQUNuQ0M7RUFBNEIsQ0FBQSxDQUVoQztFQUVELElBQUloQixVQUFVLEVBQUU7SUFDZCxPQUFPMUMsSUFBQSxDQUFBRSxTQUFBLEVBQUE7TUFBQXVELFFBQUEsRUFBR2YsVUFBVSxDQUFDO1FBQUVxQixPQUFPLEVBQUVGLE9BQU87UUFBRXJCLE1BQU0sRUFBTkE7TUFBTSxDQUFFO0lBQUMsQ0FBQSxDQUFJO0VBQ3hEO0VBRUEsT0FBT3FCLE9BQU87QUFDaEIsQ0FBQztBQUVEN0Isa0JBQWtCLENBQUNnQyxXQUFXLEdBQUcsdUJBQXVCO0FBQ3hELElBQU1DLGNBQWMsZ0JBQUc1RCxJQUFJLENBQUMyQixrQkFBa0IsQ0FBQztBQUUvQyxJQUFNa0MsZUFBZSxHQUF5QixTQUF4Q0EsZUFBZUEsQ0FBMEJDLEtBQUssRUFBSTtFRGpFcEQsSUFBSUMsRUFBRSxFQUFFQyxFQUFFO0VDa0VaLElBQ1FDLE9BQU8sR0FlWEgsS0FBSyxDQWZQSSxJQUFJO0lBQ0pDLEtBQUssR0FjSEwsS0FBSyxDQWRQSyxLQUFLO0lBQ0xDLEdBQUcsR0FhRE4sS0FBSyxDQWJQTSxHQUFHO0lBQ0hDLEdBQUcsR0FZRFAsS0FBSyxDQVpQTyxHQUFHO0lBQ0hDLFFBQVEsR0FXTlIsS0FBSyxDQVhQUSxRQUFRO0lBQUFDLHFCQUFBLEdBV05ULEtBQUssQ0FWUFUsZUFBZTtJQUFmQSxlQUFlLEdBQUFELHFCQUFBLGNBQUcsMkJBQTJCLEdBQUFBLHFCQUFBO0lBQzdDRSxZQUFZLEdBU1ZYLEtBQUssQ0FUUFcsWUFBWTtJQUNaeEMsYUFBYSxHQVFYNkIsS0FBSyxDQVJQN0IsYUFBYTtJQUNiQyxlQUFlLEdBT2I0QixLQUFLLENBUFA1QixlQUFlO0lBQ2Z3QyxrQkFBa0IsR0FNaEJaLEtBQUssQ0FOUFksa0JBQWtCO0lBQ2xCckMsVUFBVSxHQUtSeUIsS0FBSyxDQUxQekIsVUFBVTtJQUNWRCxZQUFZLEdBSVYwQixLQUFLLENBSlAxQixZQUFZO0lBQ1pnQixRQUFRLEdBR05VLEtBQUssQ0FIUFYsUUFBUTtJQUNSdUIsVUFBVSxHQUVSYixLQUFLLENBRlBhLFVBQVU7SUFDVkMsYUFBYSxHQUNYZCxLQUFLLENBRFBjLGFBQWE7RUFHZjtFQUNBLElBQU1DLFNBQVMsR0FBR2pFLGtCQUFrQixDQUFBLENBQUU7RUFDdEMsSUFBTWtFLFFBQVEsR0FBR0QsU0FBUyxDQUFDRSxRQUFRLE1BQUF4RCxNQUFBLENBQU1zRCxTQUFTLENBQUNFLFFBQVEsT0FBQXhELE1BQUEsQ0FBSTBDLE9BQU8sSUFBS0EsT0FBTztFQUVsRixJQUFBZSxpQkFBQSxHQUEwQm5FLGdCQUFnQixDQUFBLENBQUU7SUFBcENvRSxhQUFhLEdBQUFELGlCQUFBLENBQWJDLGFBQWE7RUFDckIsSUFBTUMsS0FBSyxHQUFHcEUsZUFBZSxDQUFBLENBQUU7RUFDL0IsSUFBTXFFLGNBQWMsR0FBR2hGLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDcEMsSUFBTWlGLE9BQU8sR0FBR2pGLE1BQU0sQ0FBVyxFQUFFLENBQUM7RUFDcEMsSUFBQWtGLGFBQUEsR0FBa0NoRixZQUFZLENBQWdCLElBQUksQ0FBQztJQUFBaUYsY0FBQSxHQUFBQyxjQUFBLENBQUFGLGFBQUE7SUFBNURHLFNBQVMsR0FBQUYsY0FBQTtJQUFFRyxZQUFZLEdBQUFILGNBQUE7RUFFOUI7RUFDQTtFQUNBLElBQU1JLElBQUksR0FBRzNFLGdCQUFnQixDQUFDbUUsS0FBSyxFQUFFLFVBQUNTLEtBQUssRUFBSTtJQUM3QyxJQUFNQyxHQUFHLEdBQUdkLFFBQVEsQ0FBQ2UsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUM5QnhFLGNBQWMsQ0FBQ3NFLEtBQUssQ0FBQ0csTUFBTSxFQUFFaEIsUUFBUSxDQUFDLEdBQ3RDYSxLQUFLLENBQUNHLE1BQU0sQ0FBQ2hCLFFBQVEsQ0FBQztJQUMxQixPQUFPaUIsS0FBSyxDQUFDQyxPQUFPLENBQUNKLEdBQUcsQ0FBQyxHQUFJQSxHQUFpQyxHQUFHbEUsVUFBVTtFQUM3RSxDQUFDLENBQUM7RUFFRjtFQUNBLE9BQU8wRCxPQUFPLENBQUNhLE9BQU8sQ0FBQ0MsTUFBTSxHQUFHUixJQUFJLENBQUNRLE1BQU0sRUFBRTtJQUMzQ2QsT0FBTyxDQUFDYSxPQUFPLENBQUNFLElBQUksQ0FBQzFFLFdBQVcsQ0FBQSxDQUFFLENBQUM7RUFDckM7RUFDQSxJQUFJMkQsT0FBTyxDQUFDYSxPQUFPLENBQUNDLE1BQU0sR0FBR1IsSUFBSSxDQUFDUSxNQUFNLEVBQUU7SUFDeENkLE9BQU8sQ0FBQ2EsT0FBTyxHQUFHYixPQUFPLENBQUNhLE9BQU8sQ0FBQ0csS0FBSyxDQUFDLENBQUMsRUFBRVYsSUFBSSxDQUFDUSxNQUFNLENBQUM7RUFDekQ7RUFFQTtFQUNBakcsU0FBUyxDQUFDLFlBQUs7SUFDYixJQUFJa0YsY0FBYyxDQUFDYyxPQUFPLEVBQUU7SUFDNUIsSUFBSVAsSUFBSSxDQUFDUSxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ3ZCLElBQUksQ0FBQ0gsS0FBSyxDQUFDQyxPQUFPLENBQUN2QixZQUFZLENBQUMsSUFBSUEsWUFBWSxDQUFDeUIsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUMvRGYsY0FBYyxDQUFDYyxPQUFPLEdBQUcsSUFBSTtJQUM3QmhCLGFBQWEsQ0FBQ0gsUUFBUSxFQUFBdUIsa0JBQUEsQ0FBTTVCLFlBQVksQ0FBQyxDQUFDO0lBQzFDVyxPQUFPLENBQUNhLE9BQU8sR0FBR3hCLFlBQVksQ0FBQzZCLEdBQUcsQ0FBQztNQUFBLE9BQU03RSxXQUFXLENBQUEsQ0FBRTtJQUFBLEVBQUM7RUFDekQsQ0FBQyxFQUFFLENBQUNpRSxJQUFJLENBQUNRLE1BQU0sRUFBRXpCLFlBQVksRUFBRUssUUFBUSxFQUFFRyxhQUFhLENBQUMsQ0FBQztFQUV4RDtFQUNBaEYsU0FBUyxDQUFDLFlBQUs7SUFDYixJQUFJcUUsUUFBUSxJQUFJb0IsSUFBSSxDQUFDUSxNQUFNLEdBQUcsQ0FBQyxJQUFJVixTQUFTLEVBQUU7TUFDNUNDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDcEI7RUFDRixDQUFDLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDUSxNQUFNLEVBQUU1QixRQUFRLEVBQUVrQixTQUFTLEVBQUVDLFlBQVksQ0FBQyxDQUFDO0VBRXBELElBQU0xRCxNQUFNLEdBQUdzQyxHQUFHLElBQUksSUFBSSxJQUFJcUIsSUFBSSxDQUFDUSxNQUFNLEdBQUc3QixHQUFHO0VBQy9DLElBQU1yQyxTQUFTLEdBQUdvQyxHQUFHLElBQUksSUFBSSxJQUFJc0IsSUFBSSxDQUFDUSxNQUFNLEdBQUc5QixHQUFHO0VBRWxELElBQU1tQyxZQUFZLEdBQUduRyxhQUFhLENBQUMsWUFBYztJQUMvQyxJQUFJLENBQUNrRSxRQUFRLEVBQUUsT0FBTyxJQUFJO0lBQzFCLElBQUlvQixJQUFJLENBQUNRLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDckJULFlBQVksQ0FBQ2pCLGVBQWUsQ0FBQztNQUM3QixPQUFPLEtBQUs7SUFDZDtJQUNBaUIsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNsQixPQUFPLElBQUk7RUFDYixDQUFDLENBQUM7RUFFRixJQUFNZSxHQUFHLEdBQUdwRyxhQUFhLENBQUMsVUFBQ3FHLFlBQXNDLEVBQUU1RSxLQUFjLEVBQUk7SUFDbkYsSUFBSSxDQUFDRSxNQUFNLEVBQUU7SUFDYixJQUFNMkUsS0FBSyxHQUFHRCxZQUFZLEtBQUEsSUFBQSxJQUFaQSxZQUFZLEtBQUEsS0FBQSxDQUFBLEdBQVpBLFlBQVksR0FBSSxDQUFBLENBQUU7SUFDaEMsSUFBTUUsT0FBTyxHQUFBTixrQkFBQSxDQUFPWCxJQUFJLENBQUM7SUFDekIsSUFBTWtCLE9BQU8sR0FBQVAsa0JBQUEsQ0FBT2pCLE9BQU8sQ0FBQ2EsT0FBTyxDQUFDO0lBQ3BDLElBQU1ZLFdBQVcsR0FBRyxPQUFPaEYsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxHQUFHOEUsT0FBTyxDQUFDVCxNQUFNO0lBRXRFUyxPQUFPLENBQUNHLE1BQU0sQ0FBQ0QsV0FBVyxFQUFFLENBQUMsRUFBRUgsS0FBSyxDQUFDO0lBQ3JDRSxPQUFPLENBQUNFLE1BQU0sQ0FBQ0QsV0FBVyxFQUFFLENBQUMsRUFBRXBGLFdBQVcsQ0FBQSxDQUFFLENBQUM7SUFFN0MyRCxPQUFPLENBQUNhLE9BQU8sR0FBR1csT0FBTztJQUN6QjNCLGFBQWEsQ0FBQ0gsUUFBUSxFQUFFNkIsT0FBTyxDQUFDO0lBQ2hDaEMsVUFBVSxLQUFBLElBQUEsSUFBVkEsVUFBVSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFWQSxVQUFVLENBQUcrQixLQUFLLEVBQUVHLFdBQVcsQ0FBQztFQUNsQyxDQUFDLENBQUM7RUFFRixJQUFNRSxRQUFRLEdBQUczRyxhQUFhLENBQUMsVUFBQ3lCLEtBQWEsRUFBSTtJQUMvQyxJQUFJLENBQUNHLFNBQVMsRUFBRTtJQUNoQixJQUFNMkUsT0FBTyxHQUFBTixrQkFBQSxDQUFPWCxJQUFJLENBQUM7SUFDekIsSUFBTWtCLE9BQU8sR0FBQVAsa0JBQUEsQ0FBT2pCLE9BQU8sQ0FBQ2EsT0FBTyxDQUFDO0lBRXBDVSxPQUFPLENBQUNHLE1BQU0sQ0FBQ2pGLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIrRSxPQUFPLENBQUNFLE1BQU0sQ0FBQ2pGLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFeEJ1RCxPQUFPLENBQUNhLE9BQU8sR0FBR1csT0FBTztJQUN6QjNCLGFBQWEsQ0FBQ0gsUUFBUSxFQUFFNkIsT0FBTyxDQUFDO0lBQ2hDL0IsYUFBYSxLQUFBLElBQUEsSUFBYkEsYUFBYSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFiQSxhQUFhLENBQUcvQyxLQUFLLENBQUM7SUFFdEI7SUFDQSxJQUFJeUMsUUFBUSxJQUFJcUMsT0FBTyxDQUFDVCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3BDVCxZQUFZLENBQUNqQixlQUFlLENBQUM7SUFDL0I7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNN0IsSUFBSSxHQUFHdkMsYUFBYSxDQUFDLFVBQUN5QixLQUFhLEVBQUk7SUFDM0MsSUFBSSxDQUFDRSxNQUFNLEVBQUU7SUFDYixJQUFNMkUsS0FBSyxHQUFHaEIsSUFBSSxDQUFDN0QsS0FBSyxDQUFDLEdBQUVlLE1BQUEsQ0FBQUMsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFNNkMsSUFBSSxDQUFDN0QsS0FBSyxDQUFDLENBQUEsR0FBSyxDQUFBLENBQUU7SUFDbkQyRSxHQUFHLENBQUNFLEtBQUssRUFBRTdFLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDdkIsQ0FBQyxDQUFDO0VBRUYsSUFBTW1GLElBQUksR0FBRzVHLGFBQWEsQ0FBQyxVQUFDNkcsSUFBWSxFQUFFQyxFQUFVLEVBQUk7SUFDdEQsSUFBSUQsSUFBSSxLQUFLQyxFQUFFLEVBQUU7SUFDakIsSUFBSUQsSUFBSSxHQUFHLENBQUMsSUFBSUEsSUFBSSxJQUFJdkIsSUFBSSxDQUFDUSxNQUFNLElBQUlnQixFQUFFLEdBQUcsQ0FBQyxJQUFJQSxFQUFFLElBQUl4QixJQUFJLENBQUNRLE1BQU0sRUFBRTtJQUVwRSxJQUFNUyxPQUFPLEdBQUFOLGtCQUFBLENBQU9YLElBQUksQ0FBQztJQUN6QixJQUFNa0IsT0FBTyxHQUFBUCxrQkFBQSxDQUFPakIsT0FBTyxDQUFDYSxPQUFPLENBQUM7SUFDcEMsSUFBQWtCLGVBQUEsR0FBb0JSLE9BQU8sQ0FBQ0csTUFBTSxDQUFDRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQUFHLGdCQUFBLEdBQUE3QixjQUFBLENBQUE0QixlQUFBO01BQXBDRSxTQUFTLEdBQUFELGdCQUFBO0lBQ2hCLElBQUFFLGVBQUEsR0FBbUJWLE9BQU8sQ0FBQ0UsTUFBTSxDQUFDRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO01BQUFNLGdCQUFBLEdBQUFoQyxjQUFBLENBQUErQixlQUFBO01BQW5DRSxRQUFRLEdBQUFELGdCQUFBO0lBRWZaLE9BQU8sQ0FBQ0csTUFBTSxDQUFDSSxFQUFFLEVBQUUsQ0FBQyxFQUFFRyxTQUFTLENBQUM7SUFDaENULE9BQU8sQ0FBQ0UsTUFBTSxDQUFDSSxFQUFFLEVBQUUsQ0FBQyxFQUFFTSxRQUFRLENBQUM7SUFFL0JwQyxPQUFPLENBQUNhLE9BQU8sR0FBR1csT0FBTztJQUN6QjNCLGFBQWEsQ0FBQ0gsUUFBUSxFQUFFNkIsT0FBTyxDQUFDO0VBQ2xDLENBQUMsQ0FBQztFQUVGLElBQU1jLE9BQU8sR0FBR3JILGFBQWEsQ0FBQztJQUFBLE9BQU1zRixJQUFJO0VBQUEsRUFBQztFQUV6QyxJQUFNdkQsTUFBTSxHQUFHakMsT0FBTyxDQUNwQjtJQUFBLE9BQU87TUFBRXNHLEdBQUcsRUFBSEEsR0FBRztNQUFFa0IsTUFBTSxFQUFFWCxRQUFRO01BQUVDLElBQUksRUFBSkEsSUFBSTtNQUFFckUsSUFBSSxFQUFKQSxJQUFJO01BQUU4RSxPQUFPLEVBQVBBO0lBQU8sQ0FBRTtFQUFBLENBQUMsRUFDdEQsQ0FBQ2pCLEdBQUcsRUFBRU8sUUFBUSxFQUFFQyxJQUFJLEVBQUVyRSxJQUFJLEVBQUU4RSxPQUFPLENBQUMsQ0FDckM7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNRSxhQUFhLEdBQUd4SCxNQUFNLENBQTZDLElBQUl5SCxHQUFHLENBQUEsQ0FBRSxDQUFDO0VBQ25GLElBQU1DLFlBQVksR0FBRzNILE9BQU8sQ0FBQyxZQUFLO0lBQ2hDLElBQU00SCxTQUFTLEdBQUcsSUFBSUYsR0FBRyxDQUFBLENBQXlDO0lBQ2xFLElBQU1HLE1BQU0sR0FBR3JDLElBQUksQ0FBQ1ksR0FBRyxDQUFDLFVBQUMwQixLQUFLLEVBQUVuRyxLQUFLLEVBQUk7TUFDdkMsSUFBTW9HLEdBQUcsR0FBRzdDLE9BQU8sQ0FBQ2EsT0FBTyxDQUFDcEUsS0FBSyxDQUFDLGdCQUFBTixNQUFBLENBQWdCTSxLQUFLLENBQUU7TUFDekQsSUFBTXFHLFNBQVMsTUFBQTNHLE1BQUEsQ0FBTXVELFFBQVEsT0FBQXZELE1BQUEsQ0FBSU0sS0FBSyxDQUFFO01BQ3hDLElBQU1zRyxNQUFNLEdBQUdSLGFBQWEsQ0FBQzFCLE9BQU8sQ0FBQ21DLEdBQUcsQ0FBQ0gsR0FBRyxDQUFDO01BQzdDLElBQU1JLEtBQUssR0FDVEYsTUFBTSxJQUFJQSxNQUFNLENBQUNqRSxJQUFJLEtBQUtnRSxTQUFTLEdBQUdDLE1BQU0sR0FBRztRQUFFakUsSUFBSSxFQUFFZ0UsU0FBUztRQUFFRCxHQUFHLEVBQUhBO01BQUcsQ0FBRTtNQUN6RUgsU0FBUyxDQUFDUSxHQUFHLENBQUNMLEdBQUcsRUFBRUksS0FBSyxDQUFDO01BQ3pCLE9BQU9BLEtBQUs7SUFDZCxDQUFDLENBQUM7SUFDRlYsYUFBYSxDQUFDMUIsT0FBTyxHQUFHNkIsU0FBUztJQUNqQyxPQUFPQyxNQUFNO0VBQ2YsQ0FBQyxFQUFFLENBQUNyQyxJQUFJLEVBQUVaLFFBQVEsQ0FBQyxDQUFDO0VBRXBCO0VBQ0E7RUFDQSxJQUFNcEIsT0FBTyxHQUFHeEQsT0FBTyxDQUNyQjtJQUFBLE9BQU8sT0FBT2tELFFBQVEsS0FBSyxVQUFVLEdBQUdBLFFBQVEsQ0FBQ3lFLFlBQVksRUFBRTFGLE1BQU0sQ0FBQyxHQUFHaUIsUUFBUTtFQUFBLENBQUMsRUFDbEYsQ0FBQ0EsUUFBUSxFQUFFeUUsWUFBWSxFQUFFMUYsTUFBTSxDQUFDLENBQ2pDO0VBRUQ7RUFDQSxJQUFNb0csVUFBVSxHQUFHN0MsSUFBSSxDQUFDWSxHQUFHLENBQUMsVUFBQ3hFLE1BQU0sRUFBRUQsS0FBSztJQUFBLE9BQ3hDbEMsSUFBQSxDQUFDaUUsY0FBYyxFQUFBO01BRWIvQixLQUFLLEVBQUVBLEtBQUs7TUFDWkMsTUFBTSxFQUFFQSxNQUFNO01BQ2RDLE1BQU0sRUFBRUEsTUFBTTtNQUNkQyxTQUFTLEVBQUVBLFNBQVM7TUFDcEJDLGFBQWEsRUFBRUEsYUFBYTtNQUM1QkMsZUFBZSxFQUFFQSxlQUFlO01BQ2hDQyxNQUFNLEVBQUVBLE1BQU07TUFDZEMsWUFBWSxFQUFFQSxZQUFZO01BQzFCQyxVQUFVLEVBQUVBLFVBQVU7TUFDdEJDLE1BQU0sRUFBRUssSUFBSTtNQUNaSixRQUFRLEVBQUV3RTtJQUFRLENBQUEsRUFYYjNCLE9BQU8sQ0FBQ2EsT0FBTyxDQUFDcEUsS0FBSyxDQUFDLElBQUlBLEtBQUssQ0FZcEM7RUFBQSxDQUNILENBQUM7RUFFRjtFQUNBLElBQU0yRyxVQUFVLEdBQUc5RCxrQkFBa0IsS0FBSyxLQUFLO0VBQy9DLElBQU0rRCxhQUFhLEdBQUdELFVBQVUsSUFBSUUsT0FBQSxDQUFPaEUsa0JBQWtCLE1BQUssUUFBUSxHQUFHQSxrQkFBa0IsR0FBRyxDQUFBLENBQUU7RUFDcEcsSUFBTWlFLGVBQWUsR0FBRyxDQUFBNUUsRUFBQSxHQUFDMEUsYUFBeUMsS0FBQSxJQUFBLElBQXpDQSxhQUFhLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQWJBLGFBQWEsQ0FBOEJHLFFBQVEsTUFBQSxJQUFBLElBQUE3RSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxRQUFRO0VBQ3hGLElBQU04RSxXQUFXLEdBQUcsQ0FBQTdFLEVBQUEsR0FBQ3lFLGFBQXlDLEtBQUEsSUFBQSxJQUF6Q0EsYUFBYSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFiQSxhQUFhLENBQThCSyxJQUFJLE1BQUEsSUFBQSxJQUFBOUUsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUkvQyxZQUFZLENBQUN1RixHQUFHO0VBRXhGLElBQU11QyxhQUFhLEdBQUdQLFVBQVUsR0FDOUI3SSxJQUFBLENBQUNhLE1BQU0sRUFBQTtJQUNMc0MsSUFBSSxFQUFDLFFBQVE7SUFDYkMsS0FBSyxFQUFDLFdBQVc7SUFDakJHLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQU87TUFDWixJQUFJeUYsZUFBZSxLQUFLLEtBQUssRUFBRTtRQUM3Qm5DLEdBQUcsQ0FBQyxDQUFBLENBQUUsRUFBRSxDQUFDLENBQUM7TUFDWixDQUFDLE1BQU07UUFDTEEsR0FBRyxDQUFBLENBQUU7TUFDUDtJQUNGLENBQUM7SUFDRHJELFFBQVEsRUFBRSxDQUFDcEIsTUFBTTtJQUFBcUIsUUFBQSxFQUVoQnlGO0VBQXdCLENBQUEsQ0FDbEIsR0FDUCxJQUFJO0VBRVIsSUFBTUcsb0JBQW9CLEdBQUc5SSxPQUFPLENBQUM7SUFBQSxPQUFPO01BQUU2RSxRQUFRLEVBQUVEO0lBQVEsQ0FBRTtFQUFBLENBQUMsRUFBRSxDQUFDQSxRQUFRLENBQUMsQ0FBQztFQUVoRixPQUNFbkYsSUFBQSxDQUFDZ0IsZUFBZSxDQUFDc0ksUUFBUSxFQUFBO0lBQUN2QyxLQUFLLEVBQUVzQyxvQkFBb0I7SUFBQTVGLFFBQUEsRUFDbkRyRCxLQUFBLENBQUEsS0FBQSxFQUFBO01BQUswRCxTQUFTLEVBQUVuQyxPQUFPLENBQUEsQ0FBRTtNQUFBOEIsUUFBQSxFQUFBLENBQ3RCZSxLQUFLLElBQUl4RSxJQUFBLENBQUNjLGVBQWUsRUFBQTtRQUFDZ0QsU0FBUyxFQUFFbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFMEIsSUFBSSxFQUFFOUIsdUJBQXVCO1FBQUU2QixLQUFLLEVBQUU1Qix3QkFBd0I7UUFBQWlDLFFBQUEsRUFBR2U7TUFBSyxDQUFBLENBQW1CLEVBQ2hKd0UsZUFBZSxLQUFLLEtBQUssSUFBSUksYUFBYSxFQUMzQ3BKLElBQUEsQ0FBQSxLQUFBLEVBQUE7UUFBSzhELFNBQVMsRUFBRW5DLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFBQThCLFFBQUEsRUFBR007TUFBTyxDQUFBLENBQU8sRUFDbkQvRCxJQUFBLENBQUEsS0FBQSxFQUFBO1FBQUs4RCxTQUFTLEVBQUVuQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQUE4QixRQUFBLEVBQUdtRjtNQUFVLENBQUEsQ0FBTyxFQUNyREksZUFBZSxLQUFLLFFBQVEsSUFBSUksYUFBYSxFQUM3Q3ZELFNBQVMsSUFBSTdGLElBQUEsQ0FBQ2UsY0FBYyxFQUFBO1FBQUN3SSxFQUFFLEVBQUMsS0FBSztRQUFDbEcsSUFBSSxFQUFDLElBQUk7UUFBQ0QsS0FBSyxFQUFDLFFBQVE7UUFBQUssUUFBQSxFQUFFb0M7TUFBUyxDQUFBLENBQWtCO0lBQUEsQ0FBQTtFQUN4RixDQUFBLENBQ21CO0FBRS9CLENBQUM7QUFFRDNCLGVBQWUsQ0FBQ0YsV0FBVyxHQUFHLGFBQWE7QUFFM0MsT0FBTyxJQUFNd0YsV0FBVyxnQkFBR25KLElBQUksQ0FBQzZELGVBQWUsQ0FBQztBQUVoRCxlQUFlc0YsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vUHJvRm9ybUxpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqc3ggYXMgX2pzeCwgRnJhZ21lbnQgYXMgX0ZyYWdtZW50LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uJztcbmltcG9ydCB7IFR5cG9ncmFwaHlMYWJlbCwgVHlwb2dyYXBoeUJvZHkgfSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCB7IEZvcm1MaXN0Q29udGV4dCwgdXNlRm9ybUxpc3RDb250ZXh0LCB1c2VQcm9Gb3JtU3RhYmxlLCB1c2VQcm9Gb3JtU3RvcmUgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmVTZWxlY3RvciB9IGZyb20gJy4vY29yZS9mb3JtU3RvcmUnO1xuaW1wb3J0IHsgQ1NTX1BSRUZJWCwgREVGQVVMVF9URVhULCBQUk9GT1JNX0xJU1RfTEFCRUxfU0laRSwgUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZXh0cmFjdEJ1dHRvblByb3BzLCBnZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMoYCR7Q1NTX1BSRUZJWH0tbGlzdGApO1xubGV0IGxpc3RLZXlDb3VudGVyID0gMDtcbmNvbnN0IGdlbmVyYXRlS2V5ID0gKCkgPT4gYGxpc3RfJHsrK2xpc3RLZXlDb3VudGVyfWA7XG4vLyBTdGFibGUgZW1wdHkgcmVzdWx0IGZvciB0aGUgbm8tdmFsdWUgY2FzZSDigJQgYSBmcmVzaCBbXSBwZXIgc2VsZWN0b3IgcnVuXG4vLyB3b3VsZCBuZXZlciBjb21wYXJlIGVxdWFsIGFuZCBsb29wIHRoZSBzdWJzY3JpcHRpb24uXG5jb25zdCBFTVBUWV9MSVNUID0gW107XG4vLyBSb3ctbGV2ZWwgbWVtbyBib3VuZGFyeTogc2V0TmVzdGVkVmFsdWUgY2xvbmVzIE9OTFkgdGhlIGVkaXRlZCByb3csIHNvXG4vLyB1bnRvdWNoZWQgcm93cyBrZWVwIHRoZWlyIHJlY29yZCBpZGVudGl0eSBhbmQgYmFpbCBvdXQgaGVyZSB3aGlsZSBhXG4vLyBzaWJsaW5nIHJvdyBpcyBiZWluZyBlZGl0ZWQuXG5jb25zdCBMaXN0Um93QWN0aW9uc0Jhc2UgPSAoeyBpbmRleCwgcmVjb3JkLCBjYW5BZGQsIGNhblJlbW92ZSwgY29weUljb25Qcm9wcywgZGVsZXRlSWNvblByb3BzLCBhY3Rpb24sIGFjdGlvblJlbmRlciwgaXRlbVJlbmRlciwgb25Db3B5LCBvblJlbW92ZSwgfSkgPT4ge1xuICAgIGNvbnN0IGNvcHlCdG5Qcm9wcyA9IGV4dHJhY3RCdXR0b25Qcm9wcyhjb3B5SWNvblByb3BzKTtcbiAgICBjb25zdCBkZWxldGVCdG5Qcm9wcyA9IGV4dHJhY3RCdXR0b25Qcm9wcyhkZWxldGVJY29uUHJvcHMpO1xuICAgIGNvbnN0IGRlZmF1bHREb20gPSB7XG4gICAgICAgIGNvcHk6IGNvcHlJY29uUHJvcHMgIT09IGZhbHNlID8gKF9qc3goQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgY29sb3I6IFwic2Vjb25kYXJ5XCIsIHNpemU6IFwic21hbGxcIiB9LCBjb3B5QnRuUHJvcHMucmVzdCwgeyBvbkNsaWNrOiAoKSA9PiBvbkNvcHkoaW5kZXgpLCBkaXNhYmxlZDogIWNhbkFkZCB8fCBjb3B5QnRuUHJvcHMuZGlzYWJsZWQsIGNoaWxkcmVuOiBERUZBVUxUX1RFWFQuY29weSB9KSwgYGNvcHktJHtpbmRleH1gKSkgOiBudWxsLFxuICAgICAgICBkZWxldGU6IGRlbGV0ZUljb25Qcm9wcyAhPT0gZmFsc2UgPyAoX2pzeChCdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBjb2xvcjogXCJzZWNvbmRhcnlcIiwgc2l6ZTogXCJzbWFsbFwiIH0sIGRlbGV0ZUJ0blByb3BzLnJlc3QsIHsgb25DbGljazogKCkgPT4gb25SZW1vdmUoaW5kZXgpLCBkaXNhYmxlZDogIWNhblJlbW92ZSB8fCBkZWxldGVCdG5Qcm9wcy5kaXNhYmxlZCwgY2hpbGRyZW46IERFRkFVTFRfVEVYVC5kZWxldGUgfSksIGBkZWxldGUtJHtpbmRleH1gKSkgOiBudWxsLFxuICAgIH07XG4gICAgY29uc3QgcmVuZGVyZWRBY3Rpb25zID0gYWN0aW9uUmVuZGVyXG4gICAgICAgID8gYWN0aW9uUmVuZGVyKHsgaW5kZXgsIHJlY29yZCB9LCBhY3Rpb24sIGRlZmF1bHREb20pXG4gICAgICAgIDogW2RlZmF1bHREb20uY29weSwgZGVmYXVsdERvbS5kZWxldGVdLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCByb3dOb2RlID0gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3Jvdy1hY3Rpb25zJyksIGNoaWxkcmVuOiByZW5kZXJlZEFjdGlvbnMgfSkpO1xuICAgIGlmIChpdGVtUmVuZGVyKSB7XG4gICAgICAgIHJldHVybiBfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogaXRlbVJlbmRlcih7IGxpc3REb206IHJvd05vZGUsIGFjdGlvbiB9KSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd05vZGU7XG59O1xuTGlzdFJvd0FjdGlvbnNCYXNlLmRpc3BsYXlOYW1lID0gJ1Byb0Zvcm1MaXN0Um93QWN0aW9ucyc7XG5jb25zdCBMaXN0Um93QWN0aW9ucyA9IG1lbW8oTGlzdFJvd0FjdGlvbnNCYXNlKTtcbmNvbnN0IFByb0Zvcm1MaXN0QmFzZSA9IChwcm9wcykgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgeyBuYW1lOiByYXdOYW1lLCBsYWJlbCwgbWluLCBtYXgsIHJlcXVpcmVkLCByZXF1aXJlZE1lc3NhZ2UgPSAnVGhpcyBsaXN0IGNhbm5vdCBiZSBlbXB0eScsIGluaXRpYWxWYWx1ZSwgY29weUljb25Qcm9wcywgZGVsZXRlSWNvblByb3BzLCBjcmVhdG9yQnV0dG9uUHJvcHMsIGl0ZW1SZW5kZXIsIGFjdGlvblJlbmRlciwgY2hpbGRyZW4sIG9uQWZ0ZXJBZGQsIG9uQWZ0ZXJSZW1vdmUsIH0gPSBwcm9wcztcbiAgICAvLyDilIDilIAgTmVzdGVkIGxpc3Q6IHByZXBlbmQgcGFyZW50IGxpc3QgbmFtZSDilIDilIBcbiAgICBjb25zdCBwYXJlbnRDdHggPSB1c2VGb3JtTGlzdENvbnRleHQoKTtcbiAgICBjb25zdCBmdWxsTmFtZSA9IHBhcmVudEN0eC5saXN0TmFtZSA/IGAke3BhcmVudEN0eC5saXN0TmFtZX0uJHtyYXdOYW1lfWAgOiByYXdOYW1lO1xuICAgIGNvbnN0IHsgc2V0RmllbGRWYWx1ZSB9ID0gdXNlUHJvRm9ybVN0YWJsZSgpO1xuICAgIGNvbnN0IHN0b3JlID0gdXNlUHJvRm9ybVN0b3JlKCk7XG4gICAgY29uc3QgaW5pdGlhbEFwcGxpZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGtleXNSZWYgPSB1c2VSZWYoW10pO1xuICAgIGNvbnN0IFtsaXN0RXJyb3IsIHNldExpc3RFcnJvcl0gPSB1c2VTYWZlU3RhdGUobnVsbCk7XG4gICAgLy8gU3Vic2NyaWJlIE9OTFkgdG8gdGhpcyBsaXN0J3Mgb3duIHZhbHVlOiB0eXBpbmcgZWxzZXdoZXJlIGluIHRoZSBmb3JtXG4gICAgLy8gbGVhdmVzIHRoZSBhcnJheSBpZGVudGl0eSB1bnRvdWNoZWQgYW5kIHRoaXMgY29tcG9uZW50IGRvZXMgbm90IHJlbmRlci5cbiAgICBjb25zdCBsaXN0ID0gdXNlU3RvcmVTZWxlY3RvcihzdG9yZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGZ1bGxOYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgID8gZ2V0TmVzdGVkVmFsdWUoc3RhdGUudmFsdWVzLCBmdWxsTmFtZSlcbiAgICAgICAgICAgIDogc3RhdGUudmFsdWVzW2Z1bGxOYW1lXTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmF3KSA/IHJhdyA6IEVNUFRZX0xJU1Q7XG4gICAgfSk7XG4gICAgLy8gU3luYyBrZXlzIHdpdGggbGlzdCBsZW5ndGhcbiAgICB3aGlsZSAoa2V5c1JlZi5jdXJyZW50Lmxlbmd0aCA8IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGtleXNSZWYuY3VycmVudC5wdXNoKGdlbmVyYXRlS2V5KCkpO1xuICAgIH1cbiAgICBpZiAoa2V5c1JlZi5jdXJyZW50Lmxlbmd0aCA+IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGtleXNSZWYuY3VycmVudCA9IGtleXNSZWYuY3VycmVudC5zbGljZSgwLCBsaXN0Lmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIEFwcGx5IGluaXRpYWwgdmFsdWUgb25jZVxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpbml0aWFsQXBwbGllZC5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggIT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbml0aWFsVmFsdWUpIHx8IGluaXRpYWxWYWx1ZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluaXRpYWxBcHBsaWVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBzZXRGaWVsZFZhbHVlKGZ1bGxOYW1lLCBbLi4uaW5pdGlhbFZhbHVlXSk7XG4gICAgICAgIGtleXNSZWYuY3VycmVudCA9IGluaXRpYWxWYWx1ZS5tYXAoKCkgPT4gZ2VuZXJhdGVLZXkoKSk7XG4gICAgfSwgW2xpc3QubGVuZ3RoLCBpbml0aWFsVmFsdWUsIGZ1bGxOYW1lLCBzZXRGaWVsZFZhbHVlXSk7XG4gICAgLy8gQ2xlYXIgZXJyb3Igd2hlbiBsaXN0IGJlY29tZXMgbm9uLWVtcHR5XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlcXVpcmVkICYmIGxpc3QubGVuZ3RoID4gMCAmJiBsaXN0RXJyb3IpIHtcbiAgICAgICAgICAgIHNldExpc3RFcnJvcihudWxsKTtcbiAgICAgICAgfVxuICAgIH0sIFtsaXN0Lmxlbmd0aCwgcmVxdWlyZWQsIGxpc3RFcnJvciwgc2V0TGlzdEVycm9yXSk7XG4gICAgY29uc3QgY2FuQWRkID0gbWF4ID09IG51bGwgfHwgbGlzdC5sZW5ndGggPCBtYXg7XG4gICAgY29uc3QgY2FuUmVtb3ZlID0gbWluID09IG51bGwgfHwgbGlzdC5sZW5ndGggPiBtaW47XG4gICAgY29uc3QgdmFsaWRhdGVMaXN0ID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIGlmICghcmVxdWlyZWQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRMaXN0RXJyb3IocmVxdWlyZWRNZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzZXRMaXN0RXJyb3IobnVsbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGFkZCA9IHVzZU1lbW9pemVkRm4oKGRlZmF1bHRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5BZGQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gZGVmYXVsdFZhbHVlIDoge307XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSBbLi4ubGlzdF07XG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBbLi4ua2V5c1JlZi5jdXJyZW50XTtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSB0eXBlb2YgaW5kZXggPT09ICdudW1iZXInID8gaW5kZXggOiBuZXdMaXN0Lmxlbmd0aDtcbiAgICAgICAgbmV3TGlzdC5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHZhbHVlKTtcbiAgICAgICAgbmV3S2V5cy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIGdlbmVyYXRlS2V5KCkpO1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQgPSBuZXdLZXlzO1xuICAgICAgICBzZXRGaWVsZFZhbHVlKGZ1bGxOYW1lLCBuZXdMaXN0KTtcbiAgICAgICAgb25BZnRlckFkZCA9PT0gbnVsbCB8fCBvbkFmdGVyQWRkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFmdGVyQWRkKHZhbHVlLCBpbnNlcnRJbmRleCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVtb3ZlQXQgPSB1c2VNZW1vaXplZEZuKChpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWNhblJlbW92ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV3TGlzdCA9IFsuLi5saXN0XTtcbiAgICAgICAgY29uc3QgbmV3S2V5cyA9IFsuLi5rZXlzUmVmLmN1cnJlbnRdO1xuICAgICAgICBuZXdMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIG5ld0tleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gbmV3S2V5cztcbiAgICAgICAgc2V0RmllbGRWYWx1ZShmdWxsTmFtZSwgbmV3TGlzdCk7XG4gICAgICAgIG9uQWZ0ZXJSZW1vdmUgPT09IG51bGwgfHwgb25BZnRlclJlbW92ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BZnRlclJlbW92ZShpbmRleCk7XG4gICAgICAgIC8vIFZhbGlkYXRlIGFmdGVyIHJlbW92ZVxuICAgICAgICBpZiAocmVxdWlyZWQgJiYgbmV3TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNldExpc3RFcnJvcihyZXF1aXJlZE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY29weSA9IHVzZU1lbW9pemVkRm4oKGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghY2FuQWRkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGxpc3RbaW5kZXhdID8gT2JqZWN0LmFzc2lnbih7fSwgbGlzdFtpbmRleF0pIDoge307XG4gICAgICAgIGFkZCh2YWx1ZSwgaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgICBjb25zdCBtb3ZlID0gdXNlTWVtb2l6ZWRGbigoZnJvbSwgdG8pID0+IHtcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZnJvbSA8IDAgfHwgZnJvbSA+PSBsaXN0Lmxlbmd0aCB8fCB0byA8IDAgfHwgdG8gPj0gbGlzdC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSBbLi4ubGlzdF07XG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBbLi4ua2V5c1JlZi5jdXJyZW50XTtcbiAgICAgICAgY29uc3QgW21vdmVkSXRlbV0gPSBuZXdMaXN0LnNwbGljZShmcm9tLCAxKTtcbiAgICAgICAgY29uc3QgW21vdmVkS2V5XSA9IG5ld0tleXMuc3BsaWNlKGZyb20sIDEpO1xuICAgICAgICBuZXdMaXN0LnNwbGljZSh0bywgMCwgbW92ZWRJdGVtKTtcbiAgICAgICAgbmV3S2V5cy5zcGxpY2UodG8sIDAsIG1vdmVkS2V5KTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gbmV3S2V5cztcbiAgICAgICAgc2V0RmllbGRWYWx1ZShmdWxsTmFtZSwgbmV3TGlzdCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0TGlzdCA9IHVzZU1lbW9pemVkRm4oKCkgPT4gbGlzdCk7XG4gICAgY29uc3QgYWN0aW9uID0gdXNlTWVtbygoKSA9PiAoeyBhZGQsIHJlbW92ZTogcmVtb3ZlQXQsIG1vdmUsIGNvcHksIGdldExpc3QgfSksIFthZGQsIHJlbW92ZUF0LCBtb3ZlLCBjb3B5LCBnZXRMaXN0XSk7XG4gICAgLy8gUGVyLWtleSBjYWNoZSBrZWVwcyBlYWNoIHJvdydzIGZpZWxkIG9iamVjdCBpZGVudGl0eSBzdGFibGUgYWNyb3NzIGxpc3RcbiAgICAvLyBjb21taXRzIChlLmcuIHR5cGluZyBpbiBhIHNpYmxpbmcgcm93KSwgc28gbWVtb2l6ZWQgcm93IGNvbnRlbnQgc2Vlc1xuICAgIC8vIHNoYWxsb3ctZXF1YWwgcHJvcHMgYW5kIGJhaWxzIG91dC5cbiAgICBjb25zdCBmaWVsZE9iakNhY2hlID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgbWFwcGVkRmllbGRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gbGlzdC5tYXAoKF9pdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1JlZi5jdXJyZW50W2luZGV4XSB8fCBgZmFsbGJhY2tfJHtpbmRleH1gO1xuICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gYCR7ZnVsbE5hbWV9LiR7aW5kZXh9YDtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGZpZWxkT2JqQ2FjaGUuY3VycmVudC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gY2FjaGVkICYmIGNhY2hlZC5uYW1lID09PSBmaWVsZE5hbWUgPyBjYWNoZWQgOiB7IG5hbWU6IGZpZWxkTmFtZSwga2V5IH07XG4gICAgICAgICAgICBuZXh0Q2FjaGUuc2V0KGtleSwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGRPYmpDYWNoZS5jdXJyZW50ID0gbmV4dENhY2hlO1xuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH0sIFtsaXN0LCBmdWxsTmFtZV0pO1xuICAgIC8vIE1lbW9pemVkIHNvIHRoZSByb3cgZmFjdG9yeSBpcyByZS1pbnZva2VkIG9ubHkgd2hlbiB0aGUgbGlzdCBpdHNlbGYgKG9yXG4gICAgLy8gdGhlIGNvbnN1bWVyLXByb3ZpZGVkIGNoaWxkcmVuKSBjaGFuZ2VzIOKAlCBuZXZlciBmb3IgdW5yZWxhdGVkIGNvbW1pdHMuXG4gICAgY29uc3QgbGlzdERvbSA9IHVzZU1lbW8oKCkgPT4gKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKG1hcHBlZEZpZWxkcywgYWN0aW9uKSA6IGNoaWxkcmVuKSwgW2NoaWxkcmVuLCBtYXBwZWRGaWVsZHMsIGFjdGlvbl0pO1xuICAgIC8vIEFjdGlvbiBidXR0b25zIHBlciByb3cg4oCUIExpc3RSb3dBY3Rpb25zIGlzIHRoZSBtZW1vIGJvdW5kYXJ5XG4gICAgY29uc3QgYWN0aW9uUm93cyA9IGxpc3QubWFwKChyZWNvcmQsIGluZGV4KSA9PiAoX2pzeChMaXN0Um93QWN0aW9ucywgeyBpbmRleDogaW5kZXgsIHJlY29yZDogcmVjb3JkLCBjYW5BZGQ6IGNhbkFkZCwgY2FuUmVtb3ZlOiBjYW5SZW1vdmUsIGNvcHlJY29uUHJvcHM6IGNvcHlJY29uUHJvcHMsIGRlbGV0ZUljb25Qcm9wczogZGVsZXRlSWNvblByb3BzLCBhY3Rpb246IGFjdGlvbiwgYWN0aW9uUmVuZGVyOiBhY3Rpb25SZW5kZXIsIGl0ZW1SZW5kZXI6IGl0ZW1SZW5kZXIsIG9uQ29weTogY29weSwgb25SZW1vdmU6IHJlbW92ZUF0IH0sIGtleXNSZWYuY3VycmVudFtpbmRleF0gfHwgaW5kZXgpKSk7XG4gICAgLy8gQ3JlYXRvciBidXR0b25cbiAgICBjb25zdCBoYXNDcmVhdG9yID0gY3JlYXRvckJ1dHRvblByb3BzICE9PSBmYWxzZTtcbiAgICBjb25zdCBjcmVhdG9yQ29uZmlnID0gaGFzQ3JlYXRvciAmJiB0eXBlb2YgY3JlYXRvckJ1dHRvblByb3BzID09PSAnb2JqZWN0JyA/IGNyZWF0b3JCdXR0b25Qcm9wcyA6IHt9O1xuICAgIGNvbnN0IGNyZWF0b3JQb3NpdGlvbiA9IChfYSA9IGNyZWF0b3JDb25maWcgPT09IG51bGwgfHwgY3JlYXRvckNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlYXRvckNvbmZpZy5wb3NpdGlvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2JvdHRvbSc7XG4gICAgY29uc3QgY3JlYXRvclRleHQgPSAoX2IgPSBjcmVhdG9yQ29uZmlnID09PSBudWxsIHx8IGNyZWF0b3JDb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNyZWF0b3JDb25maWcudGV4dCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogREVGQVVMVF9URVhULmFkZDtcbiAgICBjb25zdCBjcmVhdG9yQnV0dG9uID0gaGFzQ3JlYXRvciA/IChfanN4KEJ1dHRvbiwgeyB0eXBlOiBcImJ1dHRvblwiLCBjb2xvcjogXCJzZWNvbmRhcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNyZWF0b3JQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgICBhZGQoe30sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGRpc2FibGVkOiAhY2FuQWRkLCBjaGlsZHJlbjogY3JlYXRvclRleHQgfSkpIDogbnVsbDtcbiAgICBjb25zdCBmb3JtTGlzdENvbnRleHRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4gKHsgbGlzdE5hbWU6IGZ1bGxOYW1lIH0pLCBbZnVsbE5hbWVdKTtcbiAgICByZXR1cm4gKF9qc3goRm9ybUxpc3RDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBmb3JtTGlzdENvbnRleHRWYWx1ZSwgY2hpbGRyZW46IF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCksIGNoaWxkcmVuOiBbbGFiZWwgJiYgX2pzeChUeXBvZ3JhcGh5TGFiZWwsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdsYWJlbCcpLCBzaXplOiBQUk9GT1JNX0xJU1RfTEFCRUxfU0laRSwgY29sb3I6IFBST0ZPUk1fTElTVF9MQUJFTF9DT0xPUiwgY2hpbGRyZW46IGxhYmVsIH0pLCBjcmVhdG9yUG9zaXRpb24gPT09ICd0b3AnICYmIGNyZWF0b3JCdXR0b24sIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2NvbnRlbnQnKSwgY2hpbGRyZW46IGxpc3REb20gfSksIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2FjdGlvbnMnKSwgY2hpbGRyZW46IGFjdGlvblJvd3MgfSksIGNyZWF0b3JQb3NpdGlvbiA9PT0gJ2JvdHRvbScgJiYgY3JlYXRvckJ1dHRvbiwgbGlzdEVycm9yICYmIF9qc3goVHlwb2dyYXBoeUJvZHksIHsgYXM6IFwiZGl2XCIsIHNpemU6IFwic21cIiwgY29sb3I6IFwiZGFuZ2VyXCIsIGNoaWxkcmVuOiBsaXN0RXJyb3IgfSldIH0pIH0pKTtcbn07XG5Qcm9Gb3JtTGlzdEJhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybUxpc3QnO1xuZXhwb3J0IGNvbnN0IFByb0Zvcm1MaXN0ID0gbWVtbyhQcm9Gb3JtTGlzdEJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgUHJvRm9ybUxpc3Q7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
385
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtTGlzdC50c3giXSwibmFtZXMiOlsianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwibWVtbyIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VNZW1vaXplZEZuIiwiZGVmYXVsdCIsImNsYXNzbmFtZXMiLCJCdXR0b24iLCJUeXBvZ3JhcGh5TGFiZWwiLCJUeXBvZ3JhcGh5Qm9keSIsIkZvcm1MaXN0Q29udGV4dCIsInVzZVByb0Zvcm1TdGFibGUiLCJ1c2VQcm9Gb3JtU3RvcmUiLCJ1c2VTdG9yZVNlbGVjdG9yIiwic2hhbGxvd0VxdWFsQXJyYXlzIiwiQ1NTX1BSRUZJWCIsIkRFRkFVTFRfVEVYVCIsIlBST0ZPUk1fTElTVF9MQUJFTF9TSVpFIiwiUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SIiwiZXh0cmFjdEJ1dHRvblByb3BzIiwiZ2V0TmVzdGVkVmFsdWUiLCJjbGFzc2VzIiwiY29uY2F0IiwibGlzdEtleUNvdW50ZXIiLCJnZW5lcmF0ZUtleSIsIkVNUFRZX0xJU1QiLCJMSVNUX01FVEFfS0VZUyIsInJlbWFwTGlzdE1ldGEiLCJzdG9yZSIsImxpc3ROYW1lIiwibWFwSW5kZXgiLCJzdGF0ZSIsImdldFN0YXRlIiwicHJlZml4IiwicGF0Y2giLCJfaSIsIl9MSVNUX01FVEFfS0VZUyIsImxlbmd0aCIsIm1ldGFLZXkiLCJzb3VyY2UiLCJjaGFuZ2VkIiwibmV4dCIsIl9pMiIsIl9PYmplY3Qka2V5cyIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJzdGFydHNXaXRoIiwicmVzdCIsInNsaWNlIiwiZG90QXQiLCJpbmRleE9mIiwiaW5kZXhTdHIiLCJ0ZXN0IiwibmV3SW5kZXgiLCJOdW1iZXIiLCJzZXRTdGF0ZSIsIkxpc3RSb3dBY3Rpb25zQmFzZSIsIl9yZWYiLCJpbmRleCIsInJlY29yZCIsImNhbkFkZCIsImNhblJlbW92ZSIsImNvcHlJY29uUHJvcHMiLCJkZWxldGVJY29uUHJvcHMiLCJhY3Rpb24iLCJhY3Rpb25SZW5kZXIiLCJpdGVtUmVuZGVyIiwib25Db3B5Iiwib25SZW1vdmUiLCJjb3B5QnRuUHJvcHMiLCJkZWxldGVCdG5Qcm9wcyIsImRlZmF1bHREb20iLCJjb3B5IiwiYXNzaWduIiwidHlwZSIsImNvbG9yIiwic2l6ZSIsIm9uQ2xpY2siLCJkaXNhYmxlZCIsImNoaWxkcmVuIiwicmVuZGVyZWRBY3Rpb25zIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJvd05vZGUiLCJjbGFzc05hbWUiLCJsaXN0RG9tIiwiZGlzcGxheU5hbWUiLCJMaXN0Um93QWN0aW9ucyIsIlByb0Zvcm1MaXN0QmFzZSIsInByb3BzIiwiX2EiLCJfYiIsImZ1bGxOYW1lIiwibmFtZSIsImxhYmVsIiwibWluIiwibWF4IiwicmVxdWlyZWQiLCJfcHJvcHMkcmVxdWlyZWRNZXNzYWciLCJyZXF1aXJlZE1lc3NhZ2UiLCJpbml0aWFsVmFsdWUiLCJjcmVhdG9yQnV0dG9uUHJvcHMiLCJvbkFmdGVyQWRkIiwib25BZnRlclJlbW92ZSIsIl91c2VQcm9Gb3JtU3RhYmxlIiwic2V0RmllbGRWYWx1ZSIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJyZXRhaW5GaWVsZCIsInJlbGVhc2VGaWVsZCIsInZhbGlkYXRlRmllbGRBc3luYyIsImluaXRpYWxBcHBsaWVkIiwia2V5c1JlZiIsIl91c2VTdG9yZVNlbGVjdG9yIiwicmF3IiwiaW5jbHVkZXMiLCJ2YWx1ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJfdXNlU3RvcmVTZWxlY3RvcjIiLCJfc2xpY2VkVG9BcnJheSIsImxpc3QiLCJsaXN0RXJyb3IiLCJjdXJyZW50IiwicHVzaCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hcCIsImxpc3RSdWxlcyIsIm1lc3NhZ2UiLCJ2YWxpZGF0ZUxpc3RWYWx1ZSIsIm5leHRMaXN0IiwiYWRkIiwiZGVmYXVsdFZhbHVlIiwidmFsdWUiLCJuZXdMaXN0IiwibmV3S2V5cyIsImluc2VydEluZGV4Iiwic3BsaWNlIiwiaSIsInJlbW92ZUF0IiwiX3R5cGVvZiIsIm1vdmUiLCJmcm9tIiwidG8iLCJfbmV3TGlzdCRzcGxpY2UiLCJfbmV3TGlzdCRzcGxpY2UyIiwibW92ZWRJdGVtIiwiX25ld0tleXMkc3BsaWNlIiwiX25ld0tleXMkc3BsaWNlMiIsIm1vdmVkS2V5IiwiZ2V0IiwiZ2V0TGlzdCIsInJlbW92ZSIsImZpZWxkT2JqQ2FjaGUiLCJNYXAiLCJtYXBwZWRGaWVsZHMiLCJuZXh0Q2FjaGUiLCJmaWVsZHMiLCJfaXRlbSIsImZpZWxkTmFtZSIsImNhY2hlZCIsImZpZWxkIiwic2V0IiwiYWN0aW9uUm93cyIsImhhc0NyZWF0b3IiLCJjcmVhdG9yQ29uZmlnIiwiY3JlYXRvclBvc2l0aW9uIiwicG9zaXRpb24iLCJjcmVhdG9yVGV4dCIsInRleHQiLCJjcmVhdG9yQnV0dG9uIiwiZm9ybUxpc3RDb250ZXh0VmFsdWUiLCJQcm92aWRlciIsImFzIiwiUHJvRm9ybUxpc3QiXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVNBLEdBQUcsSUFBSUMsSUFBSSxFQUFFQyxRQUFRLElBQUlDLFNBQVMsRUFBRUMsSUFBSSxJQUFJQyxLQUFLLFFBQVEsbUJBQW1CO0FDQXJGLFNBQVNDLElBQUksRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBRXhELE9BQU9DLGFBQWEsTUFBTSw2QkFBNkI7QUFDdkQsU0FBU0MsT0FBTyxJQUFJQyxVQUFVLFFBQVEsd0JBQXdCO0FBQzlELFNBQVNDLE1BQU0sUUFBUSxXQUFXO0FBQ2xDLFNBQVNDLGVBQWUsRUFBRUMsY0FBYyxRQUFRLGVBQWU7QUFDL0QsU0FBU0MsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFRLFdBQVc7QUFDOUUsU0FBU0MsZ0JBQWdCLEVBQUVDLGtCQUFrQixRQUFRLGtCQUFr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QyxLQUFLO1FBQUNsRyxJQUFJLEVBQUMsSUFBSTtRQUFDRCxLQUFLLEVBQUMsUUFBUTtRQUFBSSxRQUFBLEVBQUU0QztNQUFTLENBQUEsQ0FBa0I7SUFBQSxDQUFBO0VBQ3hGLENBQUEsQ0FDbUI7QUFFL0IsQ0FBQztBQUVEbkMsZUFBZSxDQUFDRixXQUFXLEdBQUcsYUFBYTtBQVMzQyxPQUFPLElBQU15RixXQUFXLGdCQUFHaEwsSUFBSSxDQUFDeUYsZUFBZSxDQUFnQztBQUUvRSxlQUFldUYsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vUHJvRm9ybUxpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqc3ggYXMgX2pzeCwgRnJhZ21lbnQgYXMgX0ZyYWdtZW50LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbic7XG5pbXBvcnQgeyBUeXBvZ3JhcGh5TGFiZWwsIFR5cG9ncmFwaHlCb2R5IH0gZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBGb3JtTGlzdENvbnRleHQsIHVzZVByb0Zvcm1TdGFibGUsIHVzZVByb0Zvcm1TdG9yZSB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yLCBzaGFsbG93RXF1YWxBcnJheXMgfSBmcm9tICcuL2NvcmUvZm9ybVN0b3JlJztcbmltcG9ydCB7IENTU19QUkVGSVgsIERFRkFVTFRfVEVYVCwgUFJPRk9STV9MSVNUX0xBQkVMX1NJWkUsIFBST0ZPUk1fTElTVF9MQUJFTF9DT0xPUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGV4dHJhY3RCdXR0b25Qcm9wcywgZ2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuL3V0aWxzJztcbmNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKGAke0NTU19QUkVGSVh9LWxpc3RgKTtcbmxldCBsaXN0S2V5Q291bnRlciA9IDA7XG5jb25zdCBnZW5lcmF0ZUtleSA9ICgpID0+IGBsaXN0XyR7KytsaXN0S2V5Q291bnRlcn1gO1xuLy8gU3RhYmxlIGVtcHR5IHJlc3VsdCBmb3IgdGhlIG5vLXZhbHVlIGNhc2Ug4oCUIGEgZnJlc2ggW10gcGVyIHNlbGVjdG9yIHJ1blxuLy8gd291bGQgbmV2ZXIgY29tcGFyZSBlcXVhbCBhbmQgbG9vcCB0aGUgc3Vic2NyaXB0aW9uLlxuY29uc3QgRU1QVFlfTElTVCA9IFtdO1xuLy8gRmllbGQgbWV0YSAoZXJyb3JzL3dhcm5pbmdzL3RvdWNoZWQvdmFsaWRhdGluZykgaXMgc3RvcmVkIEZMQVQsIGtleWVkIGJ5XG4vLyB0aGUgcG9zaXRpb25hbCBwYXRoIChgaXRlbXMuMS50aXRsZWApLiBSb3cgb3BlcmF0aW9ucyBzaGlmdCB0aGUgVkFMVUVTIGJ1dFxuLy8gbm90IHRob3NlIGtleXMg4oCUIHJlbWFwIHRoZW0gaW4gdGhlIHNhbWUgaGFuZGxlciBzbyBldmVyeSByb3cga2VlcHMgaXRzIG93blxuLy8gbWV0YS4gYG1hcEluZGV4YCByZXR1cm5zIHRoZSBuZXcgaW5kZXggZm9yIGFuIG9sZCBvbmUsIG9yIG51bGwgdG8gZHJvcCBpdC5cbmNvbnN0IExJU1RfTUVUQV9LRVlTID0gWydlcnJvcnMnLCAnd2FybmluZ3MnLCAndG91Y2hlZCcsICd2YWxpZGF0aW5nJ107XG5mdW5jdGlvbiByZW1hcExpc3RNZXRhKHN0b3JlLCBsaXN0TmFtZSwgbWFwSW5kZXgpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcHJlZml4ID0gYCR7bGlzdE5hbWV9LmA7XG4gICAgY29uc3QgcGF0Y2ggPSB7fTtcbiAgICBmb3IgKGNvbnN0IG1ldGFLZXkgb2YgTElTVF9NRVRBX0tFWVMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gc3RhdGVbbWV0YUtleV07XG4gICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xuICAgICAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgbmV4dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN0ID0ga2V5LnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgZG90QXQgPSByZXN0LmluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4U3RyID0gZG90QXQgPT09IC0xID8gcmVzdCA6IHJlc3Quc2xpY2UoMCwgZG90QXQpO1xuICAgICAgICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KGluZGV4U3RyKSkge1xuICAgICAgICAgICAgICAgIG5leHRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBtYXBJbmRleChOdW1iZXIoaW5kZXhTdHIpKTtcbiAgICAgICAgICAgIGlmIChuZXdJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOyAvLyByb3cgcmVtb3ZlZCDigJQgZHJvcCBpdHMgbWV0YVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09PSBOdW1iZXIoaW5kZXhTdHIpKSB7XG4gICAgICAgICAgICAgICAgbmV4dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0W2Ake3ByZWZpeH0ke25ld0luZGV4fSR7ZG90QXQgPT09IC0xID8gJycgOiByZXN0LnNsaWNlKGRvdEF0KX1gXSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHBhdGNoW21ldGFLZXldID0gbmV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCA+IDApXG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHBhdGNoKTtcbn1cbi8vIFJvdy1sZXZlbCBtZW1vIGJvdW5kYXJ5OiBzZXROZXN0ZWRWYWx1ZSBjbG9uZXMgT05MWSB0aGUgZWRpdGVkIHJvdywgc29cbi8vIHVudG91Y2hlZCByb3dzIGtlZXAgdGhlaXIgcmVjb3JkIGlkZW50aXR5IGFuZCBiYWlsIG91dCBoZXJlIHdoaWxlIGFcbi8vIHNpYmxpbmcgcm93IGlzIGJlaW5nIGVkaXRlZC5cbmNvbnN0IExpc3RSb3dBY3Rpb25zQmFzZSA9ICh7IGluZGV4LCByZWNvcmQsIGNhbkFkZCwgY2FuUmVtb3ZlLCBjb3B5SWNvblByb3BzLCBkZWxldGVJY29uUHJvcHMsIGFjdGlvbiwgYWN0aW9uUmVuZGVyLCBpdGVtUmVuZGVyLCBvbkNvcHksIG9uUmVtb3ZlLCB9KSA9PiB7XG4gICAgY29uc3QgY29weUJ0blByb3BzID0gZXh0cmFjdEJ1dHRvblByb3BzKGNvcHlJY29uUHJvcHMpO1xuICAgIGNvbnN0IGRlbGV0ZUJ0blByb3BzID0gZXh0cmFjdEJ1dHRvblByb3BzKGRlbGV0ZUljb25Qcm9wcyk7XG4gICAgY29uc3QgZGVmYXVsdERvbSA9IHtcbiAgICAgICAgY29weTogY29weUljb25Qcm9wcyAhPT0gZmFsc2UgPyAoX2pzeChCdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBjb2xvcjogXCJzZWNvbmRhcnlcIiwgc2l6ZTogXCJzbWFsbFwiIH0sIGNvcHlCdG5Qcm9wcy5yZXN0LCB7IG9uQ2xpY2s6ICgpID0+IG9uQ29weShpbmRleCksIGRpc2FibGVkOiAhY2FuQWRkIHx8IGNvcHlCdG5Qcm9wcy5kaXNhYmxlZCwgY2hpbGRyZW46IERFRkFVTFRfVEVYVC5jb3B5IH0pLCBgY29weS0ke2luZGV4fWApKSA6IG51bGwsXG4gICAgICAgIGRlbGV0ZTogZGVsZXRlSWNvblByb3BzICE9PSBmYWxzZSA/IChfanN4KEJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiLCBzaXplOiBcInNtYWxsXCIgfSwgZGVsZXRlQnRuUHJvcHMucmVzdCwgeyBvbkNsaWNrOiAoKSA9PiBvblJlbW92ZShpbmRleCksIGRpc2FibGVkOiAhY2FuUmVtb3ZlIHx8IGRlbGV0ZUJ0blByb3BzLmRpc2FibGVkLCBjaGlsZHJlbjogREVGQVVMVF9URVhULmRlbGV0ZSB9KSwgYGRlbGV0ZS0ke2luZGV4fWApKSA6IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJlZEFjdGlvbnMgPSBhY3Rpb25SZW5kZXJcbiAgICAgICAgPyBhY3Rpb25SZW5kZXIoeyBpbmRleCwgcmVjb3JkIH0sIGFjdGlvbiwgZGVmYXVsdERvbSlcbiAgICAgICAgOiBbZGVmYXVsdERvbS5jb3B5LCBkZWZhdWx0RG9tLmRlbGV0ZV0uZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHJvd05vZGUgPSAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygncm93LWFjdGlvbnMnKSwgY2hpbGRyZW46IHJlbmRlcmVkQWN0aW9ucyB9KSk7XG4gICAgaWYgKGl0ZW1SZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuIF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBpdGVtUmVuZGVyKHsgbGlzdERvbTogcm93Tm9kZSwgYWN0aW9uIH0pIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcm93Tm9kZTtcbn07XG5MaXN0Um93QWN0aW9uc0Jhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybUxpc3RSb3dBY3Rpb25zJztcbmNvbnN0IExpc3RSb3dBY3Rpb25zID0gbWVtbyhMaXN0Um93QWN0aW9uc0Jhc2UpO1xuY29uc3QgUHJvRm9ybUxpc3RCYXNlID0gKHByb3BzKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB7IG5hbWU6IGZ1bGxOYW1lLCBsYWJlbCwgbWluLCBtYXgsIHJlcXVpcmVkLCByZXF1aXJlZE1lc3NhZ2UgPSAnVGhpcyBsaXN0IGNhbm5vdCBiZSBlbXB0eScsIGluaXRpYWxWYWx1ZSwgY29weUljb25Qcm9wcywgZGVsZXRlSWNvblByb3BzLCBjcmVhdG9yQnV0dG9uUHJvcHMsIGl0ZW1SZW5kZXIsIGFjdGlvblJlbmRlciwgY2hpbGRyZW4sIG9uQWZ0ZXJBZGQsIG9uQWZ0ZXJSZW1vdmUsIH0gPSBwcm9wcztcbiAgICAvLyBMaXN0IG5hbWVzIGFyZSBBQlNPTFVURSBwYXRocywgbGlrZSBldmVyeSBvdGhlciBmaWVsZCBuYW1lLiBBIG5lc3RlZFxuICAgIC8vIGxpc3QgaXMgd3JpdHRlbiB3aXRoIHRoZSBmdWxsIHJvdyBwYXRoIChgbmFtZT17YCR7ZmllbGQubmFtZX0udGFnc2B9YCksXG4gICAgLy8gZXhhY3RseSBsaWtlIHJvdyBmaWVsZHMg4oCUIHRoZSBiYXJlIHBhcmVudCBsaXN0IG5hbWUgY2FycmllcyBubyByb3dcbiAgICAvLyBpbmRleCwgc28gYXV0by1wcmVmaXhpbmcgd2l0aCBpdCBjb3VsZCBuZXZlciBhZGRyZXNzIGEgcm93J3Mgb3duXG4gICAgLy8gc3ViLWxpc3QgKGl0IHdvdWxkIHJlc29sdmUgYHBhcmVudC50YWdzYCBpbnN0ZWFkIG9mIGBwYXJlbnQuMC50YWdzYCkuXG4gICAgY29uc3QgeyBzZXRGaWVsZFZhbHVlLCByZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQsIHJldGFpbkZpZWxkLCByZWxlYXNlRmllbGQsIHZhbGlkYXRlRmllbGRBc3luYyB9ID0gdXNlUHJvRm9ybVN0YWJsZSgpO1xuICAgIGNvbnN0IHN0b3JlID0gdXNlUHJvRm9ybVN0b3JlKCk7XG4gICAgY29uc3QgaW5pdGlhbEFwcGxpZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGtleXNSZWYgPSB1c2VSZWYoW10pO1xuICAgIC8vIFN1YnNjcmliZSBPTkxZIHRvIHRoaXMgbGlzdCdzIG93biB2YWx1ZSBhbmQgZXJyb3I6IHR5cGluZyBlbHNld2hlcmUgaW5cbiAgICAvLyB0aGUgZm9ybSBsZWF2ZXMgYm90aCB1bnRvdWNoZWQgYW5kIHRoaXMgY29tcG9uZW50IGRvZXMgbm90IHJlbmRlci5cbiAgICBjb25zdCBbbGlzdCwgbGlzdEVycm9yXSA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBmdWxsTmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICA/IGdldE5lc3RlZFZhbHVlKHN0YXRlLnZhbHVlcywgZnVsbE5hbWUpXG4gICAgICAgICAgICA6IHN0YXRlLnZhbHVlc1tmdWxsTmFtZV07XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHJhdykgPyByYXcgOiBFTVBUWV9MSVNULFxuICAgICAgICAgICAgc3RhdGUuZXJyb3JzW2Z1bGxOYW1lXSxcbiAgICAgICAgXTtcbiAgICB9LCBzaGFsbG93RXF1YWxBcnJheXMpO1xuICAgIC8vIFN5bmMga2V5cyB3aXRoIGxpc3QgbGVuZ3RoXG4gICAgd2hpbGUgKGtleXNSZWYuY3VycmVudC5sZW5ndGggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQucHVzaChnZW5lcmF0ZUtleSgpKTtcbiAgICB9XG4gICAgaWYgKGtleXNSZWYuY3VycmVudC5sZW5ndGggPiBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBrZXlzUmVmLmN1cnJlbnQgPSBrZXlzUmVmLmN1cnJlbnQuc2xpY2UoMCwgbGlzdC5sZW5ndGgpO1xuICAgIH1cbiAgICAvLyBpbml0aWFsVmFsdWUgaXMgTU9VTlQtT05MWSAobGlrZSBmb3JtIGluaXRpYWxWYWx1ZXMpOiB0aGUgZGVjaXNpb24gaXNcbiAgICAvLyBtYWRlIGV4YWN0bHkgb25jZS4gV2l0aG91dCB0aGUgdW5jb25kaXRpb25hbCBmbGFnLCBhIGxpc3Qgc2VlZGVkIGJ5IGZvcm1cbiAgICAvLyBpbml0aWFsVmFsdWVzIHdvdWxkIHJlLWFwcGx5IGluaXRpYWxWYWx1ZSB3aGVuIHRoZSB1c2VyIGVtcHRpZXMgaXQuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGluaXRpYWxBcHBsaWVkLmN1cnJlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluaXRpYWxBcHBsaWVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggIT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbml0aWFsVmFsdWUpIHx8IGluaXRpYWxWYWx1ZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNldEZpZWxkVmFsdWUoZnVsbE5hbWUsIFsuLi5pbml0aWFsVmFsdWVdKTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gaW5pdGlhbFZhbHVlLm1hcCgoKSA9PiBnZW5lcmF0ZUtleSgpKTtcbiAgICAgICAgLy8gTW91bnQtb25seSBieSBkZXNpZ24uXG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGNhbkFkZCA9IG1heCA9PSBudWxsIHx8IGxpc3QubGVuZ3RoIDwgbWF4O1xuICAgIGNvbnN0IGNhblJlbW92ZSA9IG1pbiA9PSBudWxsIHx8IGxpc3QubGVuZ3RoID4gbWluO1xuICAgIC8vIGByZXF1aXJlZGAgcGFydGljaXBhdGVzIGluIFJFQUwgdmFsaWRhdGlvbjogdGhlIHJ1bGUgaXMgcmVnaXN0ZXJlZCB3aXRoXG4gICAgLy8gdGhlIGZvcm0gKHNvIHN1Ym1pdCBibG9ja3Mgb24gYW4gZW1wdHkgbGlzdCkgYW5kIHJlLXJ1biBhZnRlciBldmVyeVxuICAgIC8vIHN0cnVjdHVyYWwgbXV0YXRpb24gYmVsb3cuXG4gICAgY29uc3QgbGlzdFJ1bGVzID0gdXNlTWVtbygoKSA9PiAocmVxdWlyZWQgPyBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogcmVxdWlyZWRNZXNzYWdlIH1dIDogW10pLCBbcmVxdWlyZWQsIHJlcXVpcmVkTWVzc2FnZV0pO1xuICAgIC8vIE1vdW50LWNvdW50ZWQgbGlmZXRpbWUgKHNlZSB1c2VGb3JtSXRlbSk6IHRoZSBydWxlcyBhcmUgcmVtb3ZlZCBvbmx5IHdoZW5cbiAgICAvLyB0aGUgTEFTVCBzYW1lLW5hbWUgaG9sZGVyIHVubW91bnRzLiBEZWNsYXJlZCBCRUZPUkUgdGhlIHJlZ2lzdGVyIGVmZmVjdCBzb1xuICAgIC8vIHRoZSByZWdpc3RyYXRpb24gYmVsb3cgaXMgY2xhc3NpZmllZCBhcyBpbnN0YW5jZS1vd25lZC5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICByZXRhaW5GaWVsZChmdWxsTmFtZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlRmllbGQoZnVsbE5hbWUpO1xuICAgICAgICB9O1xuICAgIH0sIFtmdWxsTmFtZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsaXN0UnVsZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJlZ2lzdGVyRmllbGQoZnVsbE5hbWUsIGxpc3RSdWxlcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHVucmVnaXN0ZXJGaWVsZChmdWxsTmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVMaXN0VmFsdWUgPSB1c2VNZW1vaXplZEZuKChuZXh0TGlzdCkgPT4ge1xuICAgICAgICAvLyBBc3luYyBwYXRoIHNvIGxpc3QtbGV2ZWwgcnVsZXMgd2l0aCBhIFByb21pc2UtcmV0dXJuaW5nIHZhbGlkYXRvciBhcmVcbiAgICAgICAgLy8gaG9ub3JlZCAodGhlIHN5bmMgcGF0aCB3b3VsZCBzaWxlbnRseSBza2lwIHRoZW0pOyByZXN1bHQgbGFuZHMgb24gdGhlXG4gICAgICAgIC8vIG5leHQgbWljcm90YXNrLCBzYW1lIGFzIFByb0Zvcm0uSXRlbS4gRmlyZS1hbmQtZm9yZ2V0IOKAlCB0aGUgb3V0Y29tZSBpc1xuICAgICAgICAvLyByZWFkIGZyb20gdGhlIHN0b3JlJ3MgZXJyb3Igc2xpY2UsIG5vdCB0aGlzIGNhbGwuXG4gICAgICAgIGlmIChsaXN0UnVsZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyhmdWxsTmFtZSwgbmV4dExpc3QsIGxpc3RSdWxlcyk7XG4gICAgfSk7XG4gICAgY29uc3QgYWRkID0gdXNlTWVtb2l6ZWRGbigoZGVmYXVsdFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIWNhbkFkZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gZGVmYXVsdFZhbHVlIDoge30pO1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gWy4uLmxpc3RdO1xuICAgICAgICBjb25zdCBuZXdLZXlzID0gWy4uLmtleXNSZWYuY3VycmVudF07XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJyA/IGluZGV4IDogbmV3TGlzdC5sZW5ndGg7XG4gICAgICAgIG5ld0xpc3Quc3BsaWNlKGluc2VydEluZGV4LCAwLCB2YWx1ZSk7XG4gICAgICAgIG5ld0tleXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBnZW5lcmF0ZUtleSgpKTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gbmV3S2V5cztcbiAgICAgICAgc2V0RmllbGRWYWx1ZShmdWxsTmFtZSwgbmV3TGlzdCk7XG4gICAgICAgIHJlbWFwTGlzdE1ldGEoc3RvcmUsIGZ1bGxOYW1lLCAoaSkgPT4gKGkgPj0gaW5zZXJ0SW5kZXggPyBpICsgMSA6IGkpKTtcbiAgICAgICAgdmFsaWRhdGVMaXN0VmFsdWUobmV3TGlzdCk7XG4gICAgICAgIG9uQWZ0ZXJBZGQgPT09IG51bGwgfHwgb25BZnRlckFkZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BZnRlckFkZCh2YWx1ZSwgaW5zZXJ0SW5kZXgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbW92ZUF0ID0gdXNlTWVtb2l6ZWRGbigoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5SZW1vdmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSBbLi4ubGlzdF07XG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBbLi4ua2V5c1JlZi5jdXJyZW50XTtcbiAgICAgICAgbmV3TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGtleXNSZWYuY3VycmVudCA9IG5ld0tleXM7XG4gICAgICAgIHNldEZpZWxkVmFsdWUoZnVsbE5hbWUsIG5ld0xpc3QpO1xuICAgICAgICByZW1hcExpc3RNZXRhKHN0b3JlLCBmdWxsTmFtZSwgKGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID09PSBpbmRleClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBpID4gaW5kZXggPyBpIC0gMSA6IGk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWxpZGF0ZUxpc3RWYWx1ZShuZXdMaXN0KTtcbiAgICAgICAgb25BZnRlclJlbW92ZSA9PT0gbnVsbCB8fCBvbkFmdGVyUmVtb3ZlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFmdGVyUmVtb3ZlKGluZGV4KTtcbiAgICB9KTtcbiAgICBjb25zdCBjb3B5ID0gdXNlTWVtb2l6ZWRGbigoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5BZGQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpbmRleF0gJiYgdHlwZW9mIGxpc3RbaW5kZXhdID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCBsaXN0W2luZGV4XSlcbiAgICAgICAgICAgIDogbGlzdFtpbmRleF07XG4gICAgICAgIGFkZCh2YWx1ZSwgaW5kZXggKyAxKTtcbiAgICB9KTtcbiAgICBjb25zdCBtb3ZlID0gdXNlTWVtb2l6ZWRGbigoZnJvbSwgdG8pID0+IHtcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZnJvbSA8IDAgfHwgZnJvbSA+PSBsaXN0Lmxlbmd0aCB8fCB0byA8IDAgfHwgdG8gPj0gbGlzdC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSBbLi4ubGlzdF07XG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBbLi4ua2V5c1JlZi5jdXJyZW50XTtcbiAgICAgICAgY29uc3QgW21vdmVkSXRlbV0gPSBuZXdMaXN0LnNwbGljZShmcm9tLCAxKTtcbiAgICAgICAgY29uc3QgW21vdmVkS2V5XSA9IG5ld0tleXMuc3BsaWNlKGZyb20sIDEpO1xuICAgICAgICBuZXdMaXN0LnNwbGljZSh0bywgMCwgbW92ZWRJdGVtKTtcbiAgICAgICAgbmV3S2V5cy5zcGxpY2UodG8sIDAsIG1vdmVkS2V5KTtcbiAgICAgICAga2V5c1JlZi5jdXJyZW50ID0gbmV3S2V5cztcbiAgICAgICAgc2V0RmllbGRWYWx1ZShmdWxsTmFtZSwgbmV3TGlzdCk7XG4gICAgICAgIHJlbWFwTGlzdE1ldGEoc3RvcmUsIGZ1bGxOYW1lLCAoaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPT09IGZyb20pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgICAgICAgaWYgKGZyb20gPCB0bylcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA+IGZyb20gJiYgaSA8PSB0byA/IGkgLSAxIDogaTtcbiAgICAgICAgICAgIHJldHVybiBpID49IHRvICYmIGkgPCBmcm9tID8gaSArIDEgOiBpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXQgPSB1c2VNZW1vaXplZEZuKChpbmRleCkgPT4gbGlzdFtpbmRleF0pO1xuICAgIGNvbnN0IGdldExpc3QgPSB1c2VNZW1vaXplZEZuKCgpID0+IGxpc3QpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHVzZU1lbW8oKCkgPT4gKHsgYWRkLCByZW1vdmU6IHJlbW92ZUF0LCBtb3ZlLCBjb3B5LCBnZXQsIGdldExpc3QgfSksIFthZGQsIHJlbW92ZUF0LCBtb3ZlLCBjb3B5LCBnZXQsIGdldExpc3RdKTtcbiAgICAvLyBQZXIta2V5IGNhY2hlIGtlZXBzIGVhY2ggcm93J3MgZmllbGQgb2JqZWN0IGlkZW50aXR5IHN0YWJsZSBhY3Jvc3MgbGlzdFxuICAgIC8vIGNvbW1pdHMgKGUuZy4gdHlwaW5nIGluIGEgc2libGluZyByb3cpLCBzbyBtZW1vaXplZCByb3cgY29udGVudCBzZWVzXG4gICAgLy8gc2hhbGxvdy1lcXVhbCBwcm9wcyBhbmQgYmFpbHMgb3V0LlxuICAgIGNvbnN0IGZpZWxkT2JqQ2FjaGUgPSB1c2VSZWYobmV3IE1hcCgpKTtcbiAgICBjb25zdCBtYXBwZWRGaWVsZHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dENhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBsaXN0Lm1hcCgoX2l0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzUmVmLmN1cnJlbnRbaW5kZXhdIHx8IGBmYWxsYmFja18ke2luZGV4fWA7XG4gICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBgJHtmdWxsTmFtZX0uJHtpbmRleH1gO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gZmllbGRPYmpDYWNoZS5jdXJyZW50LmdldChrZXkpO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBjYWNoZWQgJiYgY2FjaGVkLm5hbWUgPT09IGZpZWxkTmFtZSA/IGNhY2hlZCA6IHsgbmFtZTogZmllbGROYW1lLCBrZXkgfTtcbiAgICAgICAgICAgIG5leHRDYWNoZS5zZXQoa2V5LCBmaWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZE9iakNhY2hlLmN1cnJlbnQgPSBuZXh0Q2FjaGU7XG4gICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfSwgW2xpc3QsIGZ1bGxOYW1lXSk7XG4gICAgLy8gTWVtb2l6ZWQgc28gdGhlIHJvdyBmYWN0b3J5IGlzIHJlLWludm9rZWQgb25seSB3aGVuIHRoZSBsaXN0IGl0c2VsZiAob3JcbiAgICAvLyB0aGUgY29uc3VtZXItcHJvdmlkZWQgY2hpbGRyZW4pIGNoYW5nZXMg4oCUIG5ldmVyIGZvciB1bnJlbGF0ZWQgY29tbWl0cy5cbiAgICBjb25zdCBsaXN0RG9tID0gdXNlTWVtbygoKSA9PiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4obWFwcGVkRmllbGRzLCBhY3Rpb24pIDogY2hpbGRyZW4pLCBbY2hpbGRyZW4sIG1hcHBlZEZpZWxkcywgYWN0aW9uXSk7XG4gICAgLy8gQWN0aW9uIGJ1dHRvbnMgcGVyIHJvdyDigJQgTGlzdFJvd0FjdGlvbnMgaXMgdGhlIG1lbW8gYm91bmRhcnlcbiAgICBjb25zdCBhY3Rpb25Sb3dzID0gbGlzdC5tYXAoKHJlY29yZCwgaW5kZXgpID0+IChfanN4KExpc3RSb3dBY3Rpb25zLCB7IGluZGV4OiBpbmRleCwgcmVjb3JkOiByZWNvcmQsIGNhbkFkZDogY2FuQWRkLCBjYW5SZW1vdmU6IGNhblJlbW92ZSwgY29weUljb25Qcm9wczogY29weUljb25Qcm9wcywgZGVsZXRlSWNvblByb3BzOiBkZWxldGVJY29uUHJvcHMsIGFjdGlvbjogYWN0aW9uLCBhY3Rpb25SZW5kZXI6IGFjdGlvblJlbmRlciwgaXRlbVJlbmRlcjogaXRlbVJlbmRlciwgb25Db3B5OiBjb3B5LCBvblJlbW92ZTogcmVtb3ZlQXQgfSwga2V5c1JlZi5jdXJyZW50W2luZGV4XSB8fCBpbmRleCkpKTtcbiAgICAvLyBDcmVhdG9yIGJ1dHRvblxuICAgIGNvbnN0IGhhc0NyZWF0b3IgPSBjcmVhdG9yQnV0dG9uUHJvcHMgIT09IGZhbHNlO1xuICAgIGNvbnN0IGNyZWF0b3JDb25maWcgPSBoYXNDcmVhdG9yICYmIHR5cGVvZiBjcmVhdG9yQnV0dG9uUHJvcHMgPT09ICdvYmplY3QnID8gY3JlYXRvckJ1dHRvblByb3BzIDoge307XG4gICAgY29uc3QgY3JlYXRvclBvc2l0aW9uID0gKF9hID0gY3JlYXRvckNvbmZpZyA9PT0gbnVsbCB8fCBjcmVhdG9yQ29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVhdG9yQ29uZmlnLnBvc2l0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnYm90dG9tJztcbiAgICBjb25zdCBjcmVhdG9yVGV4dCA9IChfYiA9IGNyZWF0b3JDb25maWcgPT09IG51bGwgfHwgY3JlYXRvckNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlYXRvckNvbmZpZy50ZXh0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX1RFWFQuYWRkO1xuICAgIGNvbnN0IGNyZWF0b3JCdXR0b24gPSBoYXNDcmVhdG9yID8gKF9qc3goQnV0dG9uLCB7IHR5cGU6IFwiYnV0dG9uXCIsIGNvbG9yOiBcInNlY29uZGFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3JlYXRvclBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIGFkZCh7fSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZGlzYWJsZWQ6ICFjYW5BZGQsIGNoaWxkcmVuOiBjcmVhdG9yVGV4dCB9KSkgOiBudWxsO1xuICAgIGNvbnN0IGZvcm1MaXN0Q29udGV4dFZhbHVlID0gdXNlTWVtbygoKSA9PiAoeyBsaXN0TmFtZTogZnVsbE5hbWUgfSksIFtmdWxsTmFtZV0pO1xuICAgIHJldHVybiAoX2pzeChGb3JtTGlzdENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGZvcm1MaXN0Q29udGV4dFZhbHVlLCBjaGlsZHJlbjogX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoKSwgY2hpbGRyZW46IFtsYWJlbCAmJiBfanN4KFR5cG9ncmFwaHlMYWJlbCwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJyksIHNpemU6IFBST0ZPUk1fTElTVF9MQUJFTF9TSVpFLCBjb2xvcjogUFJPRk9STV9MSVNUX0xBQkVMX0NPTE9SLCBjaGlsZHJlbjogbGFiZWwgfSksIGNyZWF0b3JQb3NpdGlvbiA9PT0gJ3RvcCcgJiYgY3JlYXRvckJ1dHRvbiwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnY29udGVudCcpLCBjaGlsZHJlbjogbGlzdERvbSB9KSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnYWN0aW9ucycpLCBjaGlsZHJlbjogYWN0aW9uUm93cyB9KSwgY3JlYXRvclBvc2l0aW9uID09PSAnYm90dG9tJyAmJiBjcmVhdG9yQnV0dG9uLCBsaXN0RXJyb3IgJiYgX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBhczogXCJkaXZcIiwgc2l6ZTogXCJzbVwiLCBjb2xvcjogXCJkYW5nZXJcIiwgY2hpbGRyZW46IGxpc3RFcnJvciB9KV0gfSkgfSkpO1xufTtcblByb0Zvcm1MaXN0QmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtTGlzdCc7XG5leHBvcnQgY29uc3QgUHJvRm9ybUxpc3QgPSBtZW1vKFByb0Zvcm1MaXN0QmFzZSk7XG5leHBvcnQgZGVmYXVsdCBQcm9Gb3JtTGlzdDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=