geonetwork-ui 2.7.0-dev.dbe423d28 → 2.7.0-dev.e3a54608e

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 (162) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +4 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +4 -6
  4. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +47 -3
  5. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +32 -4
  6. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  7. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +15 -1
  8. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  9. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +10 -2
  10. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +2 -2
  11. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  12. package/esm2022/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.mjs +80 -0
  13. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +3 -3
  14. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +1 -3
  15. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  16. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +31 -12
  17. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +76 -27
  18. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +3 -2
  19. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  20. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +4 -3
  21. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  22. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +5 -4
  23. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +5 -4
  24. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +4 -4
  25. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +21 -46
  26. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +5 -4
  27. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +5 -1
  28. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  29. package/esm2022/libs/util/shared/src/index.mjs +2 -2
  30. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -2
  31. package/esm2022/libs/util/shared/src/lib/record/index.mjs +3 -0
  32. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +45 -0
  33. package/esm2022/libs/util/shared/src/lib/record/record.util.mjs +56 -0
  34. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  35. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  36. package/esm2022/libs/util/shared/src/lib/utils/mobile-screen.mjs +9 -0
  37. package/esm2022/translations/de.json +18 -1
  38. package/esm2022/translations/en.json +18 -1
  39. package/esm2022/translations/es.json +18 -1
  40. package/esm2022/translations/fr.json +19 -2
  41. package/esm2022/translations/it.json +18 -1
  42. package/esm2022/translations/nl.json +18 -1
  43. package/esm2022/translations/pt.json +18 -1
  44. package/esm2022/translations/sk.json +18 -1
  45. package/fesm2022/geonetwork-ui.mjs +2802 -2329
  46. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  47. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -1
  48. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  49. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  50. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  51. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  52. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +3 -0
  53. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  54. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -0
  55. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  56. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  57. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -0
  58. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  59. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +3 -2
  60. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  61. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  62. package/libs/feature/editor/src/index.d.ts +1 -0
  63. package/libs/feature/editor/src/index.d.ts.map +1 -1
  64. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts +19 -0
  65. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts.map +1 -0
  66. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  67. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  68. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  69. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +8 -4
  70. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  71. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +12 -5
  72. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  73. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  74. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  75. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  76. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -0
  77. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  78. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +1 -0
  79. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -1
  80. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  81. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +7 -7
  82. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  83. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +1 -0
  84. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -1
  85. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  86. package/libs/util/app-config/src/lib/model.d.ts +2 -0
  87. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  88. package/libs/util/shared/src/index.d.ts +1 -1
  89. package/libs/util/shared/src/index.d.ts.map +1 -1
  90. package/libs/util/shared/src/lib/links/link-utils.d.ts +2 -1
  91. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  92. package/libs/util/shared/src/lib/record/index.d.ts +3 -0
  93. package/libs/util/shared/src/lib/record/index.d.ts.map +1 -0
  94. package/libs/util/shared/src/lib/record/quality-score.util.d.ts +13 -0
  95. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -0
  96. package/libs/util/shared/src/lib/record/record.util.d.ts +3 -0
  97. package/libs/util/shared/src/lib/record/record.util.d.ts.map +1 -0
  98. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  99. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  100. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  101. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  102. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts +2 -0
  103. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts.map +1 -0
  104. package/package.json +11 -10
  105. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/status.mapper.ts +3 -0
  106. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.ts +3 -0
  107. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -0
  108. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -5
  109. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +50 -3
  110. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +38 -4
  111. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -0
  112. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +15 -0
  113. package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
  114. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +0 -3
  115. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +10 -1
  116. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +3 -1
  117. package/src/libs/feature/editor/src/index.ts +1 -0
  118. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.css +0 -0
  119. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +37 -0
  120. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +90 -0
  121. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +2 -1
  122. package/src/libs/feature/editor/src/lib/fields.config.ts +0 -2
  123. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  124. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -0
  125. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +34 -15
  126. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +2 -0
  127. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +70 -23
  128. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +2 -1
  129. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  130. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +6 -1
  131. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -1
  132. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +12 -11
  133. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -1
  134. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +4 -1
  135. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +7 -1
  136. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -0
  137. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +5 -1
  138. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -0
  139. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +21 -58
  140. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +7 -1
  141. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +3 -1
  142. package/src/libs/util/app-config/src/lib/app-config.ts +4 -0
  143. package/src/libs/util/app-config/src/lib/model.ts +2 -0
  144. package/src/libs/util/shared/src/index.ts +1 -1
  145. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -1
  146. package/src/libs/util/shared/src/lib/record/index.ts +2 -0
  147. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +68 -0
  148. package/src/libs/util/shared/src/lib/{record.util.ts → record/record.util.ts} +1 -1
  149. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  150. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  151. package/src/libs/util/shared/src/lib/utils/mobile-screen.ts +14 -0
  152. package/translations/de.json +18 -1
  153. package/translations/en.json +18 -1
  154. package/translations/es.json +18 -1
  155. package/translations/fr.json +19 -2
  156. package/translations/it.json +18 -1
  157. package/translations/nl.json +18 -1
  158. package/translations/pt.json +18 -1
  159. package/translations/sk.json +18 -1
  160. package/esm2022/libs/util/shared/src/lib/record.util.mjs +0 -56
  161. package/libs/util/shared/src/lib/record.util.d.ts +0 -3
  162. package/libs/util/shared/src/lib/record.util.d.ts.map +0 -1
@@ -9,10 +9,13 @@ export function getStatusFromStatusCode(statusCode) {
9
9
  case 'onGoing':
10
10
  return 'ongoing';
11
11
  case 'planned':
12
+ return 'planned';
12
13
  case 'required':
14
+ return 'required';
13
15
  case 'underDevelopment':
16
+ return 'under_development';
14
17
  default:
15
18
  return 'under_development';
16
19
  }
17
20
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3V0aWxzL3N0YXR1cy5tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFVBQWtCO0lBQ3hELFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDbkIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxXQUFXLENBQUE7UUFDcEIsS0FBSyxtQkFBbUI7WUFDdEIsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxZQUFZLENBQUE7UUFDckIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLGtCQUFrQixDQUFDO1FBQ3hCO1lBQ0UsT0FBTyxtQkFBbUIsQ0FBQTtJQUM5QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY29yZFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlKHN0YXR1c0NvZGU6IHN0cmluZyk6IFJlY29yZFN0YXR1cyB7XG4gIHN3aXRjaCAoc3RhdHVzQ29kZSkge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdoaXN0b3JpY2FsQXJjaGl2ZSc6XG4gICAgICByZXR1cm4gJ3JlbW92ZWQnXG4gICAgY2FzZSAnb2Jzb2xldGUnOlxuICAgICAgcmV0dXJuICdkZXByZWNhdGVkJ1xuICAgIGNhc2UgJ29uR29pbmcnOlxuICAgICAgcmV0dXJuICdvbmdvaW5nJ1xuICAgIGNhc2UgJ3BsYW5uZWQnOlxuICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICBjYXNlICd1bmRlckRldmVsb3BtZW50JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd1bmRlcl9kZXZlbG9wbWVudCdcbiAgfVxufVxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3V0aWxzL3N0YXR1cy5tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFVBQWtCO0lBQ3hELFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDbkIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxXQUFXLENBQUE7UUFDcEIsS0FBSyxtQkFBbUI7WUFDdEIsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxZQUFZLENBQUE7UUFDckIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxVQUFVLENBQUE7UUFDbkIsS0FBSyxrQkFBa0I7WUFDckIsT0FBTyxtQkFBbUIsQ0FBQTtRQUM1QjtZQUNFLE9BQU8sbUJBQW1CLENBQUE7SUFDOUIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWNvcmRTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZShzdGF0dXNDb2RlOiBzdHJpbmcpOiBSZWNvcmRTdGF0dXMge1xuICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHtcbiAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgcmV0dXJuICdjb21wbGV0ZWQnXG4gICAgY2FzZSAnaGlzdG9yaWNhbEFyY2hpdmUnOlxuICAgICAgcmV0dXJuICdyZW1vdmVkJ1xuICAgIGNhc2UgJ29ic29sZXRlJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbkdvaW5nJzpcbiAgICAgIHJldHVybiAnb25nb2luZydcbiAgICBjYXNlICdwbGFubmVkJzpcbiAgICAgIHJldHVybiAncGxhbm5lZCdcbiAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICByZXR1cm4gJ3JlcXVpcmVkJ1xuICAgIGNhc2UgJ3VuZGVyRGV2ZWxvcG1lbnQnOlxuICAgICAgcmV0dXJuICd1bmRlcl9kZXZlbG9wbWVudCdcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd1bmRlcl9kZXZlbG9wbWVudCdcbiAgfVxufVxuIl19
@@ -50,6 +50,10 @@ export function getProgressCode(status) {
50
50
  return 'removed';
51
51
  case 'under_development':
52
52
  return 'underDevelopment';
53
+ case 'planned':
54
+ return 'planned';
55
+ case 'required':
56
+ return 'required';
53
57
  default:
54
58
  throw new Error(`Could not determine progress code from status: ${status}`);
55
59
  }
@@ -509,4 +513,4 @@ export function writeResourceIdentifier(record, rootEl) {
509
513
  ? pipe(createNestedChild('gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), writeCharacterString(record.resourceIdentifier))
510
514
  : noop)(rootEl);
511
515
  }
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQTtBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUU5RCxTQUFTLHFCQUFxQixDQUM1QixPQUFrRCxFQUNsRCxJQUFZLEVBQ1osWUFBOEIsRUFDOUIsZUFBNkI7SUFFN0IsSUFBSSxDQUFDLFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FB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QVUsQ0FBQyxFQUNwRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDaEQ7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgQ29uc3RyYWludCxcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgS2V5d29yZCxcbiAgTGFuZ3VhZ2VDb2RlLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgUmV1c2VSZWNvcmQsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZpbHRlckFycmF5LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBub29wLFxuICBwaXBlLFxuICB0YXAsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHtcbiAgYWxsQ2hpbGRyZW5FbGVtZW50LFxuICBhcHBlbmRDaGlsZHJlbixcbiAgY3JlYXRlQ2hpbGQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZU5lc3RlZENoaWxkLFxuICBjcmVhdGVOZXN0ZWRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlbW92ZUFsbENoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbixcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUsXG4gIHNldFRleHRDb250ZW50LFxuICB3cml0ZUF0dHJpYnV0ZSxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEtpbmQgfSBmcm9tICcuL3JlYWQtcGFydHMnXG5pbXBvcnQgeyB3cml0ZUdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IG5hbWVQYXJ0c1RvRnVsbCB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0TGFuZzNGcm9tTGFuZzIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuaW1wb3J0IHsga2luZFRvQ29kZUxpc3RWYWx1ZSB9IGZyb20gJy4uL2NvbW1vbi9yZXNvdXJjZS10eXBlcydcblxuZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICB3cml0ZUZuOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PixcbiAgdGV4dDogc3RyaW5nLFxuICB0cmFuc2xhdGlvbnM6IEZpZWxkVHJhbnNsYXRpb24sXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIGlmICghdHJhbnNsYXRpb25zKVxuICAgIHJldHVybiBwaXBlKHdyaXRlRm4sIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6UFRfRnJlZVRleHQnKSkgLy8gSWYgbm8gdHJhbnNsYXRpb25zLCByZW1vdmUgZXhpc3RpbmcgaWYgYW55XG4gIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXplZChsYW5nOiBMYW5ndWFnZUNvZGUsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0ZXh0R3JvdXAnLCAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZycpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2xvY2FsZScsIGAjJHtsYW5nLnRvVXBwZXJDYXNlKCl9YCksXG4gICAgICBzZXRUZXh0Q29udGVudCh0cmFuc2xhdGlvbilcbiAgICApXG4gIH1cbiAgcmV0dXJuIHBpcGUoXG4gICAgd3JpdGVGbixcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOlBUX0ZyZWVUZXh0JyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpQVF9GcmVlVGV4dCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgY3JlYXRlTG9jYWxpemVkKGRlZmF1bHRMYW5ndWFnZSwgdGV4dCksXG4gICAgICAuLi5PYmplY3QuZW50cmllcyh0cmFuc2xhdGlvbnMpLm1hcCgoW2xhbmcsIHRyYW5zbGF0aW9uXSkgPT5cbiAgICAgICAgY3JlYXRlTG9jYWxpemVkKGxhbmcsIHRyYW5zbGF0aW9uKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDaGFyYWN0ZXJTdHJpbmcoXG4gIHRleHQ6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoZmluZENoaWxkT3JDcmVhdGUoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnKSwgc2V0VGV4dENvbnRlbnQodGV4dCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0ZXh0KSxcbiAgICB0ZXh0LFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5rYWdlKFxuICB1cmw6IFVSTFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxpbmthZ2UnLCAnZ21kOlVSTCcpLFxuICAgICAgc2V0VGV4dENvbnRlbnQodXJsLnRvU3RyaW5nKCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ/OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2dteDpBbmNob3InKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCd4bGluazpocmVmJywgdXJsLnRvU3RyaW5nKCkpLFxuICAgICAgdGV4dCA/IHNldFRleHRDb250ZW50KHRleHQpIDogbm9vcFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gIHVybDogVVJMLFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUFuY2hvcih1cmwsIHRleHQpLFxuICAgIHRleHQsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIGRlZmF1bHRMYW5ndWFnZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGVUaW1lKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZVRpbWUnKSxcbiAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIikpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZShcbiAgZGF0ZTogRGF0ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGUnKSxcbiAgICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCAneXl5eS1NTS1kZCcpKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEZWNpbWFsKFxuICBkZWNpbWFsOiBudW1iZXJcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGVjaW1hbCcpLCBzZXRUZXh0Q29udGVudChkZWNpbWFsLnRvU3RyaW5nKCkpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9ncmVzc0NvZGUoc3RhdHVzOiBSZWNvcmRTdGF0dXMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgIHJldHVybiAnb25Hb2luZydcbiAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgIHJldHVybiAncmVtb3ZlZCdcbiAgICBjYXNlICd1bmRlcl9kZXZlbG9wbWVudCc6XG4gICAgICByZXR1cm4gJ3VuZGVyRGV2ZWxvcG1lbnQnXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvZ3Jlc3MgY29kZSBmcm9tIHN0YXR1czogJHtzdGF0dXN9YFxuICAgICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb2xlQ29kZShyb2xlOiBSb2xlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChyb2xlKSB7XG4gICAgY2FzZSAnYXV0aG9yJzpcbiAgICAgIHJldHVybiAnYXV0aG9yJ1xuICAgIGNhc2UgJ2NvbGxhYm9yYXRvcic6XG4gICAgICByZXR1cm4gJ2NvbGxhYm9yYXRvcidcbiAgICBjYXNlICdjb250cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2NvbnRyaWJ1dG9yJ1xuICAgIGNhc2UgJ2N1c3RvZGlhbic6XG4gICAgICByZXR1cm4gJ2N1c3RvZGlhbidcbiAgICBjYXNlICdkaXN0cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2Rpc3RyaWJ1dG9yJ1xuICAgIGNhc2UgJ2VkaXRvcic6XG4gICAgICByZXR1cm4gJ2VkaXRvcidcbiAgICBjYXNlICdmdW5kZXInOlxuICAgICAgcmV0dXJuICdmdW5kZXInXG4gICAgY2FzZSAnbWVkaWF0b3InOlxuICAgICAgcmV0dXJuICdtZWRpYXRvcidcbiAgICBjYXNlICdvcmlnaW5hdG9yJzpcbiAgICAgIHJldHVybiAnb3JpZ2luYXRvcidcbiAgICBjYXNlICdvdGhlcic6XG4gICAgICByZXR1cm4gJ290aGVyJ1xuICAgIGNhc2UgJ293bmVyJzpcbiAgICAgIHJldHVybiAnb3duZXInXG4gICAgY2FzZSAncG9pbnRfb2ZfY29udGFjdCc6XG4gICAgICByZXR1cm4gJ3BvaW50T2ZDb250YWN0J1xuICAgIGNhc2UgJ3ByaW5jaXBhbF9pbnZlc3RpZ2F0b3InOlxuICAgICAgcmV0dXJuICdwcmluY2lwYWxJbnZlc3RpZ2F0b3InXG4gICAgY2FzZSAncHJvY2Vzc29yJzpcbiAgICAgIHJldHVybiAncHJvY2Vzc29yJ1xuICAgIGNhc2UgJ3B1Ymxpc2hlcic6XG4gICAgICByZXR1cm4gJ3B1Ymxpc2hlcidcbiAgICBjYXNlICdyZXNvdXJjZV9wcm92aWRlcic6XG4gICAgICByZXR1cm4gJ3Jlc291cmNlUHJvdmlkZXInXG4gICAgY2FzZSAncmlnaHRzX2hvbGRlcic6XG4gICAgICByZXR1cm4gJ3JpZ2h0c0hvbGRlcidcbiAgICBjYXNlICdzcG9uc29yJzpcbiAgICAgIHJldHVybiAnc3BvbnNvcidcbiAgICBjYXNlICdzdGFrZWhvbGRlcic6XG4gICAgICByZXR1cm4gJ3N0YWtlaG9sZGVyJ1xuICAgIGNhc2UgJ3Vuc3BlY2lmaWVkJzpcbiAgICAgIHJldHVybiAndW5zcGVjaWZpZWQnXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gJ3VzZXInXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSByb2xlIGNvZGUgZnJvbSByb2xlOiAke3JvbGV9YClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZURpc3RyaWJ1dGlvblByb3RvY29sKFxuICBkaXN0cmlidXRpb246IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGRpc3RyaWJ1dGlvbi5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ29nY2ZlYXR1cmVzJzpcbiAgICAgIHJldHVybiAnT0dDIEFQSSBGZWF0dXJlcydcbiAgICBjYXNlICd3ZnMnOlxuICAgICAgcmV0dXJuICdPR0M6V0ZTJ1xuICAgIGNhc2UgJ3dtcyc6XG4gICAgICByZXR1cm4gJ09HQzpXTVMnXG4gICAgY2FzZSAnd3BzJzpcbiAgICAgIHJldHVybiAnT0dDOldQUydcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbi5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2xcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlKFxuICB1cGRhdGVGcmVxdWVuY3k6IFVwZGF0ZUZyZXF1ZW5jeUNvZGVcbik6IHN0cmluZyB8IG51bGwge1xuICBzd2l0Y2ggKHVwZGF0ZUZyZXF1ZW5jeSkge1xuICAgIGNhc2UgJ2FzTmVlZGVkJzpcbiAgICAgIHJldHVybiAnYXNOZWVkZWQnXG4gICAgY2FzZSAndW5rbm93bic6XG4gICAgICByZXR1cm4gJ3Vua25vd24nXG4gICAgY2FzZSAnaXJyZWd1bGFyJzpcbiAgICAgIHJldHVybiAnaXJyZWd1bGFyJ1xuICAgIGNhc2UgJ25vdFBsYW5uZWQnOlxuICAgICAgcmV0dXJuICdub3RQbGFubmVkJ1xuICAgIGNhc2UgJ2NvbnRpbnVhbCc6XG4gICAgICByZXR1cm4gJ2NvbnRpbnVhbCdcbiAgICBjYXNlICdwZXJpb2RpYyc6XG4gICAgICByZXR1cm4gJ3BlcmlvZGljJ1xuICAgIGNhc2UgJ2RhaWx5JzpcbiAgICAgIHJldHVybiAnZGFpbHknXG4gICAgY2FzZSAnd2Vla2x5JzpcbiAgICAgIHJldHVybiAnd2Vla2x5J1xuICAgIGNhc2UgJ2ZvcnRuaWdodGx5JzpcbiAgICAgIHJldHVybiAnZm9ydG5pZ2h0bHknXG4gICAgY2FzZSAnbW9udGhseSc6XG4gICAgICByZXR1cm4gJ21vbnRobHknXG4gICAgY2FzZSAncXVhcnRlcmx5JzpcbiAgICAgIHJldHVybiAncXVhcnRlcmx5J1xuICAgIGNhc2UgJ2JpYW5udWFsbHknOlxuICAgICAgcmV0dXJuICdiaWFubnVhbGx5J1xuICAgIGNhc2UgJ2FubnVhbGx5JzpcbiAgICAgIHJldHVybiAnYW5udWFsbHknXG4gICAgY2FzZSAnc2VtaW1vbnRobHknOlxuICAgICAgcmV0dXJuICdzZW1pbW9udGhseSdcbiAgICBjYXNlICdiaWVubmlhbGx5JzpcbiAgICAgIHJldHVybiAnYmllbm5pYWxseSdcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPRHVyYXRpb24odXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDdXN0b20pOiBzdHJpbmcge1xuICBjb25zdCBkdXJhdGlvbiA9IHtcbiAgICB5ZWFyczogMCxcbiAgICBtb250aHM6IDAsXG4gICAgd2Vla3M6IDAsXG4gICAgZGF5czogMCxcbiAgICBob3VyczogMCxcbiAgfVxuICBzd2l0Y2ggKHVwZGF0ZUZyZXF1ZW5jeS5wZXIpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24uZGF5cyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uaG91cnMgPSBNYXRoLnJvdW5kKDI0IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCg3IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyAtIDAuMDAwMSkgLy8gdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCAnMiB0aW1lcyBwZXIgd2VlaycgPSAnZXZlcnkgMyBkYXlzJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5tb250aHMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDMwIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAneWVhcic6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi55ZWFycyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24ubW9udGhzID0gTWF0aC5yb3VuZCgxMiAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICB9XG4gIGNvbnN0IGhvdXJzID0gZHVyYXRpb24uaG91cnMgPiAwID8gYFQke2R1cmF0aW9uLmhvdXJzfUhgIDogJydcbiAgcmV0dXJuIGBQJHtkdXJhdGlvbi55ZWFyc31ZJHtkdXJhdGlvbi5tb250aHN9TSR7ZHVyYXRpb24uZGF5c31EJHtob3Vyc31gXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gIGNvbnRhY3Q6IEluZGl2aWR1YWwsXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIGNvbnN0IGZ1bGxOYW1lID0gbmFtZVBhcnRzVG9GdWxsKGNvbnRhY3QuZmlyc3ROYW1lLCBjb250YWN0Lmxhc3ROYW1lKVxuXG4gIGNvbnN0IGNyZWF0ZUFkZHJlc3MgPSBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDphZGRyZXNzJywgJ2dtZDpDSV9BZGRyZXNzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuZW1haWwpXG4gICAgICApXG4gICAgKSxcbiAgICBjb250YWN0LmFkZHJlc3NcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZWxpdmVyeVBvaW50JyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmFkZHJlc3MpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIGNvbnN0IGNyZWF0ZUNvbnRhY3QgPSBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpjb250YWN0SW5mbycsICdnbWQ6Q0lfQ29udGFjdCcpLFxuICAgIGNvbnRhY3QucGhvbmVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpwaG9uZScsICdnbWQ6Q0lfVGVsZXBob25lJywgJ2dtZDp2b2ljZScpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5waG9uZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcCxcbiAgICBhcHBlbmRDaGlsZHJlbihjcmVhdGVBZGRyZXNzKSxcbiAgICBjb250YWN0Lm9yZ2FuaXphdGlvbj8ud2Vic2l0ZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOm9ubGluZVJlc291cmNlJywgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgd3JpdGVMaW5rYWdlKGNvbnRhY3Qub3JnYW5pemF0aW9uLndlYnNpdGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICAgIGZ1bGxOYW1lXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6aW5kaXZpZHVhbE5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZnVsbE5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBjb250YWN0LnBvc2l0aW9uXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucG9zaXRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG5cbiAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uPy5uYW1lXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIGNyZWF0ZUNvbnRhY3QsXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnJvbGUnLCAnZ21kOkNJX1JvbGVDb2RlJyksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfUm9sZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldFJvbGVDb2RlKGNvbnRhY3Qucm9sZSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUtleXdvcmRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGlwZShmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJykpKVxufVxuXG4vLyByZXR1cm5zIGEgPGdtZDp0aGVzYXVydXNOYW1lPiBlbGVtZW50XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGhlc2F1cnVzKHRoZXNhdXJ1czogVGhlc2F1cnVzTW9kZWwpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRoZXNhdXJ1c05hbWUnLCAnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGl0bGUnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLm5hbWUgfHwgdGhlc2F1cnVzLmlkKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDppZGVudGlmaWVyJywgJ2dtZDpNRF9JZGVudGlmaWVyJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29kZScpLFxuICAgICAgICAgICAgdGhlc2F1cnVzLnVybFxuICAgICAgICAgICAgICA/IHdyaXRlQW5jaG9yKHRoZXNhdXJ1cy51cmwsIHRoZXNhdXJ1cy5pZClcbiAgICAgICAgICAgICAgOiB3cml0ZUNoYXJhY3RlclN0cmluZyh0aGVzYXVydXMuaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRLZXl3b3JkcyhcbiAga2V5d29yZHM6IEtleXdvcmRbXSxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICAvLyBrZXl3b3JkcyBhcmUgZ3JvdXBlZCBieSB0aGVzYXVydXMgaWYgdGhleSBoYXZlIG9uZSwgb3RoZXJ3aXNlIGJ5IHR5cGVcbiAgY29uc3Qga2V5d29yZHNCeVRoZXNhdXJ1czogS2V5d29yZFtdW10gPSBrZXl3b3Jkcy5yZWR1Y2UoKGFjYywga2V5d29yZCkgPT4ge1xuICAgIGNvbnN0IHRoZXNhdXJ1c0lkID0ga2V5d29yZC50aGVzYXVydXM/LmlkXG4gICAgY29uc3QgdHlwZSA9IGtleXdvcmQudHlwZVxuICAgIGxldCBleGlzdGluZ0dyb3VwID0gYWNjLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgdGhlc2F1cnVzSWRcbiAgICAgICAgPyBncm91cFswXS50aGVzYXVydXM/LmlkID09PSB0aGVzYXVydXNJZFxuICAgICAgICA6IGdyb3VwWzBdLnR5cGUgPT09IHR5cGUgJiYgIWdyb3VwWzBdLnRoZXNhdXJ1c1xuICAgIClcbiAgICBpZiAoIWV4aXN0aW5nR3JvdXApIHtcbiAgICAgIGV4aXN0aW5nR3JvdXAgPSBbXVxuICAgICAgYWNjLnB1c2goZXhpc3RpbmdHcm91cClcbiAgICB9XG4gICAgZXhpc3RpbmdHcm91cC5wdXNoKGtleXdvcmQpXG4gICAgcmV0dXJuIGFjY1xuICB9LCBbXSlcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLmtleXdvcmRzQnlUaGVzYXVydXMubWFwKChrZXl3b3JkcykgPT5cbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnR5cGUnLCAnZ21kOk1EX0tleXdvcmRUeXBlQ29kZScpLFxuICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0tleXdvcmRUeXBlQ29kZSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGtleXdvcmRzWzBdLnR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBrZXl3b3Jkc1swXS50aGVzYXVydXNcbiAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKGNyZWF0ZVRoZXNhdXJ1cyhrZXl3b3Jkc1swXS50aGVzYXVydXMpKVxuICAgICAgICAgIDogbm9vcCxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgLi4ua2V5d29yZHMubWFwKChrZXl3b3JkKSA9PlxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmtleXdvcmQnKSxcbiAgICAgICAgICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAga2V5d29yZC5sYWJlbCxcbiAgICAgICAgICAgICAgICBrZXl3b3JkLnRyYW5zbGF0aW9ucz8ubGFiZWwsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQoXG4gIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQsXG4gIHR5cGU6ICdsZWdhbCcgfCAnc2VjdXJpdHknIHwgJ290aGVyJyxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBpZiAodHlwZSA9PT0gJ3NlY3VyaXR5Jykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyxcbiAgICAgICAgJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJ1xuICAgICAgKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgICAnZ21kOmNsYXNzaWZpY2F0aW9uJyxcbiAgICAgICAgICAgICdnbWQ6TURfQ2xhc3NpZmljYXRpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfQ2xhc3NpZmljYXRpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAncmVzdHJpY3RlZCcpXG4gICAgICAgICksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAndXJsJyBpbiBjb25zdHJhaW50XG4gICAgICAgICAgICA/IHdyaXRlTG9jYWxpemVkQW5jaG9yKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudXJsLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbGVnYWwnKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdvdGhlclJlc3RyaWN0aW9ucycpXG4gICAgICAgICksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgICAndXJsJyBpbiBjb25zdHJhaW50XG4gICAgICAgICAgICA/IHdyaXRlTG9jYWxpemVkQW5jaG9yKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudXJsLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuICAvLyBvdGhlclxuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyxcbiAgICAgICdnbWQ6TURfQ29uc3RyYWludHMnLFxuICAgICAgJ2dtZDp1c2VMaW1pdGF0aW9uJ1xuICAgICksXG4gICAgJ3VybCcgaW4gY29uc3RyYWludFxuICAgICAgPyB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgICAgICAgICBjb25zdHJhaW50LnVybCxcbiAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgIClcbiAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU90aGVyQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBtYXBBcnJheShcbiAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9Db25zdHJhaW50cycpLFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgbWFwQXJyYXkoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycpLFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgbWFwQXJyYXkoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgICAgICAgICAgKHJlc3RyaWN0aW9uQ29kZXMpID0+XG4gICAgICAgICAgICAgICAgICByZXN0cmljdGlvbkNvZGVzLmV2ZXJ5KChjb2RlKSA9PiBjb2RlICE9PSAnbGljZW5zZScpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtcHR5UmVzb3VyY2VDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgZmlsdGVyQXJyYXkocGlwZShhbGxDaGlsZHJlbkVsZW1lbnQsIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID09PSAwKSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxpY2Vuc2VzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgICAgKHJlc3RyaWN0aW9uQ29kZXMpID0+XG4gICAgICAgICAgICByZXN0cmljdGlvbkNvZGVzLnNvbWUoKGNvZGUpID0+IGNvZGUgPT09ICdsaWNlbnNlJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGljZW5zZShcbiAgbGljZW5zZTogQ29uc3RyYWludCxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJywgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ2xpY2Vuc2UnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdvdGhlclJlc3RyaWN0aW9ucycpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgJ3VybCcgaW4gbGljZW5zZVxuICAgICAgICAgID8gd3JpdGVBbmNob3IobGljZW5zZS51cmwsIGxpY2Vuc2UudGV4dClcbiAgICAgICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICBsaWNlbnNlLnRleHQsXG4gICAgICAgICAgICAgIGxpY2Vuc2UudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU9ubGluZVJlc291cmNlcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycpXG59XG5cbmZ1bmN0aW9uIGFwcGVuZE9ubGluZVJlc291cmNlRm9ybWF0KG1pbWVUeXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JywgJ2dtZDpNRF9Gb3JtYXQnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG1pbWVUeXBlKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnZlcnNpb24nKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZygnMS4wJykgLy8gaGFyZGNvZGluZyB0aGlzIGFzIGl0IG1vc3QgbGlrZWx5IHdvbid0IGJlIHVzZWQgYnV0IGlzIG1hbmRhdG9yeVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaXN0cmlidXRpb25JbmZvKCkge1xuICByZXR1cm4gY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpXG59XG5cbi8vIGFwcGx5IHRvIE1EX0Rpc3RyaWJ1dGlvblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZE9ubGluZVJlc291cmNlKFxuICBvbmxpbmVSZXNvdXJjZTogRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBhcHBlbmRGb3JtYXRGbjogKFxuICAgIG1pbWVUeXBlOiBzdHJpbmdcbiAgKSA9PiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PixcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgbGV0IG5hbWU6IHN0cmluZ1xuICBsZXQgZnVuY3Rpb25Db2RlOiBzdHJpbmdcbiAgbGV0IHByb3RvY29sOiBzdHJpbmdcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdzZXJ2aWNlJykge1xuICAgIC8vIHNob3VsZCB3ZSBrZWVwIHRoZSBpZGVudGlmaWVySW5TZXJ2aWNlPyByZWFkLXdyaXRlIGR1cGxpY2F0ZSB3aXRoIG5hbWVcbiAgICBuYW1lID0gb25saW5lUmVzb3VyY2UuaWRlbnRpZmllckluU2VydmljZSAvLyB0aGlzIGlzIGZvciBHZW9OZXR3b3JrIHRvIGtub3cgdGhlIGxheWVyIG5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gICAgcHJvdG9jb2wgPSBnZXRTZXJ2aWNlRGlzdHJpYnV0aW9uUHJvdG9jb2wob25saW5lUmVzb3VyY2UpXG4gIH0gZWxzZSBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ2Rvd25sb2FkJykge1xuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICAgIHByb3RvY29sID0gJ1dXVzpET1dOTE9BRCdcbiAgfSBlbHNlIHtcbiAgICBuYW1lID0gb25saW5lUmVzb3VyY2UubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgICAnZ21kOm9uTGluZScsXG4gICAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgICApLFxuICAgICAgd3JpdGVMaW5rYWdlKG9ubGluZVJlc291cmNlLnVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UudHJhbnNsYXRpb25zPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgbmFtZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIG9ubGluZVJlc291cmNlLnRyYW5zbGF0aW9ucz8ubmFtZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnByb3RvY29sJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHByb3RvY29sKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICAnbWltZVR5cGUnIGluIG9ubGluZVJlc291cmNlXG4gICAgICA/IGFwcGVuZEZvcm1hdEZuKG9ubGluZVJlc291cmNlLm1pbWVUeXBlKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBkZXBlbmRpbmcgb24gcmVjb3JkIHR5cGUsIGNyZWF0ZSBpZiBtaXNzaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICAgIGxldCBlbHROYW1lID0gJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nXG4gICAgaWYgKGtpbmQgPT09ICdzZXJ2aWNlJykgZWx0TmFtZSA9ICdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJ1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGVsdE5hbWUpKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE9yQ3JlYXRlRGlzdHJpYnV0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsXG4gICAgICAnZ21kOk1EX0Rpc3RyaWJ1dGlvbidcbiAgICApKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVbmlxdWVJZGVudGlmaWVyKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpmaWxlSWRlbnRpZmllcicpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlS2luZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Njb3BlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywga2luZFRvQ29kZUxpc3RWYWx1ZShyZWNvcmQpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVGl0bGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLnRpdGxlLFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8udGl0bGUsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQWJzdHJhY3QocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6YWJzdHJhY3QnKSxcbiAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgIHJlY29yZC5hYnN0cmFjdCxcbiAgICAgIHJlY29yZC50cmFuc2xhdGlvbnM/LmFic3RyYWN0LFxuICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVN0YXR1cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpzdGF0dXMnLCAnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Byb2dyZXNzQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZ2V0UHJvZ3Jlc3NDb2RlKHJlY29yZC5zdGF0dXMpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQ29udGFjdHMocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmNvbnRhY3QnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5jb250YWN0cy5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvbnRhY3QnKSxcbiAgICAgICAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICAgICAgICAgICAgY29udGFjdCxcbiAgICAgICAgICAgIHJlY29yZC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQ29udGFjdHNGb3JSZXNvdXJjZShcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpwb2ludE9mQ29udGFjdCcpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzRm9yUmVzb3VyY2UubWFwKChjb250YWN0KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb2ludE9mQ29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gICAgICAgICAgICBjb250YWN0LFxuICAgICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLZXl3b3JkcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlS2V5d29yZHMoKSxcbiAgICBhcHBlbmRLZXl3b3JkcyhyZWNvcmQua2V5d29yZHMsIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUb3BpY3MocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6dG9waWNDYXRlZ29yeScpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRvcGljcy5tYXAoKHRvcGljKSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0b3BpY0NhdGVnb3J5JywgJ2dtZDpNRF9Ub3BpY0NhdGVnb3J5Q29kZScpLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KHRvcGljKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGljZW5zZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxpY2Vuc2VzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQubGljZW5zZXMubWFwKChsaWNlbnNlKSA9PlxuICAgICAgICBjcmVhdGVMaWNlbnNlKGxpY2Vuc2UsIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGVnYWxDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGVnYWxDb25zdHJhaW50cygpLFxuICAgIHJlbW92ZUVtcHR5UmVzb3VyY2VDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmxlZ2FsQ29uc3RyYWludHMubWFwKChjKSA9PlxuICAgICAgICBjcmVhdGVDb25zdHJhaW50KGMsICdsZWdhbCcsIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU2VjdXJpdHlDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlU2VjdXJpdHlDb25zdHJhaW50cygpLFxuICAgIHJlbW92ZUVtcHR5UmVzb3VyY2VDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnNlY3VyaXR5Q29uc3RyYWludHMubWFwKChjKSA9PlxuICAgICAgICBjcmVhdGVDb25zdHJhaW50KGMsICdzZWN1cml0eScsIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT3RoZXJDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlT3RoZXJDb25zdHJhaW50cygpLFxuICAgIHJlbW92ZUVtcHR5UmVzb3VyY2VDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm90aGVyQ29uc3RyYWludHMubWFwKChjKSA9PlxuICAgICAgICBjcmVhdGVDb25zdHJhaW50KGMsICdvdGhlcicsIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVXBkYXRlRnJlcXVlbmN5KFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOnJlc291cmNlTWFpbnRlbmFuY2UnKSxcbiAgICByZW1vdmVBbGxDaGlsZHJlbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvbicpLFxuICAgIHR5cGVvZiByZWNvcmQudXBkYXRlRnJlcXVlbmN5ID09PSAnb2JqZWN0J1xuICAgICAgPyBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZENoaWxkKFxuICAgICAgICAgICAgJ2dtZDp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JyxcbiAgICAgICAgICAgICdndHM6VE1fUGVyaW9kRHVyYXRpb24nXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChnZXRJU09EdXJhdGlvbihyZWNvcmQudXBkYXRlRnJlcXVlbmN5KSlcbiAgICAgICAgKVxuICAgICAgOiBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZENoaWxkKFxuICAgICAgICAgICAgJ2dtZDptYWludGVuYW5jZUFuZFVwZGF0ZUZyZXF1ZW5jeScsXG4gICAgICAgICAgICAnZ21kOk1EX01haW50ZW5hbmNlRnJlcXVlbmN5Q29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX01haW50ZW5hbmNlRnJlcXVlbmN5Q29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0VmFsdWUnLFxuICAgICAgICAgICAgZ2V0TWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZWNvcmRVcGRhdGVkKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpkYXRlU3RhbXAnKSxcbiAgICByZW1vdmVBbGxDaGlsZHJlbigpLFxuICAgIHdyaXRlRGF0ZVRpbWUocmVjb3JkLnJlY29yZFVwZGF0ZWQpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUmVzb3VyY2VEYXRlKFxuICB0eXBlOiAncmV2aXNpb24nIHwgJ2NyZWF0aW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkYXRlJyksXG4gICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICAgJ2dtZDpDSV9EYXRlJyxcbiAgICAgICAgICAgICAgJ2dtZDpkYXRlVHlwZScsXG4gICAgICAgICAgICAgICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgICAgIG1hcCgodmFsdWUpID0+IHZhbHVlID09PSB0eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kUmVzb3VyY2VEYXRlKFxuICBkYXRlOiBEYXRlLFxuICB0eXBlOiAncmV2aXNpb24nIHwgJ2NyZWF0aW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGF0ZScsICdnbWQ6Q0lfRGF0ZScpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpkYXRlJyksIHdyaXRlRGF0ZVRpbWUoZGF0ZSkpLFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGF0ZVR5cGUnLCAnZ21kOkNJX0RhdGVUeXBlQ29kZScpLFxuICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX0RhdGVUeXBlQ29kZSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlQ3JlYXRlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ2NyZWF0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZUNyZWF0ZWQpIHJldHVyblxuICBhcHBlbmRSZXNvdXJjZURhdGUocmVjb3JkLnJlc291cmNlQ3JlYXRlZCwgJ2NyZWF0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVVwZGF0ZWQoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVzb3VyY2VEYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbiAgaWYgKCFyZWNvcmQucmVzb3VyY2VVcGRhdGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZVVwZGF0ZWQsICdyZXZpc2lvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VQdWJsaXNoZWQoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVzb3VyY2VEYXRlKCdwdWJsaWNhdGlvbicpKHJvb3RFbClcbiAgaWYgKCFyZWNvcmQucmVzb3VyY2VQdWJsaXNoZWQpIHJldHVyblxuICBhcHBlbmRSZXNvdXJjZURhdGUocmVjb3JkLnJlc291cmNlUHVibGlzaGVkLCAncHVibGljYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJldXNlVHlwZShyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICB3cml0ZUtpbmQocmVjb3JkLCByb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBpZiAoIXJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pIHtcbiAgICBwaXBlKFxuICAgICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScpXG4gICAgKShyb290RWwpXG4gICAgcmV0dXJuXG4gIH1cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJyxcbiAgICAgICdnbWQ6TURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbilcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUdyYXBoaWNPdmVydmlld3MoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQub3ZlcnZpZXdzXG4gICAgICAgIC5maWx0ZXIoKG92ZXJ2aWV3KSA9PiBvdmVydmlldy51cmwpXG4gICAgICAgIC5tYXAoKG92ZXJ2aWV3KSA9PlxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JywgJ2dtZDpNRF9Ccm93c2VHcmFwaGljJyksXG4gICAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZU5hbWUnKSxcbiAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy51cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicgaW4gb3ZlcnZpZXdcbiAgICAgICAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob3ZlcnZpZXcuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG5vb3BcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5lYWdlKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOmRhdGFRdWFsaXR5SW5mbycsXG4gICAgICAnZ21kOkRRX0RhdGFRdWFsaXR5JyxcbiAgICAgICdnbWQ6bGluZWFnZScsXG4gICAgICAnZ21kOkxJX0xpbmVhZ2UnLFxuICAgICAgJ2dtZDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgIHJlY29yZC5saW5lYWdlLFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8ubGluZWFnZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2woZW5kcG9pbnQ6IFNlcnZpY2VFbmRwb2ludCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoZW5kcG9pbnQuYWNjZXNzU2VydmljZVByb3RvY29sLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd3ZnMnOlxuICAgICAgcmV0dXJuICdPR0M6V0ZTJ1xuICAgIGNhc2UgJ3dtcyc6XG4gICAgICByZXR1cm4gJ09HQzpXTVMnXG4gICAgY2FzZSAnd3BzJzpcbiAgICAgIHJldHVybiAnT0dDOldQUydcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGVuZHBvaW50LmFjY2Vzc1NlcnZpY2VQcm90b2NvbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPbmxpbmVSZXNvdXJjZShvbmxpbmVSZXNvdXJjZTogU2VydmljZU9ubGluZVJlc291cmNlKSB7XG4gIGxldCBsaW5rYWdlVXJsLCBmdW5jdGlvbkNvZGUsIHByb3RvY29sXG4gIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnZW5kcG9pbnQnKSB7XG4gICAgbGlua2FnZVVybCA9IG9ubGluZVJlc291cmNlLnVybC50b1N0cmluZygpXG4gICAgcHJvdG9jb2wgPSBnZXRTZXJ2aWNlRW5kcG9pbnRQcm90b2NvbChvbmxpbmVSZXNvdXJjZSlcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gIH0gZWxzZSB7XG4gICAgbGlua2FnZVVybCA9IG9ubGluZVJlc291cmNlLnVybC50b1N0cmluZygpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVOZXN0ZWRDaGlsZChcbiAgICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICAgKSxcbiAgICAgIHdyaXRlTGlua2FnZShsaW5rYWdlVXJsKSxcbiAgICAgICdkZXNjcmlwdGlvbicgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvbmxpbmVSZXNvdXJjZS5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgICduYW1lJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UubmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhwcm90b2NvbCkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfT25MaW5lRnVuY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBmdW5jdGlvbkNvZGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhc2V0T25saW5lUmVzb3VyY2VzKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLnJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKChkKSA9PlxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRGlzdHJpYnV0aW9uSW5mbygpLFxuICAgICAgICBhcHBlbmRPbmxpbmVSZXNvdXJjZShcbiAgICAgICAgICBkLFxuICAgICAgICAgIGFwcGVuZE9ubGluZVJlc291cmNlRm9ybWF0LFxuICAgICAgICAgIHJlY29yZC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogU2VydmljZVJlY29yZCB8IFJldXNlUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBhcHBlbmRDaGlsZHJlbiguLi5yZWNvcmQub25saW5lUmVzb3VyY2VzLm1hcChjcmVhdGVPbmxpbmVSZXNvdXJjZSkpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT25saW5lUmVzb3VyY2VzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZU9ubGluZVJlc291cmNlcygpKHJvb3RFbClcblxuICBpZiAocmVjb3JkLmtpbmQgPT09ICdkYXRhc2V0Jykge1xuICAgIGFwcGVuZERhdGFzZXRPbmxpbmVSZXNvdXJjZXMocmVjb3JkLCByb290RWwpXG4gICAgcmV0dXJuXG4gIH1cbiAgYXBwZW5kU2VydmljZU9ubGluZVJlc291cmNlcyhyZWNvcmQsIHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVGVtcG9yYWxFeHRlbnRzKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmV4dGVudCcsICdnbWQ6RVhfRXh0ZW50JyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDp0ZW1wb3JhbEVsZW1lbnQnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC50ZW1wb3JhbEV4dGVudHMubWFwKChleHRlbnQpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRlbXBvcmFsRWxlbWVudCcsICdnbWQ6RVhfVGVtcG9yYWxFeHRlbnQnKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICdzdGFydCcgaW4gZXh0ZW50ICYmICdlbmQnIGluIGV4dGVudFxuICAgICAgICAgICAgICA/IHBpcGUoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZXh0ZW50JywgJ2dtbDpUaW1lUGVyaW9kJyksXG4gICAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWw6YmVnaW5Qb3NpdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnQuc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LnN0YXJ0LCAneXl5eS1NTS1kZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdyaXRlQXR0cmlidXRlKCdpbmRldGVybWluYXRlUG9zaXRpb24nLCAndW5rbm93bicpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtbDplbmRQb3NpdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnQuZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5lbmQsICd5eXl5LU1NLWRkJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogd3JpdGVBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICdnbWQ6ZXh0ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2dtbDpUaW1lSW5zdGFudCcsXG4gICAgICAgICAgICAgICAgICAgICdnbWw6dGltZVBvc2l0aW9uJ1xuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIGV4dGVudC5zdGFydFxuICAgICAgICAgICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGZvcm1hdChleHRlbnQuc3RhcnQsICd5eXl5LU1NLWRkJykpXG4gICAgICAgICAgICAgICAgICAgIDogd3JpdGVBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3BhdGlhbEV4dGVudHMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3QgYXBwZW5kQm91bmRpbmdQb2x5Z29uID0gKGdlb21ldHJ5PzogR2VvbWV0cnkpID0+IHtcbiAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOkVYX0JvdW5kaW5nUG9seWdvbicpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvbHlnb24nKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbigoKSA9PiB3cml0ZUdlb21ldHJ5KGdlb21ldHJ5KSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGFwcGVuZEdlb2dyYXBoaWNCb3VuZGluZ0JveCA9IChcbiAgICBiYm94PzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbiAgKSA9PiB7XG4gICAgaWYgKCFiYm94KSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOkVYX0dlb2dyYXBoaWNCb3VuZGluZ0JveCcpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOndlc3RCb3VuZExvbmdpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFswXSkpLFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDplYXN0Qm91bmRMb25naXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbMl0pKSxcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6c291dGhCb3VuZExhdGl0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzFdKSksXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOm5vcnRoQm91bmRMYXRpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFszXSkpXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgY29uc3QgYXBwZW5kR2VvZ3JhcGhpY0Rlc2NyaXB0aW9uID0gKFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHRyYW5zbGF0aW9ucz86IEZpZWxkVHJhbnNsYXRpb25cbiAgKSA9PiB7XG4gICAgaWYgKCFkZXNjcmlwdGlvbikgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6RVhfR2VvZ3JhcGhpY0Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2dtZDpnZW9ncmFwaGljSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6Y29kZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmV4dGVudCcsICdnbWQ6RVhfRXh0ZW50JyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpnZW9ncmFwaGljRWxlbWVudCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnNwYXRpYWxFeHRlbnRzLm1hcCgoZXh0ZW50KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpnZW9ncmFwaGljRWxlbWVudCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgYXBwZW5kQm91bmRpbmdQb2x5Z29uKGV4dGVudC5nZW9tZXRyeSksXG4gICAgICAgICAgICBhcHBlbmRHZW9ncmFwaGljQm91bmRpbmdCb3goZXh0ZW50LmJib3gpLFxuICAgICAgICAgICAgYXBwZW5kR2VvZ3JhcGhpY0Rlc2NyaXB0aW9uKFxuICAgICAgICAgICAgICBleHRlbnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIGV4dGVudC50cmFuc2xhdGlvbnM/LmRlc2NyaXB0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGFuZ3VhZ2VzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIC8vIGNsZWFyIGV4aXN0aW5nXG4gIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6bG9jYWxlJykocm9vdEVsKVxuXG4gIC8vIGRvIG5vdCB3cml0ZSBkb3duIGxhbmd1YWdlcyBpZiB0aGVyZSBpcyBub3RoaW5nIGVsc2UgdGhhbiB0aGUgZGVmYXVsdCBvbmVcbiAgaWYgKCFyZWNvcmQub3RoZXJMYW5ndWFnZXM/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgY3JlYXRlTGFuZ3VhZ2VFbCA9IChsYW5nOiBMYW5ndWFnZUNvZGUpID0+XG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpsb2NhbGUnLCAnZ21kOlBUX0xvY2FsZScpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2lkJywgbGFuZy50b1VwcGVyQ2FzZSgpKSxcbiAgICAgIGNyZWF0ZU5lc3RlZENoaWxkKCdnbWQ6bGFuZ3VhZ2VDb2RlJywgJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdCcsICdodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yLycpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRMYW5nM0Zyb21MYW5nMihsYW5nKSA/PyBsYW5nKVxuICAgIClcblxuICAvLyBhZGQgbmV3IGxhbmd1YWdlcyAob25seSBpZiBvdGhlciB0aGFuIGRlZmF1bHQgb25lKVxuICBhcHBlbmRDaGlsZHJlbihcbiAgICBjcmVhdGVMYW5ndWFnZUVsKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpLFxuICAgIC4uLnJlY29yZC5vdGhlckxhbmd1YWdlcy5tYXAoY3JlYXRlTGFuZ3VhZ2VFbClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURlZmF1bHRMYW5ndWFnZShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBjb25zdCBsYW5nMyA9IGdldExhbmczRnJvbUxhbmcyKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSlcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpsYW5ndWFnZScsICdnbWQ6TGFuZ3VhZ2VDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0JywgJ2h0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBsYW5nMylcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlSWRlbnRpZmllcihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmlkZW50aWZpZXInKSxcbiAgICByZWNvcmQucmVzb3VyY2VJZGVudGlmaWVyXG4gICAgICA/IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoJ2dtZDppZGVudGlmaWVyJywgJ2dtZDpNRF9JZGVudGlmaWVyJywgJ2dtZDpjb2RlJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLnJlc291cmNlSWRlbnRpZmllcilcbiAgICAgICAgKVxuICAgICAgOiBub29wXG4gICkocm9vdEVsKVxufVxuIl19
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQTtBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUU5RCxTQUFTLHFCQUFxQixDQUM1QixPQUFrRCxFQUNsRCxJQUFZLEVBQ1osWUFBOEIsRUFDOUIsZUFBNkI7SUFFN0IsSUFBSSxDQUFDLFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FB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LGtCQUFrQjtRQUN2QixDQUFDLENBQUMsSUFBSSxDQUNGLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUNwRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDaEQ7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgQ29uc3RyYWludCxcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgS2V5d29yZCxcbiAgTGFuZ3VhZ2VDb2RlLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgUmV1c2VSZWNvcmQsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZpbHRlckFycmF5LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBub29wLFxuICBwaXBlLFxuICB0YXAsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHtcbiAgYWxsQ2hpbGRyZW5FbGVtZW50LFxuICBhcHBlbmRDaGlsZHJlbixcbiAgY3JlYXRlQ2hpbGQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZU5lc3RlZENoaWxkLFxuICBjcmVhdGVOZXN0ZWRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlbW92ZUFsbENoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbixcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUsXG4gIHNldFRleHRDb250ZW50LFxuICB3cml0ZUF0dHJpYnV0ZSxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEtpbmQgfSBmcm9tICcuL3JlYWQtcGFydHMnXG5pbXBvcnQgeyB3cml0ZUdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IG5hbWVQYXJ0c1RvRnVsbCB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0TGFuZzNGcm9tTGFuZzIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuaW1wb3J0IHsga2luZFRvQ29kZUxpc3RWYWx1ZSB9IGZyb20gJy4uL2NvbW1vbi9yZXNvdXJjZS10eXBlcydcblxuZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICB3cml0ZUZuOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PixcbiAgdGV4dDogc3RyaW5nLFxuICB0cmFuc2xhdGlvbnM6IEZpZWxkVHJhbnNsYXRpb24sXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIGlmICghdHJhbnNsYXRpb25zKVxuICAgIHJldHVybiBwaXBlKHdyaXRlRm4sIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6UFRfRnJlZVRleHQnKSkgLy8gSWYgbm8gdHJhbnNsYXRpb25zLCByZW1vdmUgZXhpc3RpbmcgaWYgYW55XG4gIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXplZChsYW5nOiBMYW5ndWFnZUNvZGUsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0ZXh0R3JvdXAnLCAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZycpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2xvY2FsZScsIGAjJHtsYW5nLnRvVXBwZXJDYXNlKCl9YCksXG4gICAgICBzZXRUZXh0Q29udGVudCh0cmFuc2xhdGlvbilcbiAgICApXG4gIH1cbiAgcmV0dXJuIHBpcGUoXG4gICAgd3JpdGVGbixcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOlBUX0ZyZWVUZXh0JyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpQVF9GcmVlVGV4dCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgY3JlYXRlTG9jYWxpemVkKGRlZmF1bHRMYW5ndWFnZSwgdGV4dCksXG4gICAgICAuLi5PYmplY3QuZW50cmllcyh0cmFuc2xhdGlvbnMpLm1hcCgoW2xhbmcsIHRyYW5zbGF0aW9uXSkgPT5cbiAgICAgICAgY3JlYXRlTG9jYWxpemVkKGxhbmcsIHRyYW5zbGF0aW9uKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDaGFyYWN0ZXJTdHJpbmcoXG4gIHRleHQ6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoZmluZENoaWxkT3JDcmVhdGUoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnKSwgc2V0VGV4dENvbnRlbnQodGV4dCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0ZXh0KSxcbiAgICB0ZXh0LFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5rYWdlKFxuICB1cmw6IFVSTFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxpbmthZ2UnLCAnZ21kOlVSTCcpLFxuICAgICAgc2V0VGV4dENvbnRlbnQodXJsLnRvU3RyaW5nKCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ/OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2dteDpBbmNob3InKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCd4bGluazpocmVmJywgdXJsLnRvU3RyaW5nKCkpLFxuICAgICAgdGV4dCA/IHNldFRleHRDb250ZW50KHRleHQpIDogbm9vcFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gIHVybDogVVJMLFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUFuY2hvcih1cmwsIHRleHQpLFxuICAgIHRleHQsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIGRlZmF1bHRMYW5ndWFnZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGVUaW1lKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZVRpbWUnKSxcbiAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIikpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZShcbiAgZGF0ZTogRGF0ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGUnKSxcbiAgICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCAneXl5eS1NTS1kZCcpKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEZWNpbWFsKFxuICBkZWNpbWFsOiBudW1iZXJcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGVjaW1hbCcpLCBzZXRUZXh0Q29udGVudChkZWNpbWFsLnRvU3RyaW5nKCkpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9ncmVzc0NvZGUoc3RhdHVzOiBSZWNvcmRTdGF0dXMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgIHJldHVybiAnb25Hb2luZydcbiAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgIHJldHVybiAncmVtb3ZlZCdcbiAgICBjYXNlICd1bmRlcl9kZXZlbG9wbWVudCc6XG4gICAgICByZXR1cm4gJ3VuZGVyRGV2ZWxvcG1lbnQnXG4gICAgY2FzZSAncGxhbm5lZCc6XG4gICAgICByZXR1cm4gJ3BsYW5uZWQnXG4gICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgcmV0dXJuICdyZXF1aXJlZCdcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBwcm9ncmVzcyBjb2RlIGZyb20gc3RhdHVzOiAke3N0YXR1c31gXG4gICAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVDb2RlKHJvbGU6IFJvbGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHJvbGUpIHtcbiAgICBjYXNlICdhdXRob3InOlxuICAgICAgcmV0dXJuICdhdXRob3InXG4gICAgY2FzZSAnY29sbGFib3JhdG9yJzpcbiAgICAgIHJldHVybiAnY29sbGFib3JhdG9yJ1xuICAgIGNhc2UgJ2NvbnRyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnY29udHJpYnV0b3InXG4gICAgY2FzZSAnY3VzdG9kaWFuJzpcbiAgICAgIHJldHVybiAnY3VzdG9kaWFuJ1xuICAgIGNhc2UgJ2Rpc3RyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnZGlzdHJpYnV0b3InXG4gICAgY2FzZSAnZWRpdG9yJzpcbiAgICAgIHJldHVybiAnZWRpdG9yJ1xuICAgIGNhc2UgJ2Z1bmRlcic6XG4gICAgICByZXR1cm4gJ2Z1bmRlcidcbiAgICBjYXNlICdtZWRpYXRvcic6XG4gICAgICByZXR1cm4gJ21lZGlhdG9yJ1xuICAgIGNhc2UgJ29yaWdpbmF0b3InOlxuICAgICAgcmV0dXJuICdvcmlnaW5hdG9yJ1xuICAgIGNhc2UgJ290aGVyJzpcbiAgICAgIHJldHVybiAnb3RoZXInXG4gICAgY2FzZSAnb3duZXInOlxuICAgICAgcmV0dXJuICdvd25lcidcbiAgICBjYXNlICdwb2ludF9vZl9jb250YWN0JzpcbiAgICAgIHJldHVybiAncG9pbnRPZkNvbnRhY3QnXG4gICAgY2FzZSAncHJpbmNpcGFsX2ludmVzdGlnYXRvcic6XG4gICAgICByZXR1cm4gJ3ByaW5jaXBhbEludmVzdGlnYXRvcidcbiAgICBjYXNlICdwcm9jZXNzb3InOlxuICAgICAgcmV0dXJuICdwcm9jZXNzb3InXG4gICAgY2FzZSAncHVibGlzaGVyJzpcbiAgICAgIHJldHVybiAncHVibGlzaGVyJ1xuICAgIGNhc2UgJ3Jlc291cmNlX3Byb3ZpZGVyJzpcbiAgICAgIHJldHVybiAncmVzb3VyY2VQcm92aWRlcidcbiAgICBjYXNlICdyaWdodHNfaG9sZGVyJzpcbiAgICAgIHJldHVybiAncmlnaHRzSG9sZGVyJ1xuICAgIGNhc2UgJ3Nwb25zb3InOlxuICAgICAgcmV0dXJuICdzcG9uc29yJ1xuICAgIGNhc2UgJ3N0YWtlaG9sZGVyJzpcbiAgICAgIHJldHVybiAnc3Rha2Vob2xkZXInXG4gICAgY2FzZSAndW5zcGVjaWZpZWQnOlxuICAgICAgcmV0dXJuICd1bnNwZWNpZmllZCdcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAndXNlcidcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJvbGUgY29kZSBmcm9tIHJvbGU6ICR7cm9sZX1gKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlRGlzdHJpYnV0aW9uUHJvdG9jb2woXG4gIGRpc3RyaWJ1dGlvbjogRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb25cbik6IHN0cmluZyB7XG4gIHN3aXRjaCAoZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnb2djZmVhdHVyZXMnOlxuICAgICAgcmV0dXJuICdPR0MgQVBJIEZlYXR1cmVzJ1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUoXG4gIHVwZGF0ZUZyZXF1ZW5jeTogVXBkYXRlRnJlcXVlbmN5Q29kZVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5KSB7XG4gICAgY2FzZSAnYXNOZWVkZWQnOlxuICAgICAgcmV0dXJuICdhc05lZWRlZCdcbiAgICBjYXNlICd1bmtub3duJzpcbiAgICAgIHJldHVybiAndW5rbm93bidcbiAgICBjYXNlICdpcnJlZ3VsYXInOlxuICAgICAgcmV0dXJuICdpcnJlZ3VsYXInXG4gICAgY2FzZSAnbm90UGxhbm5lZCc6XG4gICAgICByZXR1cm4gJ25vdFBsYW5uZWQnXG4gICAgY2FzZSAnY29udGludWFsJzpcbiAgICAgIHJldHVybiAnY29udGludWFsJ1xuICAgIGNhc2UgJ3BlcmlvZGljJzpcbiAgICAgIHJldHVybiAncGVyaW9kaWMnXG4gICAgY2FzZSAnZGFpbHknOlxuICAgICAgcmV0dXJuICdkYWlseSdcbiAgICBjYXNlICd3ZWVrbHknOlxuICAgICAgcmV0dXJuICd3ZWVrbHknXG4gICAgY2FzZSAnZm9ydG5pZ2h0bHknOlxuICAgICAgcmV0dXJuICdmb3J0bmlnaHRseSdcbiAgICBjYXNlICdtb250aGx5JzpcbiAgICAgIHJldHVybiAnbW9udGhseSdcbiAgICBjYXNlICdxdWFydGVybHknOlxuICAgICAgcmV0dXJuICdxdWFydGVybHknXG4gICAgY2FzZSAnYmlhbm51YWxseSc6XG4gICAgICByZXR1cm4gJ2JpYW5udWFsbHknXG4gICAgY2FzZSAnYW5udWFsbHknOlxuICAgICAgcmV0dXJuICdhbm51YWxseSdcbiAgICBjYXNlICdzZW1pbW9udGhseSc6XG4gICAgICByZXR1cm4gJ3NlbWltb250aGx5J1xuICAgIGNhc2UgJ2JpZW5uaWFsbHknOlxuICAgICAgcmV0dXJuICdiaWVubmlhbGx5J1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09EdXJhdGlvbih1cGRhdGVGcmVxdWVuY3k6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSk6IHN0cmluZyB7XG4gIGNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHllYXJzOiAwLFxuICAgIG1vbnRoczogMCxcbiAgICB3ZWVrczogMCxcbiAgICBkYXlzOiAwLFxuICAgIGhvdXJzOiAwLFxuICB9XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5LnBlcikge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5kYXlzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5ob3VycyA9IE1hdGgucm91bmQoMjQgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd3ZWVrJzpcbiAgICAgIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDcgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIC0gMC4wMDAxKSAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICcyIHRpbWVzIHBlciB3ZWVrJyA9ICdldmVyeSAzIGRheXMnXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLm1vbnRocyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uZGF5cyA9IE1hdGgucm91bmQoMzAgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLnllYXJzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5tb250aHMgPSBNYXRoLnJvdW5kKDEyIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gIH1cbiAgY29uc3QgaG91cnMgPSBkdXJhdGlvbi5ob3VycyA+IDAgPyBgVCR7ZHVyYXRpb24uaG91cnN9SGAgOiAnJ1xuICByZXR1cm4gYFAke2R1cmF0aW9uLnllYXJzfVkke2R1cmF0aW9uLm1vbnRoc31NJHtkdXJhdGlvbi5kYXlzfUQke2hvdXJzfWBcbn1cblxuZnVuY3Rpb24gYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgY29udGFjdDogSW5kaXZpZHVhbCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgY29uc3QgZnVsbE5hbWUgPSBuYW1lUGFydHNUb0Z1bGwoY29udGFjdC5maXJzdE5hbWUsIGNvbnRhY3QubGFzdE5hbWUpXG5cbiAgY29uc3QgY3JlYXRlQWRkcmVzcyA9IHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmFkZHJlc3MnLCAnZ21kOkNJX0FkZHJlc3MnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5lbWFpbClcbiAgICAgIClcbiAgICApLFxuICAgIGNvbnRhY3QuYWRkcmVzc1xuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlbGl2ZXJ5UG9pbnQnKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuYWRkcmVzcylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgY29uc3QgY3JlYXRlQ29udGFjdCA9IHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJywgJ2dtZDpDSV9Db250YWN0JyksXG4gICAgY29udGFjdC5waG9uZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnBob25lJywgJ2dtZDpDSV9UZWxlcGhvbmUnLCAnZ21kOnZvaWNlJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LnBob25lKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZUFkZHJlc3MpLFxuICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uPy53ZWJzaXRlXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6b25saW5lUmVzb3VyY2UnLCAnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICAgICAgICB3cml0ZUxpbmthZ2UoY29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgICAgZnVsbE5hbWVcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhmdWxsTmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGNvbnRhY3QucG9zaXRpb25cbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb3NpdGlvbk5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5wb3NpdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcblxuICAgICAgY29udGFjdC5vcmdhbml6YXRpb24/Lm5hbWVcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvcmdhbmlzYXRpb25OYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgY3JlYXRlQ29udGFjdCxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cm9sZScsICdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9Sb2xlQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZ2V0Um9sZUNvZGUoY29udGFjdC5yb2xlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlS2V5d29yZHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihwaXBlKGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnKSkpXG59XG5cbi8vIHJldHVybnMgYSA8Z21kOnRoZXNhdXJ1c05hbWU+IGVsZW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUaGVzYXVydXModGhlc2F1cnVzOiBUaGVzYXVydXNNb2RlbCkge1xuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0aXRsZScpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0aGVzYXVydXMubmFtZSB8fCB0aGVzYXVydXMuaWQpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmlkZW50aWZpZXInLCAnZ21kOk1EX0lkZW50aWZpZXInKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjb2RlJyksXG4gICAgICAgICAgICB0aGVzYXVydXMudXJsXG4gICAgICAgICAgICAgID8gd3JpdGVBbmNob3IodGhlc2F1cnVzLnVybCwgdGhlc2F1cnVzLmlkKVxuICAgICAgICAgICAgICA6IHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHRoZXNhdXJ1cy5pZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZEtleXdvcmRzKFxuICBrZXl3b3JkczogS2V5d29yZFtdLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIC8vIGtleXdvcmRzIGFyZSBncm91cGVkIGJ5IHRoZXNhdXJ1cyBpZiB0aGV5IGhhdmUgb25lLCBvdGhlcndpc2UgYnkgdHlwZVxuICBjb25zdCBrZXl3b3Jkc0J5VGhlc2F1cnVzOiBLZXl3b3JkW11bXSA9IGtleXdvcmRzLnJlZHVjZSgoYWNjLCBrZXl3b3JkKSA9PiB7XG4gICAgY29uc3QgdGhlc2F1cnVzSWQgPSBrZXl3b3JkLnRoZXNhdXJ1cz8uaWRcbiAgICBjb25zdCB0eXBlID0ga2V5d29yZC50eXBlXG4gICAgbGV0IGV4aXN0aW5nR3JvdXAgPSBhY2MuZmluZCgoZ3JvdXApID0+XG4gICAgICB0aGVzYXVydXNJZFxuICAgICAgICA/IGdyb3VwWzBdLnRoZXNhdXJ1cz8uaWQgPT09IHRoZXNhdXJ1c0lkXG4gICAgICAgIDogZ3JvdXBbMF0udHlwZSA9PT0gdHlwZSAmJiAhZ3JvdXBbMF0udGhlc2F1cnVzXG4gICAgKVxuICAgIGlmICghZXhpc3RpbmdHcm91cCkge1xuICAgICAgZXhpc3RpbmdHcm91cCA9IFtdXG4gICAgICBhY2MucHVzaChleGlzdGluZ0dyb3VwKVxuICAgIH1cbiAgICBleGlzdGluZ0dyb3VwLnB1c2goa2V5d29yZClcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgLi4ua2V5d29yZHNCeVRoZXNhdXJ1cy5tYXAoKGtleXdvcmRzKSA9PlxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnLCAnZ21kOk1EX0tleXdvcmRzJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dHlwZScsICdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfS2V5d29yZFR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywga2V5d29yZHNbMF0udHlwZSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGtleXdvcmRzWzBdLnRoZXNhdXJ1c1xuICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oY3JlYXRlVGhlc2F1cnVzKGtleXdvcmRzWzBdLnRoZXNhdXJ1cykpXG4gICAgICAgICAgOiBub29wLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAuLi5rZXl3b3Jkcy5tYXAoKGtleXdvcmQpID0+XG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6a2V5d29yZCcpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBrZXl3b3JkLmxhYmVsLFxuICAgICAgICAgICAgICAgIGtleXdvcmQudHJhbnNsYXRpb25zPy5sYWJlbCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChcbiAgY29uc3RyYWludDogQ29uc3RyYWludCxcbiAgdHlwZTogJ2xlZ2FsJyB8ICdzZWN1cml0eScgfCAnb3RoZXInLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIGlmICh0eXBlID09PSAnc2VjdXJpdHknKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLFxuICAgICAgICAnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnXG4gICAgICApLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICdnbWQ6Y2xhc3NpZmljYXRpb24nLFxuICAgICAgICAgICAgJ2dtZDpNRF9DbGFzc2lmaWNhdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9DbGFzc2lmaWNhdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdyZXN0cmljdGVkJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgICd1cmwnIGluIGNvbnN0cmFpbnRcbiAgICAgICAgICAgID8gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC51cmwsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsZWdhbCcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJywgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ290aGVyUmVzdHJpY3Rpb25zJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICAgICd1cmwnIGluIGNvbnN0cmFpbnRcbiAgICAgICAgICAgID8gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC51cmwsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG4gIC8vIG90aGVyXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLFxuICAgICAgJ2dtZDpNRF9Db25zdHJhaW50cycsXG4gICAgICAnZ21kOnVzZUxpbWl0YXRpb24nXG4gICAgKSxcbiAgICAndXJsJyBpbiBjb25zdHJhaW50XG4gICAgICA/IHdyaXRlTG9jYWxpemVkQW5jaG9yKFxuICAgICAgICAgIGNvbnN0cmFpbnQudXJsLFxuICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKVxuICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT3RoZXJDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIG1hcEFycmF5KFxuICAgICAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0NvbnN0cmFpbnRzJyksXG4gICAgICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNlY3VyaXR5Q29uc3RyYWludHMoKSB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBtYXBBcnJheShcbiAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBtYXBBcnJheShcbiAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuZXZlcnkoKGNvZGUpID0+IGNvZGUgIT09ICdsaWNlbnNlJylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShwaXBlKGFsbENoaWxkcmVuRWxlbWVudCwgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPT09IDApKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGljZW5zZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuc29tZSgoY29kZSkgPT4gY29kZSA9PT0gJ2xpY2Vuc2UnKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaWNlbnNlKFxuICBsaWNlbnNlOiBDb25zdHJhaW50LFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJywgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLCAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnbGljZW5zZScpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJywgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ290aGVyUmVzdHJpY3Rpb25zJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICAndXJsJyBpbiBsaWNlbnNlXG4gICAgICAgICAgPyB3cml0ZUFuY2hvcihsaWNlbnNlLnVybCwgbGljZW5zZS50ZXh0KVxuICAgICAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgIGxpY2Vuc2UudGV4dCxcbiAgICAgICAgICAgICAgbGljZW5zZS50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT25saW5lUmVzb3VyY2VzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpkaXN0cmlidXRpb25JbmZvJylcbn1cblxuZnVuY3Rpb24gYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQobWltZVR5cGU6IHN0cmluZykge1xuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25Gb3JtYXQnLCAnZ21kOk1EX0Zvcm1hdCcpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobWltZVR5cGUpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dmVyc2lvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKCcxLjAnKSAvLyBoYXJkY29kaW5nIHRoaXMgYXMgaXQgbW9zdCBsaWtlbHkgd29uJ3QgYmUgdXNlZCBidXQgaXMgbWFuZGF0b3J5XG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSB7XG4gIHJldHVybiBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsICdnbWQ6TURfRGlzdHJpYnV0aW9uJylcbn1cblxuLy8gYXBwbHkgdG8gTURfRGlzdHJpYnV0aW9uXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kT25saW5lUmVzb3VyY2UoXG4gIG9ubGluZVJlc291cmNlOiBEYXRhc2V0T25saW5lUmVzb3VyY2UsXG4gIGFwcGVuZEZvcm1hdEZuOiAoXG4gICAgbWltZVR5cGU6IHN0cmluZ1xuICApID0+IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBsZXQgbmFtZTogc3RyaW5nXG4gIGxldCBmdW5jdGlvbkNvZGU6IHN0cmluZ1xuICBsZXQgcHJvdG9jb2w6IHN0cmluZ1xuICBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgLy8gc2hvdWxkIHdlIGtlZXAgdGhlIGlkZW50aWZpZXJJblNlcnZpY2U/IHJlYWQtd3JpdGUgZHVwbGljYXRlIHdpdGggbmFtZVxuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5pZGVudGlmaWVySW5TZXJ2aWNlIC8vIHRoaXMgaXMgZm9yIEdlb05ldHdvcmsgdG8ga25vdyB0aGUgbGF5ZXIgbmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9IGdldFNlcnZpY2VEaXN0cmlidXRpb25Qcm90b2NvbChvbmxpbmVSZXNvdXJjZSlcbiAgfSBlbHNlIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnZG93bmxvYWQnKSB7XG4gICAgbmFtZSA9IG9ubGluZVJlc291cmNlLm5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gICAgcHJvdG9jb2wgPSAnV1dXOkRPV05MT0FEJ1xuICB9IGVsc2Uge1xuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxpbmthZ2Uob25saW5lUmVzb3VyY2UudXJsKSxcbiAgICAgICdkZXNjcmlwdGlvbicgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS50cmFuc2xhdGlvbnM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBuYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UudHJhbnNsYXRpb25zPy5uYW1lLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgICdtaW1lVHlwZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgID8gYXBwZW5kRm9ybWF0Rm4ob25saW5lUmVzb3VyY2UubWltZVR5cGUpXG4gICAgICA6IG5vb3AsXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIGRlcGVuZGluZyBvbiByZWNvcmQgdHlwZSwgY3JlYXRlIGlmIG1pc3NpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGtpbmQgPSByZWFkS2luZChyb290RWwpXG4gICAgbGV0IGVsdE5hbWUgPSAnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbidcbiAgICBpZiAoa2luZCA9PT0gJ3NlcnZpY2UnKSBlbHROYW1lID0gJ3NydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24nXG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZWx0TmFtZSkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24oKSB7XG4gIHJldHVybiAocm9vdEVsOiBYbWxFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkaXN0cmlidXRpb25JbmZvJyxcbiAgICAgICdnbWQ6TURfRGlzdHJpYnV0aW9uJ1xuICAgICkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVuaXF1ZUlkZW50aWZpZXIoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmZpbGVJZGVudGlmaWVyJyksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLaW5kKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfU2NvcGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBraW5kVG9Db2RlTGlzdFZhbHVlKHJlY29yZCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUaXRsZShyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQudGl0bGUsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy50aXRsZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLmFic3RyYWN0LFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8uYWJzdHJhY3QsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RhdHVzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOnN0YXR1cycsICdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUHJvZ3Jlc3NDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gICAgICAgICAgICBjb250YWN0LFxuICAgICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0c0ZvclJlc291cmNlKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpjb250YWN0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuY29udGFjdHNGb3JSZXNvdXJjZS5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgICAgICAgICAgIGNvbnRhY3QsXG4gICAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRvcGljcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudG9waWNzLm1hcCgodG9waWMpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRvcGljQ2F0ZWdvcnknLCAnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQodG9waWMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaWNlbnNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGljZW5zZXMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5saWNlbnNlcy5tYXAoKGxpY2Vuc2UpID0+XG4gICAgICAgIGNyZWF0ZUxpY2Vuc2UobGljZW5zZSwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMZWdhbENvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQubGVnYWxDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ2xlZ2FsJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdGhlckNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQub3RoZXJDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ290aGVyJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVcGRhdGVGcmVxdWVuY3koXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uJyksXG4gICAgdHlwZW9mIHJlY29yZC51cGRhdGVGcmVxdWVuY3kgPT09ICdvYmplY3QnXG4gICAgICA/IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KGdldElTT0R1cmF0aW9uKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpKVxuICAgICAgICApXG4gICAgICA6IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyxcbiAgICAgICAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3RWYWx1ZScsXG4gICAgICAgICAgICBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVSZXNvdXJjZURhdGUoXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRhdGUnKSxcbiAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRSZXNvdXJjZURhdGUoXG4gIGRhdGU6IERhdGUsXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlJywgJ2dtZDpDSV9EYXRlJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlVHlwZScsICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VDcmVhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlQ3JlYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VDcmVhdGVkLCAnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlVXBkYXRlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVVwZGF0ZWQpIHJldHVyblxuICBhcHBlbmRSZXNvdXJjZURhdGUocmVjb3JkLnJlc291cmNlVXBkYXRlZCwgJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVB1Ymxpc2hlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VQdWJsaXNoZWQsICdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmV1c2VUeXBlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHdyaXRlS2luZChyZWNvcmQsIHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbikge1xuICAgIHBpcGUoXG4gICAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJylcbiAgICApKHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQuc3BhdGlhbFJlcHJlc2VudGF0aW9uKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5vdmVydmlld3NcbiAgICAgICAgLmZpbHRlcigob3ZlcnZpZXcpID0+IG92ZXJ2aWV3LnVybClcbiAgICAgICAgLm1hcCgob3ZlcnZpZXcpID0+XG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnLCAnZ21kOk1EX0Jyb3dzZUdyYXBoaWMnKSxcbiAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLFxuICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG92ZXJ2aWV3LnVybC50b1N0cmluZygpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBvdmVydmlld1xuICAgICAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogbm9vcFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpbmVhZ2UocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGF0YVF1YWxpdHlJbmZvJyxcbiAgICAgICdnbWQ6RFFfRGF0YVF1YWxpdHknLFxuICAgICAgJ2dtZDpsaW5lYWdlJyxcbiAgICAgICdnbWQ6TElfTGluZWFnZScsXG4gICAgICAnZ21kOnN0YXRlbWVudCdcbiAgICApLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLmxpbmVhZ2UsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy5saW5lYWdlLFxuICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlRW5kcG9pbnRQcm90b2NvbChlbmRwb2ludDogU2VydmljZUVuZHBvaW50KTogc3RyaW5nIHtcbiAgc3dpdGNoIChlbmRwb2ludC5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZW5kcG9pbnQuYWNjZXNzU2VydmljZVByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9ubGluZVJlc291cmNlKG9ubGluZVJlc291cmNlOiBTZXJ2aWNlT25saW5lUmVzb3VyY2UpIHtcbiAgbGV0IGxpbmthZ2VVcmwsIGZ1bmN0aW9uQ29kZSwgcHJvdG9jb2xcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdlbmRwb2ludCcpIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UudXJsLnRvU3RyaW5nKClcbiAgICBwcm90b2NvbCA9IGdldFNlcnZpY2VFbmRwb2ludFByb3RvY29sKG9ubGluZVJlc291cmNlKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgfSBlbHNlIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UudXJsLnRvU3RyaW5nKClcbiAgICBmdW5jdGlvbkNvZGUgPSAnaW5mb3JtYXRpb24nXG4gICAgcHJvdG9jb2wgPSAnV1dXOkxJTksnXG4gIH1cbiAgY29uc3QgYXBwZW5kVHJhbnNmZXJPcHRpb25zID0gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0cmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZU5lc3RlZENoaWxkKFxuICAgICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgICAnZ21kOm9uTGluZScsXG4gICAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgICApLFxuICAgICAgd3JpdGVMaW5rYWdlKGxpbmthZ2VVcmwpLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgJ25hbWUnIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvbmxpbmVSZXNvdXJjZS5uYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnByb3RvY29sJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHByb3RvY29sKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsICdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgLi4ucmVjb3JkLm9ubGluZVJlc291cmNlcy5tYXAoKGQpID0+XG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVEaXN0cmlidXRpb25JbmZvKCksXG4gICAgICAgIGFwcGVuZE9ubGluZVJlc291cmNlKFxuICAgICAgICAgIGQsXG4gICAgICAgICAgYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQsXG4gICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU2VydmljZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBTZXJ2aWNlUmVjb3JkIHwgUmV1c2VSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGFwcGVuZENoaWxkcmVuKC4uLnJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKGNyZWF0ZU9ubGluZVJlc291cmNlKSkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlT25saW5lUmVzb3VyY2VzKCkocm9vdEVsKVxuXG4gIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgYXBwZW5kRGF0YXNldE9ubGluZVJlc291cmNlcyhyZWNvcmQsIHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBhcHBlbmRTZXJ2aWNlT25saW5lUmVzb3VyY2VzKHJlY29yZCwgcm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZW1wb3JhbEV4dGVudHMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRlbXBvcmFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dGVtcG9yYWxFbGVtZW50JywgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgJ3N0YXJ0JyBpbiBleHRlbnQgJiYgJ2VuZCcgaW4gZXh0ZW50XG4gICAgICAgICAgICAgID8gcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpleHRlbnQnLCAnZ21sOlRpbWVQZXJpb2QnKSxcbiAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtbDpiZWdpblBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGZvcm1hdChleHRlbnQuc3RhcnQsICd5eXl5LU1NLWRkJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogd3JpdGVBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LmVuZCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBwaXBlKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZ21sOlRpbWVJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2dtbDp0aW1lUG9zaXRpb24nXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTcGF0aWFsRXh0ZW50cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBjb25zdCBhcHBlbmRCb3VuZGluZ1BvbHlnb24gPSAoZ2VvbWV0cnk/OiBHZW9tZXRyeSkgPT4ge1xuICAgIGlmICghZ2VvbWV0cnkpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6RVhfQm91bmRpbmdQb2x5Z29uJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9seWdvbicpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKCgpID0+IHdyaXRlR2VvbWV0cnkoZ2VvbWV0cnkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgY29uc3QgYXBwZW5kR2VvZ3JhcGhpY0JvdW5kaW5nQm94ID0gKFxuICAgIGJib3g/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICApID0+IHtcbiAgICBpZiAoIWJib3gpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0JvdW5kaW5nQm94JyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6d2VzdEJvdW5kTG9uZ2l0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzBdKSksXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmVhc3RCb3VuZExvbmdpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFsyXSkpLFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpzb3V0aEJvdW5kTGF0aXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbMV0pKSxcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bm9ydGhCb3VuZExhdGl0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzNdKSlcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBjb25zdCBhcHBlbmRHZW9ncmFwaGljRGVzY3JpcHRpb24gPSAoXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25zPzogRmllbGRUcmFuc2xhdGlvblxuICApID0+IHtcbiAgICBpZiAoIWRlc2NyaXB0aW9uKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpFWF9HZW9ncmFwaGljRGVzY3JpcHRpb24nLFxuICAgICAgICAnZ21kOmdlb2dyYXBoaWNJZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpjb2RlJ1xuICAgICAgKSxcbiAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc3BhdGlhbEV4dGVudHMubWFwKChleHRlbnQpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBhcHBlbmRCb3VuZGluZ1BvbHlnb24oZXh0ZW50Lmdlb21ldHJ5KSxcbiAgICAgICAgICAgIGFwcGVuZEdlb2dyYXBoaWNCb3VuZGluZ0JveChleHRlbnQuYmJveCksXG4gICAgICAgICAgICBhcHBlbmRHZW9ncmFwaGljRGVzY3JpcHRpb24oXG4gICAgICAgICAgICAgIGV4dGVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgZXh0ZW50LnRyYW5zbGF0aW9ucz8uZGVzY3JpcHRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMYW5ndWFnZXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgLy8gY2xlYXIgZXhpc3RpbmdcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpsb2NhbGUnKShyb290RWwpXG5cbiAgLy8gZG8gbm90IHdyaXRlIGRvd24gbGFuZ3VhZ2VzIGlmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSB0aGFuIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoIXJlY29yZC5vdGhlckxhbmd1YWdlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBjcmVhdGVMYW5ndWFnZUVsID0gKGxhbmc6IExhbmd1YWdlQ29kZSkgPT5cbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmxvY2FsZScsICdnbWQ6UFRfTG9jYWxlJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnaWQnLCBsYW5nLnRvVXBwZXJDYXNlKCkpLFxuICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoJ2dtZDpsYW5ndWFnZUNvZGUnLCAnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0JywgJ2h0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldExhbmczRnJvbUxhbmcyKGxhbmcpID8/IGxhbmcpXG4gICAgKVxuXG4gIC8vIGFkZCBuZXcgbGFuZ3VhZ2VzIChvbmx5IGlmIG90aGVyIHRoYW4gZGVmYXVsdCBvbmUpXG4gIGFwcGVuZENoaWxkcmVuKFxuICAgIGNyZWF0ZUxhbmd1YWdlRWwocmVjb3JkLmRlZmF1bHRMYW5ndWFnZSksXG4gICAgLi4ucmVjb3JkLm90aGVyTGFuZ3VhZ2VzLm1hcChjcmVhdGVMYW5ndWFnZUVsKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGVmYXVsdExhbmd1YWdlKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGNvbnN0IGxhbmczID0gZ2V0TGFuZzNGcm9tTGFuZzIocmVjb3JkLmRlZmF1bHRMYW5ndWFnZS50b0xvd2VyQ2FzZSgpKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxhbmd1YWdlJywgJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGxhbmczKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VJZGVudGlmaWVyKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6aWRlbnRpZmllcicpLFxuICAgIHJlY29yZC5yZXNvdXJjZUlkZW50aWZpZXJcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRDaGlsZCgnZ21kOmlkZW50aWZpZXInLCAnZ21kOk1EX0lkZW50aWZpZXInLCAnZ21kOmNvZGUnKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQucmVzb3VyY2VJZGVudGlmaWVyKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKShyb290RWwpXG59XG4iXX0=
@@ -10,14 +10,12 @@ export const ES_SOURCE_SUMMARY = [
10
10
  'codelist_status_text',
11
11
  'link',
12
12
  'linkProtocol',
13
- 'contactForResource.organisation',
14
- 'contact.organisation',
15
- 'contact.email',
13
+ 'contactForResource*.organisation*',
14
+ 'contact*.organisation*',
15
+ 'contact*.email',
16
16
  'userSavedCount',
17
- 'updateFrequency',
18
17
  'cl_topic',
19
18
  'cl_maintenanceAndUpdateFrequency',
20
- 'tag',
21
19
  'MD_LegalConstraints*Object',
22
20
  'qualityScore',
23
21
  'allKeywords',
@@ -31,4 +29,4 @@ export const ES_QUERY_FIELDS_PRIORITY = {
31
29
  'any.${searchLang}': 1,
32
30
  uuid: 1,
33
31
  };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2VsYXN0aWNzZWFyY2gvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsTUFBTTtJQUNOLElBQUk7SUFDSixPQUFPO0lBQ1AsV0FBVztJQUNYLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsVUFBVTtJQUNWLE1BQU07SUFDTixzQkFBc0I7SUFDdEIsTUFBTTtJQUNOLGNBQWM7SUFDZCxpQ0FBaUM7SUFDakMsc0JBQXNCO0lBQ3RCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixrQ0FBa0M7SUFDbEMsS0FBSztJQUNMLDRCQUE0QjtJQUM1QixjQUFjO0lBQ2QsYUFBYTtJQUNiLFlBQVk7Q0FDYixDQUFBO0FBR0QsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUc7SUFDdEMsbUNBQW1DLEVBQUUsQ0FBQztJQUN0QyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLHNDQUFzQyxFQUFFLENBQUM7SUFDekMsNkJBQTZCLEVBQUUsQ0FBQztJQUNoQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3RCLElBQUksRUFBRSxDQUFDO0NBQ1IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBFU19TT1VSQ0VfU1VNTUFSWSA9IFtcbiAgJ3V1aWQnLFxuICAnaWQnLFxuICAndGl0bGUnLFxuICAncmVzb3VyY2UqJyxcbiAgJ3Jlc291cmNlVGl0bGVPYmplY3QnLFxuICAncmVzb3VyY2VBYnN0cmFjdE9iamVjdCcsXG4gICdvdmVydmlldycsXG4gICdsb2dvJyxcbiAgJ2NvZGVsaXN0X3N0YXR1c190ZXh0JyxcbiAgJ2xpbmsnLFxuICAnbGlua1Byb3RvY29sJyxcbiAgJ2NvbnRhY3RGb3JSZXNvdXJjZS5vcmdhbmlzYXRpb24nLFxuICAnY29udGFjdC5vcmdhbmlzYXRpb24nLFxuICAnY29udGFjdC5lbWFpbCcsXG4gICd1c2VyU2F2ZWRDb3VudCcsXG4gICd1cGRhdGVGcmVxdWVuY3knLFxuICAnY2xfdG9waWMnLFxuICAnY2xfbWFpbnRlbmFuY2VBbmRVcGRhdGVGcmVxdWVuY3knLFxuICAndGFnJyxcbiAgJ01EX0xlZ2FsQ29uc3RyYWludHMqT2JqZWN0JyxcbiAgJ3F1YWxpdHlTY29yZScsXG4gICdhbGxLZXl3b3JkcycsXG4gICdyZWNvcmRMaW5rJyxcbl1cblxuZXhwb3J0IHR5cGUgRXNRdWVyeUZpZWxkc1ByaW9yaXR5VHlwZSA9IFJlY29yZDxzdHJpbmcsIG51bWJlcj5cbmV4cG9ydCBjb25zdCBFU19RVUVSWV9GSUVMRFNfUFJJT1JJVFkgPSB7XG4gICdyZXNvdXJjZVRpdGxlT2JqZWN0LiR7c2VhcmNoTGFuZ30nOiA1LFxuICAndGFnLiR7c2VhcmNoTGFuZ30nOiA0LFxuICAncmVzb3VyY2VBYnN0cmFjdE9iamVjdC4ke3NlYXJjaExhbmd9JzogMyxcbiAgJ2xpbmVhZ2VPYmplY3QuJHtzZWFyY2hMYW5nfSc6IDIsXG4gICdhbnkuJHtzZWFyY2hMYW5nfSc6IDEsXG4gIHV1aWQ6IDEsXG59XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2VsYXN0aWNzZWFyY2gvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsTUFBTTtJQUNOLElBQUk7SUFDSixPQUFPO0lBQ1AsV0FBVztJQUNYLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsVUFBVTtJQUNWLE1BQU07SUFDTixzQkFBc0I7SUFDdEIsTUFBTTtJQUNOLGNBQWM7SUFDZCxtQ0FBbUM7SUFDbkMsd0JBQXdCO0lBQ3hCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGtDQUFrQztJQUNsQyw0QkFBNEI7SUFDNUIsY0FBYztJQUNkLGFBQWE7SUFDYixZQUFZO0NBQ2IsQ0FBQTtBQUdELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHO0lBQ3RDLG1DQUFtQyxFQUFFLENBQUM7SUFDdEMsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixzQ0FBc0MsRUFBRSxDQUFDO0lBQ3pDLDZCQUE2QixFQUFFLENBQUM7SUFDaEMsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixJQUFJLEVBQUUsQ0FBQztDQUNSLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRVNfU09VUkNFX1NVTU1BUlkgPSBbXG4gICd1dWlkJyxcbiAgJ2lkJyxcbiAgJ3RpdGxlJyxcbiAgJ3Jlc291cmNlKicsXG4gICdyZXNvdXJjZVRpdGxlT2JqZWN0JyxcbiAgJ3Jlc291cmNlQWJzdHJhY3RPYmplY3QnLFxuICAnb3ZlcnZpZXcnLFxuICAnbG9nbycsXG4gICdjb2RlbGlzdF9zdGF0dXNfdGV4dCcsXG4gICdsaW5rJyxcbiAgJ2xpbmtQcm90b2NvbCcsXG4gICdjb250YWN0Rm9yUmVzb3VyY2UqLm9yZ2FuaXNhdGlvbionLFxuICAnY29udGFjdCoub3JnYW5pc2F0aW9uKicsXG4gICdjb250YWN0Ki5lbWFpbCcsXG4gICd1c2VyU2F2ZWRDb3VudCcsXG4gICdjbF90b3BpYycsXG4gICdjbF9tYWludGVuYW5jZUFuZFVwZGF0ZUZyZXF1ZW5jeScsXG4gICdNRF9MZWdhbENvbnN0cmFpbnRzKk9iamVjdCcsXG4gICdxdWFsaXR5U2NvcmUnLFxuICAnYWxsS2V5d29yZHMnLFxuICAncmVjb3JkTGluaycsXG5dXG5cbmV4cG9ydCB0eXBlIEVzUXVlcnlGaWVsZHNQcmlvcml0eVR5cGUgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG5leHBvcnQgY29uc3QgRVNfUVVFUllfRklFTERTX1BSSU9SSVRZID0ge1xuICAncmVzb3VyY2VUaXRsZU9iamVjdC4ke3NlYXJjaExhbmd9JzogNSxcbiAgJ3RhZy4ke3NlYXJjaExhbmd9JzogNCxcbiAgJ3Jlc291cmNlQWJzdHJhY3RPYmplY3QuJHtzZWFyY2hMYW5nfSc6IDMsXG4gICdsaW5lYWdlT2JqZWN0LiR7c2VhcmNoTGFuZ30nOiAyLFxuICAnYW55LiR7c2VhcmNoTGFuZ30nOiAxLFxuICB1dWlkOiAxLFxufVxuIl19