kepler.gl 3.2.0 → 3.2.2

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 (96) hide show
  1. package/dist/src/ai-assistant/src/config/models.d.ts +8 -0
  2. package/dist/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
  3. package/dist/src/localization/src/translations/en.d.ts +1 -0
  4. package/dist/src/utils/src/arrow-data-container.d.ts +3 -2
  5. package/dist/src/utils/src/data-container-utils.d.ts +2 -0
  6. package/package.json +2 -2
  7. package/src/actions/package.json +8 -8
  8. package/src/ai-assistant/dist/components/ai-assistant-config.js +40 -24
  9. package/src/ai-assistant/dist/config/models.d.ts +8 -0
  10. package/src/ai-assistant/dist/config/models.js +16 -8
  11. package/src/ai-assistant/dist/localization.js +7 -7
  12. package/src/ai-assistant/dist/reducers/index.js +3 -2
  13. package/src/ai-assistant/package.json +16 -16
  14. package/src/ai-assistant/src/components/ai-assistant-config.tsx +39 -28
  15. package/src/ai-assistant/src/config/models.ts +37 -25
  16. package/src/ai-assistant/src/localization.ts +6 -6
  17. package/src/ai-assistant/src/reducers/index.ts +2 -1
  18. package/src/cloud-providers/package.json +2 -2
  19. package/src/common-utils/package.json +3 -3
  20. package/src/components/dist/common/color-legend.js +8 -8
  21. package/src/components/dist/common/data-table/index.js +13 -9
  22. package/src/components/dist/map/map-legend-panel.js +10 -4
  23. package/src/components/dist/map/map-legend.js +2 -2
  24. package/src/components/dist/plot-container.js +4 -2
  25. package/src/components/dist/side-panel/interaction-panel/interaction-panel.js +2 -2
  26. package/src/components/dist/side-panel/layer-panel/color-breaks-panel.js +11 -2
  27. package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +65 -12
  28. package/src/components/dist/side-panel/layer-panel/custom-palette.js +18 -7
  29. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
  30. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +18 -4
  31. package/src/components/package.json +15 -15
  32. package/src/components/src/common/color-legend.tsx +15 -2
  33. package/src/components/src/common/data-table/index.tsx +1 -1
  34. package/src/components/src/map/map-legend-panel.tsx +21 -2
  35. package/src/components/src/map/map-legend.tsx +1 -1
  36. package/src/components/src/plot-container.tsx +2 -1
  37. package/src/components/src/side-panel/interaction-panel/interaction-panel.tsx +1 -0
  38. package/src/components/src/side-panel/layer-panel/color-breaks-panel.tsx +14 -3
  39. package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +62 -8
  40. package/src/components/src/side-panel/layer-panel/custom-palette.tsx +11 -5
  41. package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +19 -2
  42. package/src/constants/dist/default-settings.js +1 -1
  43. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1b/11/43d4199b6142de0b88c672f2b036c5aa4ca836cf35977bbafcdb1962b91e94f8336655a57f0742571ceb13fc69ef4ba0e3cb91dc9a8d61ef041c6eb15e7a +1 -0
  44. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b3/bd/e4f91c7af9e320b979e29ad3b9e3a4dfcd61e4a09d6e4579104c40dcace7651b443fdd6d7ff5d947ed6c9df2c0bbbcc76a2ea86d6398e4945257eeb80dd5 +1 -0
  45. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/ac/e2/e903ec95ada0b0075fdcfb6133e2e75c9b3b0504a29ca665704aaed90b2b +2 -0
  46. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b4/c5/a43653dff3b380f7b0793080a57c980a9a136764933e79454de0fe43a5ca +2 -0
  47. package/src/constants/package.json +2 -2
  48. package/src/constants/umd/keplergl.min.js +1 -1
  49. package/src/deckgl-arrow-layers/package.json +2 -2
  50. package/src/deckgl-layers/package.json +4 -4
  51. package/src/duckdb/dist/table/duckdb-table-utils.js +3 -2
  52. package/src/duckdb/package.json +6 -6
  53. package/src/duckdb/src/table/duckdb-table-utils.ts +5 -1
  54. package/src/effects/package.json +5 -5
  55. package/src/layers/dist/geojson-layer/geojson-utils.js +23 -5
  56. package/src/layers/dist/icon-layer/icon-layer.js +12 -2
  57. package/src/layers/dist/vector-tile/common-tile/tile-dataset.d.ts +4 -0
  58. package/src/layers/dist/vector-tile/common-tile/tile-dataset.js +10 -1
  59. package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +11 -0
  60. package/src/layers/dist/vector-tile/vector-tile-layer.js +113 -7
  61. package/src/layers/package.json +9 -9
  62. package/src/layers/src/geojson-layer/geojson-utils.ts +22 -0
  63. package/src/layers/src/icon-layer/icon-layer.ts +49 -38
  64. package/src/layers/src/vector-tile/common-tile/tile-dataset.ts +7 -0
  65. package/src/layers/src/vector-tile/vector-tile-layer.ts +110 -6
  66. package/src/localization/dist/translations/en.d.ts +1 -0
  67. package/src/localization/dist/translations/en.js +2 -1
  68. package/src/localization/package.json +1 -1
  69. package/src/localization/src/translations/en.ts +1 -0
  70. package/src/processors/dist/data-processor.js +15 -5
  71. package/src/processors/package.json +7 -7
  72. package/src/processors/src/data-processor.ts +19 -4
  73. package/src/reducers/package.json +16 -16
  74. package/src/schemas/package.json +7 -7
  75. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/52/82/28cacf6fd462b779c22675964b655bf3a9f3ce9ec3c9b141a401a5bf90cb7d904ac65ab8e484570130b12771af0a0d5bab20e6976cfa773666763e046a6a +1 -0
  76. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/53/93/f8e389b6450ee0636bf336363d2d6865d8a1fe2445c15cc1e36c651e1ddf448358eb74e894f4bf6fc48ef881dc64cc221c48b133ecf0e02132f2c5fbfe11 +1 -0
  77. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/2e/45/ed6e0c1beb8bca4698a47b5feda8789a22d96978bc4839949bd26e827454 +2 -0
  78. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/56/db/b5a812c56b0d1dcdcd33da37e464062a19c8752cb2296603dc72d2c54d31 +2 -0
  79. package/src/styles/package.json +2 -2
  80. package/src/styles/umd/keplergl.min.js +1 -1
  81. package/src/table/dist/dataset-utils.js +18 -7
  82. package/src/table/dist/kepler-table.js +2 -1
  83. package/src/table/package.json +5 -5
  84. package/src/table/src/dataset-utils.ts +7 -2
  85. package/src/table/src/kepler-table.ts +1 -0
  86. package/src/tasks/package.json +2 -2
  87. package/src/types/actions.d.ts +1 -0
  88. package/src/types/package.json +1 -1
  89. package/src/utils/dist/arrow-data-container.d.ts +3 -2
  90. package/src/utils/dist/arrow-data-container.js +3 -3
  91. package/src/utils/dist/data-container-utils.d.ts +2 -0
  92. package/src/utils/dist/data-container-utils.js +3 -2
  93. package/src/utils/package.json +4 -4
  94. package/src/utils/src/arrow-data-container.ts +9 -7
  95. package/src/utils/src/data-container-utils.ts +3 -1
  96. package/umd/keplergl.min.js +1366 -1333
@@ -143,7 +143,8 @@ function castDuckDBTypesForKepler(tableName, columns) {
143
143
  var quotedColumnName = quoteColumnName(name);
144
144
  if (type === 'GEOMETRY' && options.geometryToWKB) {
145
145
  return "ST_AsWKB(".concat(quotedColumnName, ") as ").concat(quotedColumnName);
146
- } else if (type === 'BIGINT' && options.bigIntToDouble) {
146
+ } else if (options.bigIntToDouble && (type === 'BIGINT' || type === 'UBIGINT' || type === 'HUGEINT' || type === 'UHUGEINT')) {
147
+ // Cast 64-bit and larger integer types to DOUBLE to avoid BigInt in JS
147
148
  return "CAST(".concat(quotedColumnName, " AS DOUBLE) as ").concat(quotedColumnName);
148
149
  }
149
150
  return quotedColumnName;
@@ -633,4 +634,4 @@ function sanitizeDuckDBTableName(fileName) {
633
634
  }
634
635
  return name || 'default_table';
635
636
  }
636
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl90eXBlIiwiX2R1Y2tkYldhc20iLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMiLCJleHBvcnRzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJfeCIsIl94MiIsIl9nZXREdWNrREJDb2x1bW5UeXBlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUyIiwiY29ubmVjdGlvbiIsInRhYmxlTmFtZSIsInF1b3RlZFRhYmxlTmFtZSIsInJlc0Rlc2NyaWJlIiwiZHVja0RiVHlwZXMiLCJudW1Sb3dzIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkMiIsImNvbHVtbk5hbWUiLCJjb2x1bW5UeXBlIiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwicXVvdGVUYWJsZU5hbWUiLCJxdWVyeSIsImNvbmNhdCIsInNlbnQiLCJnZXRDaGlsZEF0IiwicHVzaCIsIm5hbWUiLCJ0eXBlIiwiYWJydXB0Iiwic3RvcCIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwiY29sdW1ucyIsInJlZHVjZSIsImFjYyIsInZhbHVlIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJyZXBsYWNlIiwicXVvdGVDb2x1bW5OYW1lIiwiY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyIiwib3B0aW9ucyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdlb21ldHJ5VG9XS0IiLCJiaWdJbnRUb0RvdWJsZSIsIm1vZGlmaWVkQ29sdW1ucyIsIm1hcCIsImNvbHVtbiIsInF1b3RlZENvbHVtbk5hbWUiLCJqb2luIiwic2V0R2VvQXJyb3dXS0JFeHRlbnNpb24iLCJ0YWJsZSIsInNjaGVtYSIsImZpZWxkcyIsImZvckVhY2giLCJmaWVsZCIsImluZm8iLCJmaW5kIiwibWV0YWRhdGEiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJHRU9BUlJPV19FWFRFTlNJT05TIiwiV0tCIiwicmVzdG9yZUFycm93VGFibGUiLCJhcnJvd1NjaGVtYSIsImNyZWFPcHRzIiwiaW5kZXgiLCJUYWJsZSIsInJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsInJlbW92ZWRNZXRhZGF0YSIsImV4dGVuc2lvbiIsInJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJyZW1vdmVkRXh0ZW5zaW9ucyIsImlzR2VvQXJyb3dQb2ludCIsIkRhdGFUeXBlIiwiaXNGaXhlZFNpemVMaXN0IiwibGlzdFNpemUiLCJpc0Zsb2F0IiwiY2hpbGRyZW4iLCJpc0dlb0Fycm93TGluZVN0cmluZyIsImlzTGlzdCIsImlzR2VvQXJyb3dQb2x5Z29uIiwiaXNHZW9BcnJvd011bHRpUG9pbnQiLCJpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nIiwiaXNHZW9BcnJvd011bHRpUG9seWdvbiIsImNoZWNrSXNTZWxlY3RRdWVyeSIsIl94MyIsIl94NCIsIl9jaGVja0lzU2VsZWN0UXVlcnkiLCJfY2FsbGVlMyIsInJlc3VsdCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInQwIiwic3BsaXRTcWxTdGF0ZW1lbnRzIiwiaW5wdXQiLCJxdWVyaWVzIiwiY3VycmVudFF1ZXJ5IiwiaW5TaW5nbGVRdW90ZSIsImluRG91YmxlUXVvdGUiLCJpbkxpbmVDb21tZW50IiwiaW5CbG9ja0NvbW1lbnQiLCJjaGFyIiwidHJpbW1lZCIsInRyaW0iLCJyZW1vdmVTUUxDb21tZW50cyIsInNxbCIsImRyb3BUYWJsZUlmRXhpc3RzIiwiX3JlZiIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiY29uc29sZSIsImVycm9yIiwiX3g1IiwiX3g2IiwidGFibGVGcm9tRmlsZSIsIl94NyIsIl90YWJsZUZyb21GaWxlIiwiX2NhbGxlZTQiLCJmaWxlIiwiZmlsZUV4dCIsImRiIiwiYyIsInNvdXJjZU5hbWUiLCJhcnJheUJ1ZmZlciIsInVpbnQ4QXJyYXkiLCJhcnJvd1RhYmxlIiwibWVzc2FnZSIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIkVycm9yIiwiZXh0IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJkYXRhYmFzZSIsImNvbm5lY3QiLCJzYW5pdGl6ZUR1Y2tEQlRhYmxlTmFtZSIsIlVpbnQ4QXJyYXkiLCJ0YWJsZUZyb21JUEMiLCJpbnNlcnRBcnJvd1RhYmxlIiwicmVnaXN0ZXJGaWxlSGFuZGxlIiwiRHVja0RCRGF0YVByb3RvY29sIiwiQlJPV1NFUl9GSUxFUkVBREVSIiwiY2xvc2UiLCJmaWxlTmFtZSIsInRlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxvYWRlcnMuZ2xcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCAoYykgdmlzLmdsIGNvbnRyaWJ1dG9yc1xuXG4vLyBDb3BpZWQgZnJvbSBsb2FkZXJzLmdsL2dlb2Fycm93XG5cbi8vIFRPRE86IFJlbW92ZSBpc0dlb0Fycm93KiBvbmNlIEtlcGxlci5nbCBpcyB1cGdyYWRlZCB0byBsb2FkZXJzLmdsIDQuNCtcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJ2FwYWNoZS1hcnJvdy90eXBlJztcbmltcG9ydCB7RHVja0RCRGF0YVByb3RvY29sfSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtHRU9BUlJPV19FWFRFTlNJT05TLCBHRU9BUlJPV19NRVRBREFUQV9LRVl9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhYmFzZUNvbm5lY3Rpb24sIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TID0gWydhcnJvdycsICdjc3YnLCAnZ2VvanNvbicsICdqc29uJywgJ3BhcnF1ZXQnXTtcblxuZXhwb3J0IHR5cGUgRHVja0RCQ29sdW1uRGVzYyA9IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZ307XG5cbi8qKlxuICogUXVlcmllcyBhIER1Y2tEQiB0YWJsZSBmb3IgdGhlIHNjaGVtYSBkZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIEFuIGFjdGl2ZSBEdWNrREIgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgQSBuYW1lIG9mIER1Y2tEQiB0YWJsZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbHVtbiBuYW1lcyBhbmQgRHVja0RCIHR5cGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RHVja0RCQ29sdW1uVHlwZXMoXG4gIGNvbm5lY3Rpb246IERhdGFiYXNlQ29ubmVjdGlvbixcbiAgdGFibGVOYW1lOiBzdHJpbmdcbik6IFByb21pc2U8RHVja0RCQ29sdW1uRGVzY1tdPiB7XG4gIGNvbnN0IHF1b3RlZFRhYmxlTmFtZSA9IHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gIGNvbnN0IHJlc0Rlc2NyaWJlID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgREVTQ1JJQkUgJHtxdW90ZWRUYWJsZU5hbWV9YCk7XG5cbiAgY29uc3QgZHVja0RiVHlwZXM6IER1Y2tEQkNvbHVtbkRlc2NbXSA9IFtdO1xuICBjb25zdCBudW1Sb3dzID0gcmVzRGVzY3JpYmUubnVtUm93cztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gcmVzRGVzY3JpYmUuZ2V0Q2hpbGRBdCgwKT8uZ2V0KGkpO1xuICAgIGNvbnN0IGNvbHVtblR5cGUgPSByZXNEZXNjcmliZS5nZXRDaGlsZEF0KDEpPy5nZXQoaSk7XG5cbiAgICBkdWNrRGJUeXBlcy5wdXNoKHtcbiAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICB0eXBlOiBjb2x1bW5UeXBlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZHVja0RiVHlwZXM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWFwcGluZyBvZiBjb2x1bW4gbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBEdWNrREIgZGF0YSB0eXBlcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbiBkZXNjcmlwdGlvbnMgZnJvbSBEdWNrREIuIENoZWNrIGdldER1Y2tEQkNvbHVtblR5cGVzLlxuICogQHJldHVybnMgQSByZWNvcmQgd2hlcmUga2V5cyBhcmUgY29sdW1uIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRoZWlyIGRhdGEgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWNrREJDb2x1bW5UeXBlc01hcChjb2x1bW5zOiBEdWNrREJDb2x1bW5EZXNjW10pIHtcbiAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2MsIHZhbHVlKSA9PiB7XG4gICAgYWNjW3ZhbHVlLm5hbWVdID0gdmFsdWUudHlwZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSB0YWJsZSBuYW1lIGZvciBzYWZlIFNRTCB1c2FnZS5cbiAqIEFsd2F5cyBxdW90ZXMgdG8gaGFuZGxlIGFsbCBlZGdlIGNhc2VzIChzcGFjZXMsIHNwZWNpYWwgY2hhcmFjdGVycywgcmVzZXJ2ZWQgd29yZHMpLlxuICogRm9yIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyAoY29udGFpbmluZyBkb3RzKSwgcHJlc2VydmVzIHRoZSBleGlzdGluZyBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gdGFibGVOYW1lIFRoZSB0YWJsZSBuYW1lIHRvIHF1b3RlLlxuICogQHJldHVybnMgVGhlIHRhYmxlIG5hbWUsIHByb3Blcmx5IHF1b3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUmV0dXJuIGFzLWlzIGlmOlxuICAvLyAxLiBJdCdzIGFscmVhZHkgYSBwcm9wZXJseSBxdW90ZWQgc2ltcGxlIGlkZW50aWZpZXIgKHN0YXJ0cyBhbmQgZW5kcyB3aXRoIHF1b3RlcylcbiAgLy8gMi4gSXQgY29udGFpbnMgYm90aCBkb3RzIGFuZCBxdW90ZXMgKGFzc3VtZSBpdCdzIGEgcXVhbGlmaWVkIG5hbWUpXG4gIGlmIChcbiAgICAodGFibGVOYW1lLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdGFibGVOYW1lLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICh0YWJsZU5hbWUuaW5jbHVkZXMoJy4nKSAmJiB0YWJsZU5hbWUuaW5jbHVkZXMoJ1wiJykpXG4gICkge1xuICAgIHJldHVybiB0YWJsZU5hbWU7XG4gIH1cblxuICByZXR1cm4gYFwiJHt0YWJsZU5hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG59XG5cbi8qKlxuICogUXVvdGVzIGEgY29sdW1uIG5hbWUgZm9yIHNhZmUgU1FMIHVzYWdlLlxuICogQWx3YXlzIHF1b3RlcyB0byBoYW5kbGUgYWxsIGVkZ2UgY2FzZXMgKHNwYWNlcywgc3BlY2lhbCBjaGFyYWN0ZXJzLCByZXNlcnZlZCB3b3JkcykuXG4gKiBAcGFyYW0gY29sdW1uTmFtZSBUaGUgY29sdW1uIG5hbWUgdG8gcXVvdGUuXG4gKiBAcmV0dXJucyBUaGUgY29sdW1uIG5hbWUsIHByb3Blcmx5IHF1b3RlZC5cbiAqL1xuZnVuY3Rpb24gcXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXCIke2NvbHVtbk5hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBTUUwgcXVlcnkgdG8gc2VsZWN0IGFsbCBjb2x1bW5zIGZyb20gYSBnaXZlbiB0YWJsZSxcbiAqIGNvbnZlcnRpbmcgc3BlY2lmaWVkIGNvbHVtbnMgdG8gV2VsbC1Lbm93biBCaW5hcnkgKFdLQikgZm9ybWF0IHVzaW5nIFNUX0FzV0tCLFxuICogYW5kIGNhc3RpbmcgQklHSU5UIGNvbHVtbnMgdG8gRE9VQkxFIGlmIHNwZWNpZmllZC5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gc2VsZWN0IGRhdGEuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW4gZGVzY3JpcHRvcnMsIGVhY2ggd2l0aCBhIHR5cGUgYW5kIG5hbWUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgdGhlIGNvbnZlcnNpb24gYmVoYXZpb3IuXG4gKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgU1FMIHF1ZXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyKFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgY29sdW1uczogRHVja0RCQ29sdW1uRGVzY1tdLFxuICBvcHRpb25zID0ge2dlb21ldHJ5VG9XS0I6IHRydWUsIGJpZ0ludFRvRG91YmxlOiB0cnVlfVxuKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kaWZpZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICBjb25zdCB7bmFtZSwgdHlwZX0gPSBjb2x1bW47XG4gICAgY29uc3QgcXVvdGVkQ29sdW1uTmFtZSA9IHF1b3RlQ29sdW1uTmFtZShuYW1lKTtcbiAgICBpZiAodHlwZSA9PT0gJ0dFT01FVFJZJyAmJiBvcHRpb25zLmdlb21ldHJ5VG9XS0IpIHtcbiAgICAgIHJldHVybiBgU1RfQXNXS0IoJHtxdW90ZWRDb2x1bW5OYW1lfSkgYXMgJHtxdW90ZWRDb2x1bW5OYW1lfWA7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnQklHSU5UJyAmJiBvcHRpb25zLmJpZ0ludFRvRG91YmxlKSB7XG4gICAgICByZXR1cm4gYENBU1QoJHtxdW90ZWRDb2x1bW5OYW1lfSBBUyBET1VCTEUpIGFzICR7cXVvdGVkQ29sdW1uTmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gcXVvdGVkQ29sdW1uTmFtZTtcbiAgfSk7XG5cbiAgY29uc3QgcXVvdGVkVGFibGVOYW1lID0gcXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKTtcbiAgcmV0dXJuIGBTRUxFQ1QgJHttb2RpZmllZENvbHVtbnMuam9pbignLCAnKX0gRlJPTSAke3F1b3RlZFRhYmxlTmFtZX1gO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIEdlb0Fycm93IFdLQiBleHRlbnNpb24gbWV0YWRhdGEgZm9yIGNvbHVtbnMgb2YgdHlwZSBHRU9NRVRSWSBpbiBhbiBBcnJvdyB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgQXBhY2hlIEFycm93IHRhYmxlIHdob3NlIHNjaGVtYSBmaWVsZHMgd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbiBkZXNjcmlwdG9ycyBmcm9tIGEgRHVja0RCIHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24odGFibGU6IGFycm93LlRhYmxlLCBjb2x1bW5zOiBEdWNrREJDb2x1bW5EZXNjW10pIHtcbiAgdGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBpbmZvID0gY29sdW1ucy5maW5kKHQgPT4gdC5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICBpZiAoaW5mbz8udHlwZSA9PT0gJ0dFT01FVFJZJykge1xuICAgICAgZmllbGQubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5XS0IpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJvdyB0YWJsZSBmcm9tIGFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMgYW5kIGZpZWxkcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMuXG4gKiBAcGFyYW0gZmllbGRzIEFuIGFycmF5IG9mIGZpZWxkcyBwZXIgYXJyb3cgdmVjdG9yLlxuICogQHBhcmFtIGFycm93U2NoZW1hIE9wdGlvbmFsIGFycm93IHRhYmxlIHNjaGVtYSB3aGVuIGF2YWlsYWJsZS5cbiAqIEByZXR1cm5zIEFuIGFycm93IHRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZUFycm93VGFibGUgPSAoXG4gIGNvbHVtbnM6IGFycm93LlZlY3RvcltdLFxuICBmaWVsZHM6IFByb3RvRGF0YXNldEZpZWxkW10sXG4gIGFycm93U2NoZW1hPzogYXJyb3cuU2NoZW1hXG4pID0+IHtcbiAgY29uc3QgY3JlYU9wdHMgPSB7fTtcbiAgZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgY3JlYU9wdHNbZmllbGQubmFtZV0gPSBjb2x1bW5zW2luZGV4XTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycm93U2NoZW1hID8gbmV3IGFycm93LlRhYmxlKGFycm93U2NoZW1hLCBjcmVhT3B0cykgOiBuZXcgYXJyb3cuVGFibGUoY3JlYU9wdHMpO1xufTtcblxuLyoqXG4gKiBEdWNrRGIgdGhyb3dzIHdoZW4gZ2VvYXJyb3cgZXh0ZW5zaW9ucyBhcmUgcHJlc2VudCBpbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB0YWJsZSBBbiBhcnJvdyB0YWJsZSB0byBjbGVhciBmcm9tIGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyBBIG1hcCBvZiByZW1vdmVkIHBlciBmaWVsZCBnZW9hcnJvdyBleHRlbnNpb25zLlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zID0gKHRhYmxlOiBhcnJvdy5UYWJsZSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICBjb25zdCByZW1vdmVkTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgdGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWVsZC5tZXRhZGF0YS5nZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZKTtcbiAgICBpZiAoZXh0ZW5zaW9uPy5zdGFydHNXaXRoKCdnZW9hcnJvdycpKSB7XG4gICAgICByZW1vdmVkTWV0YWRhdGFbZmllbGQubmFtZV0gPSBleHRlbnNpb247XG4gICAgICBmaWVsZC5tZXRhZGF0YS5kZWxldGUoR0VPQVJST1dfTUVUQURBVEFfS0VZKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVtb3ZlZE1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBSZXN0b3JlIHJlbW92ZWQgbWV0YWRhdGEgZXh0ZW5zaW9ucyBhZnRlciBhIGNhbGwgdG8gcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zLlxuICogQHBhcmFtIHRhYmxlIEFuIGFycm93IHRhYmxlIHRvIHJlc3RvcmUgZ2VvYXJyb3cgZXh0ZW5zaW9ucy5cbiAqIEBwYXJhbSByZW1vdmVkRXh0ZW5zaW9ucyBBIG1hcCBvZiBwZXIgZmllbGQgZ2VvYXJyb3cgZXh0ZW5zaW9ucyB0byByZXN0b3JlLlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IChcbiAgdGFibGU6IGFycm93LlRhYmxlLFxuICByZW1vdmVkRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSA9PiB7XG4gIHRhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcmVtb3ZlZEV4dGVuc2lvbnNbZmllbGQubmFtZV07XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgZmllbGQubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgZXh0ZW5zaW9uKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvaW50IGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dQb2ludCh0eXBlOiBEYXRhVHlwZSkge1xuICBpZiAoRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KHR5cGUpKSB7XG4gICAgLy8gQ2hlY2sgbGlzdCBzaXplXG4gICAgaWYgKCFbMiwgMywgNF0uaW5jbHVkZXModHlwZS5saXN0U2l6ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBjaGlsZCBvZiBGaXhlZFNpemVMaXN0IGlzIGZsb2F0aW5nIHR5cGVcbiAgICBpZiAoIURhdGFUeXBlLmlzRmxvYXQodHlwZS5jaGlsZHJlblswXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvaW50IGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGU6IERhdGFUeXBlKSB7XG4gIC8vIENoZWNrIHRoZSBvdXRlciB0eXBlIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvaW50IHR5cGVcbiAgaWYgKCFpc0dlb0Fycm93UG9pbnQodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93UG9seWdvbih0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIGxpbmVzdHJpbmcgdmVjdG9yXG4gIGlmICghaXNHZW9BcnJvd0xpbmVTdHJpbmcodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93TXVsdGlQb2ludCh0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvaW50IHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dQb2ludCh0eXBlLmNoaWxkcmVuWzBdLnR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gQXBhY2hlIEFycm93IEpTIHR5cGUgaXMgYSBQb2x5Z29uIGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcodHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gQ2hlY2sgdGhlIG91dGVyIHZlY3RvciBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBsaW5lc3RyaW5nIHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGUuY2hpbGRyZW5bMF0udHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvbHlnb24gZGF0YSB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9BcnJvd011bHRpUG9seWdvbih0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdmVjdG9yIGlzIGEgTGlzdFxuICBpZiAoIURhdGFUeXBlLmlzTGlzdCh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoZSBjaGlsZCBpcyBhIHBvbHlnb24gdmVjdG9yXG4gIGlmICghaXNHZW9BcnJvd1BvbHlnb24odHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gU1FMIHF1ZXJ5IGlzIGEgU0VMRUNUIHF1ZXJ5IGJ5IHVzaW5nIHRoZSBFWFBMQUlOIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgRHVja0RCIGNvbm5lY3Rpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcXVlcnkgVGhlIFNRTCBxdWVyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcXVlcnkgaXMgYSBTRUxFQ1Qgc3RhdGVtZW50LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrSXNTZWxlY3RRdWVyeShcbiAgY29ubmVjdGlvbjogRGF0YWJhc2VDb25uZWN0aW9uLFxuICBxdWVyeTogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KGBFWFBMQUlOICgke3F1ZXJ5fSlgKTtcbiAgICByZXR1cm4gcmVzdWx0Lm51bVJvd3MgPiAwO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggcG90ZW50aWFsbHkgbXVsdGlwbGUgU1FMIHF1ZXJpZXMgKHNlcGFyYXRlZCBhcyB1c3VhbCBieSAnOycpIGludG8gYW4gYXJyYXkgb2YgcXVlcmllcy5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb246XG4gKiAgLSBIYW5kbGVzIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlZCBzdHJpbmdzIHdpdGggcHJvcGVyIGVzY2FwaW5nXG4gKiAgLSBJZ25vcmVzIHNlbWljb2xvbnMgaW4gbGluZSBjb21tZW50cyAoLS0pIGFuZCBibG9jayBjb21tZW50cyAoc2xhc2ggYXN0ZXJpc2spXG4gKiAgLSBUcmltcyB3aGl0ZXNwYWNlIGZyb20gcXVlcmllc1xuICogIC0gSGFuZGxlcyBTUUwtc3R5bGUgZXNjYXBlZCBxdW90ZXMgKCcnIGluc2lkZSBzdHJpbmdzKVxuICogIC0gUmV0dXJucyBvbmx5IG5vbi1lbXB0eSBxdWVyaWVzXG4gKiBAcGFyYW0gaW5wdXQgQSBzdHJpbmcgd2l0aCBwb3RlbnRpYWxseSBtdWx0aXBsZSBTUUwgcXVlcmllcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFNxbFN0YXRlbWVudHMoaW5wdXQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcXVlcmllczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRRdWVyeSA9ICcnO1xuICBsZXQgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICBsZXQgaW5Eb3VibGVRdW90ZSA9IGZhbHNlO1xuICBsZXQgaW5MaW5lQ29tbWVudCA9IGZhbHNlO1xuICBsZXQgaW5CbG9ja0NvbW1lbnQgPSBmYWxzZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IGlucHV0W2ldO1xuXG4gICAgaWYgKGluTGluZUNvbW1lbnQpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09ICdcXG4nKSB7XG4gICAgICAgIGluTGluZUNvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpbkJsb2NrQ29tbWVudCkge1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBpZiAoY2hhciA9PT0gJyonICYmIGlucHV0W2kgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgIGluQmxvY2tDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGN1cnJlbnRRdWVyeSArPSBpbnB1dFsrK2ldOyAvLyBDb25zdW1lICcvJ1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGluU2luZ2xlUXVvdGUpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlc2NhcGVkIHNpbmdsZSBxdW90ZXMgaW4gU1FMXG4gICAgICAgIGlmIChpICsgMSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpICsgMV0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXJ5ICs9IGlucHV0WysraV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaW5Eb3VibGVRdW90ZSkge1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgICAvLyBIYW5kbGUgZXNjYXBlZCBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmIChpICsgMSA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtpICsgMV0gPT09ICdcIicpIHtcbiAgICAgICAgICBjdXJyZW50UXVlcnkgKz0gaW5wdXRbKytpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbkRvdWJsZVF1b3RlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjb21tZW50IHN0YXJ0c1xuICAgIGlmIChjaGFyID09PSAnLScgJiYgaW5wdXRbaSArIDFdID09PSAnLScpIHtcbiAgICAgIGluTGluZUNvbW1lbnQgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXIgKyBpbnB1dFsrK2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09ICcvJyAmJiBpbnB1dFtpICsgMV0gPT09ICcqJykge1xuICAgICAgaW5CbG9ja0NvbW1lbnQgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXIgKyBpbnB1dFsrK2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHF1b3RlIHN0YXJ0c1xuICAgIGlmIChjaGFyID09PSBcIidcIikge1xuICAgICAgaW5TaW5nbGVRdW90ZSA9IHRydWU7XG4gICAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpbkRvdWJsZVF1b3RlID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHF1ZXJ5IHNlcGFyYXRvclxuICAgIGlmIChjaGFyID09PSAnOycpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBjdXJyZW50UXVlcnkudHJpbSgpO1xuICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBxdWVyaWVzLnB1c2godHJpbW1lZCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UXVlcnkgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBmaW5hbCBxdWVyeVxuICBjb25zdCB0cmltbWVkID0gY3VycmVudFF1ZXJ5LnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkge1xuICAgIHF1ZXJpZXMucHVzaCh0cmltbWVkKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyaWVzO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgU1FMIGNvbW1lbnRzIGZyb20gYSBnaXZlbiBTUUwgc3RyaW5nLlxuICogQHBhcmFtIHNxbCBUaGUgU1FMIHF1ZXJ5IHN0cmluZyBmcm9tIHdoaWNoIGNvbW1lbnRzIHNob3VsZCBiZSByZW1vdmVkLlxuICogQHJldHVybnMgVGhlIGNsZWFuZWQgU1FMIHN0cmluZyB3aXRob3V0IGNvbW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU1FMQ29tbWVudHMoc3FsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZW1vdmUgbXVsdGktbGluZSBjb21tZW50cyAoLyogLi4uICovKVxuICBzcWwgPSBzcWwucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCAnJyk7XG4gIC8vIFJlbW92ZSBzaW5nbGUtbGluZSBjb21tZW50cyAoLS0gLi4uKVxuICBzcWwgPSBzcWwucmVwbGFjZSgvLS0uKiQvZ20sICcnKTtcbiAgcmV0dXJuIHNxbC50cmltKCk7XG59XG5cbi8qKlxuICogRHJvcHMgYSB0YWJsZSBpZiBpdCBleGlzdHMgaW4gdGhlIER1Y2tEQiBkYXRhYmFzZS5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIFRoZSBEdWNrREIgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRvIGRyb3AuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKiBAdGhyb3dzIExvZ3MgYW4gZXJyb3IgaWYgdGhlIHRhYmxlIGRyb3Agb3BlcmF0aW9uIGZhaWxzLlxuICovXG5leHBvcnQgY29uc3QgZHJvcFRhYmxlSWZFeGlzdHMgPSBhc3luYyAoY29ubmVjdGlvbjogRGF0YWJhc2VDb25uZWN0aW9uLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYERST1AgVEFCTEUgSUYgRVhJU1RTIFwiJHt0YWJsZU5hbWV9XCI7YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRHJvcHBpbmcgdGFibGUgZmFpbGVkJywgdGFibGVOYW1lLCBlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogSW1wb3J0cyBhIGZpbGUgaW50byBEdWNrREIgYXMgYSB0YWJsZSwgc3VwcG9ydGluZyBtdWx0aXBsZSBmb3JtYXRzIGZyb20gU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMuXG4gKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBiZSBpbXBvcnRlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBEdWNrREIgdGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0YWJsZUZyb21GaWxlKGZpbGU6IEZpbGUgfCBudWxsKTogUHJvbWlzZTxudWxsIHwgRXJyb3I+IHtcbiAgaWYgKCFmaWxlKSByZXR1cm4gbmV3IEVycm9yKCdGaWxlIERyYWcgJiBEcm9wOiBObyBmaWxlJyk7XG5cbiAgY29uc3QgZmlsZUV4dCA9IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TLmZpbmQoZXh0ID0+IGZpbGUubmFtZS5lbmRzV2l0aChleHQpKTtcbiAgaWYgKCFmaWxlRXh0KSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIkZpbGUgRHJhZyAmIERyb3A6IEZpbGUgZXh0ZW5zaW9uIGlzbid0IHN1cHBvcnRlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGRiID0gYXdhaXQgZ2V0QXBwbGljYXRpb25Db25maWcoKS5kYXRhYmFzZTtcbiAgaWYgKCFkYikge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgfVxuICBjb25zdCBjID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuXG4gIGxldCBlcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcblxuICB0cnkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHNhbml0aXplRHVja0RCVGFibGVOYW1lKGZpbGUubmFtZSk7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9ICd0ZW1wX2ZpbGVfaGFuZGxlJztcblxuICAgIGMucXVlcnkoYGluc3RhbGwgc3BhdGlhbDtcbiAgICAgIGxvYWQgc3BhdGlhbDtgKTtcblxuICAgIGlmIChmaWxlRXh0ID09PSAnYXJyb3cnKSB7XG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgICBjb25zdCBhcnJvd1RhYmxlID0gYXJyb3cudGFibGVGcm9tSVBDKHVpbnQ4QXJyYXkpO1xuXG4gICAgICBhd2FpdCBjLmluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZSwge25hbWU6IHRhYmxlTmFtZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVIYW5kbGUoc291cmNlTmFtZSwgZmlsZSwgRHVja0RCRGF0YVByb3RvY29sLkJST1dTRVJfRklMRVJFQURFUiwgdHJ1ZSk7XG5cbiAgICAgIGlmIChmaWxlRXh0ID09PSAnY3N2Jykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gcmVhZF9jc3YoJyR7c291cmNlTmFtZX0nLCBoZWFkZXIgPSB0cnVlLCBhdXRvX2RldGVjdCA9IHRydWUsIHNhbXBsZV9zaXplID0gLTEpO1xuICAgICAgICAgIGApO1xuICAgICAgfSBlbHNlIGlmIChmaWxlRXh0ID09PSAnanNvbicpIHtcbiAgICAgICAgYXdhaXQgYy5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGFibGVOYW1lfScgQVNcbiAgICAgICAgICAgIFNFTEVDVCAqXG4gICAgICAgICAgICBGUk9NIHJlYWRfanNvbl9hdXRvKCcke3NvdXJjZU5hbWV9Jyk7XG4gICAgICAgICAgYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVFeHQgPT09ICdnZW9qc29uJykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gU1RfUkVBRCgnJHtzb3VyY2VOYW1lfScsIGtlZXBfd2tiID0gVFJVRSk7XG4gICAgICAgICAgYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVFeHQgPT09ICdwYXJxdWV0Jykge1xuICAgICAgICBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgICAgIENSRUFURSBUQUJMRSAnJHt0YWJsZU5hbWV9JyBBU1xuICAgICAgICAgICAgU0VMRUNUICpcbiAgICAgICAgICAgIEZST00gcmVhZF9wYXJxdWV0KCcke3NvdXJjZU5hbWV9JylcbiAgICAgICAgICBgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yRGF0YSkge1xuICAgIGlmIChlcnJvckRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yRGF0YS5tZXNzYWdlIHx8ICcnO1xuICAgICAgLy8gb3V0cHV0IG1vcmUgcmVhZGFibGUgZXJyb3JzIGZvciBrbm93biBpc3N1ZXNcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93JykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1RoZSBHZW9BcnJvdyBleHRlbnNpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbm5lY3RlZCBEdWNrREIgdmVyc2lvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCJHZW9wYXJxdWV0IGNvbHVtbiAnZ2VvbWV0cnknIGRvZXMgbm90IGhhdmUgZ2VvbWV0cnkgdHlwZXNcIikpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgSW5wdXQgRXJyb3I6IEdlb3BhcnF1ZXQgY29sdW1uICdnZW9tZXRyeScgZG9lcyBub3QgaGF2ZSBnZW9tZXRyeSB0eXBlcy5cblBvc3NpYmxlIHJlYXNvbnM6XG4gIC0gT2xkIC5wYXJxdWV0IGZpbGVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIFBhcnF1ZXQgZm9ybWF0IHNwZWNpZmljYXRpb24uXG4gIC0gVW5zdXBwb3J0ZWQgY29tcHJlc3Npb24uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gZXJyb3JEYXRhIGFzIEVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGMuY2xvc2UoKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbi8qKlxuICogU2FuaXRpemVzIGEgZmlsZSBuYW1lIHRvIGJlIGEgdmFsaWQgRHVja0RCIHRhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZmlsZU5hbWUgVGhlIGlucHV0IGZpbGUgbmFtZSB0byBiZSBzYW5pdGl6ZWQuXG4gKiBAcmV0dXJucyBBIHZhbGlkIER1Y2tEQiB0YWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVEdWNrREJUYWJsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXNcbiAgbGV0IG5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICdfJyk7XG4gIC8vIEVuc3VyZSBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBkaWdpdFxuICBpZiAoL15cXGQvLnRlc3QobmFtZSkpIHtcbiAgICBuYW1lID0gYHRfJHtuYW1lfWA7XG4gIH1cbiAgcmV0dXJuIG5hbWUgfHwgJ2RlZmF1bHRfdGFibGUnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxH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
637
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl90eXBlIiwiX2R1Y2tkYldhc20iLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlMiLCJleHBvcnRzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJfeCIsIl94MiIsIl9nZXREdWNrREJDb2x1bW5UeXBlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUyIiwiY29ubmVjdGlvbiIsInRhYmxlTmFtZSIsInF1b3RlZFRhYmxlTmFtZSIsInJlc0Rlc2NyaWJlIiwiZHVja0RiVHlwZXMiLCJudW1Sb3dzIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkIiwiX3Jlc0Rlc2NyaWJlJGdldENoaWxkMiIsImNvbHVtbk5hbWUiLCJjb2x1bW5UeXBlIiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwicXVvdGVUYWJsZU5hbWUiLCJxdWVyeSIsImNvbmNhdCIsInNlbnQiLCJnZXRDaGlsZEF0IiwicHVzaCIsIm5hbWUiLCJ0eXBlIiwiYWJydXB0Iiwic3RvcCIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwiY29sdW1ucyIsInJlZHVjZSIsImFjYyIsInZhbHVlIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJyZXBsYWNlIiwicXVvdGVDb2x1bW5OYW1lIiwiY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyIiwib3B0aW9ucyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdlb21ldHJ5VG9XS0IiLCJiaWdJbnRUb0RvdWJsZSIsIm1vZGlmaWVkQ29sdW1ucyIsIm1hcCIsImNvbHVtbiIsInF1b3RlZENvbHVtbk5hbWUiLCJqb2luIiwic2V0R2VvQXJyb3dXS0JFeHRlbnNpb24iLCJ0YWJsZSIsInNjaGVtYSIsImZpZWxkcyIsImZvckVhY2giLCJmaWVsZCIsImluZm8iLCJmaW5kIiwibWV0YWRhdGEiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJHRU9BUlJPV19FWFRFTlNJT05TIiwiV0tCIiwicmVzdG9yZUFycm93VGFibGUiLCJhcnJvd1NjaGVtYSIsImNyZWFPcHRzIiwiaW5kZXgiLCJUYWJsZSIsInJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsInJlbW92ZWRNZXRhZGF0YSIsImV4dGVuc2lvbiIsInJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJyZW1vdmVkRXh0ZW5zaW9ucyIsImlzR2VvQXJyb3dQb2ludCIsIkRhdGFUeXBlIiwiaXNGaXhlZFNpemVMaXN0IiwibGlzdFNpemUiLCJpc0Zsb2F0IiwiY2hpbGRyZW4iLCJpc0dlb0Fycm93TGluZVN0cmluZyIsImlzTGlzdCIsImlzR2VvQXJyb3dQb2x5Z29uIiwiaXNHZW9BcnJvd011bHRpUG9pbnQiLCJpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nIiwiaXNHZW9BcnJvd011bHRpUG9seWdvbiIsImNoZWNrSXNTZWxlY3RRdWVyeSIsIl94MyIsIl94NCIsIl9jaGVja0lzU2VsZWN0UXVlcnkiLCJfY2FsbGVlMyIsInJlc3VsdCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInQwIiwic3BsaXRTcWxTdGF0ZW1lbnRzIiwiaW5wdXQiLCJxdWVyaWVzIiwiY3VycmVudFF1ZXJ5IiwiaW5TaW5nbGVRdW90ZSIsImluRG91YmxlUXVvdGUiLCJpbkxpbmVDb21tZW50IiwiaW5CbG9ja0NvbW1lbnQiLCJjaGFyIiwidHJpbW1lZCIsInRyaW0iLCJyZW1vdmVTUUxDb21tZW50cyIsInNxbCIsImRyb3BUYWJsZUlmRXhpc3RzIiwiX3JlZiIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiY29uc29sZSIsImVycm9yIiwiX3g1IiwiX3g2IiwidGFibGVGcm9tRmlsZSIsIl94NyIsIl90YWJsZUZyb21GaWxlIiwiX2NhbGxlZTQiLCJmaWxlIiwiZmlsZUV4dCIsImRiIiwiYyIsInNvdXJjZU5hbWUiLCJhcnJheUJ1ZmZlciIsInVpbnQ4QXJyYXkiLCJhcnJvd1RhYmxlIiwibWVzc2FnZSIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIkVycm9yIiwiZXh0IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJkYXRhYmFzZSIsImNvbm5lY3QiLCJzYW5pdGl6ZUR1Y2tEQlRhYmxlTmFtZSIsIlVpbnQ4QXJyYXkiLCJ0YWJsZUZyb21JUEMiLCJpbnNlcnRBcnJvd1RhYmxlIiwicmVnaXN0ZXJGaWxlSGFuZGxlIiwiRHVja0RCRGF0YVByb3RvY29sIiwiQlJPV1NFUl9GSUxFUkVBREVSIiwiY2xvc2UiLCJmaWxlTmFtZSIsInRlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxvYWRlcnMuZ2xcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCAoYykgdmlzLmdsIGNvbnRyaWJ1dG9yc1xuXG4vLyBDb3BpZWQgZnJvbSBsb2FkZXJzLmdsL2dlb2Fycm93XG5cbi8vIFRPRE86IFJlbW92ZSBpc0dlb0Fycm93KiBvbmNlIEtlcGxlci5nbCBpcyB1cGdyYWRlZCB0byBsb2FkZXJzLmdsIDQuNCtcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJ2FwYWNoZS1hcnJvdy90eXBlJztcbmltcG9ydCB7RHVja0RCRGF0YVByb3RvY29sfSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtHRU9BUlJPV19FWFRFTlNJT05TLCBHRU9BUlJPV19NRVRBREFUQV9LRVl9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhYmFzZUNvbm5lY3Rpb24sIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TID0gWydhcnJvdycsICdjc3YnLCAnZ2VvanNvbicsICdqc29uJywgJ3BhcnF1ZXQnXTtcblxuZXhwb3J0IHR5cGUgRHVja0RCQ29sdW1uRGVzYyA9IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZ307XG5cbi8qKlxuICogUXVlcmllcyBhIER1Y2tEQiB0YWJsZSBmb3IgdGhlIHNjaGVtYSBkZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSBjb25uZWN0aW9uIEFuIGFjdGl2ZSBEdWNrREIgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgQSBuYW1lIG9mIER1Y2tEQiB0YWJsZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbHVtbiBuYW1lcyBhbmQgRHVja0RCIHR5cGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RHVja0RCQ29sdW1uVHlwZXMoXG4gIGNvbm5lY3Rpb246IERhdGFiYXNlQ29ubmVjdGlvbixcbiAgdGFibGVOYW1lOiBzdHJpbmdcbik6IFByb21pc2U8RHVja0RCQ29sdW1uRGVzY1tdPiB7XG4gIGNvbnN0IHF1b3RlZFRhYmxlTmFtZSA9IHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gIGNvbnN0IHJlc0Rlc2NyaWJlID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgREVTQ1JJQkUgJHtxdW90ZWRUYWJsZU5hbWV9YCk7XG5cbiAgY29uc3QgZHVja0RiVHlwZXM6IER1Y2tEQkNvbHVtbkRlc2NbXSA9IFtdO1xuICBjb25zdCBudW1Sb3dzID0gcmVzRGVzY3JpYmUubnVtUm93cztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gcmVzRGVzY3JpYmUuZ2V0Q2hpbGRBdCgwKT8uZ2V0KGkpO1xuICAgIGNvbnN0IGNvbHVtblR5cGUgPSByZXNEZXNjcmliZS5nZXRDaGlsZEF0KDEpPy5nZXQoaSk7XG5cbiAgICBkdWNrRGJUeXBlcy5wdXNoKHtcbiAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICB0eXBlOiBjb2x1bW5UeXBlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZHVja0RiVHlwZXM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWFwcGluZyBvZiBjb2x1bW4gbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBEdWNrREIgZGF0YSB0eXBlcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbiBkZXNjcmlwdGlvbnMgZnJvbSBEdWNrREIuIENoZWNrIGdldER1Y2tEQkNvbHVtblR5cGVzLlxuICogQHJldHVybnMgQSByZWNvcmQgd2hlcmUga2V5cyBhcmUgY29sdW1uIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRoZWlyIGRhdGEgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWNrREJDb2x1bW5UeXBlc01hcChjb2x1bW5zOiBEdWNrREJDb2x1bW5EZXNjW10pIHtcbiAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2MsIHZhbHVlKSA9PiB7XG4gICAgYWNjW3ZhbHVlLm5hbWVdID0gdmFsdWUudHlwZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbn1cblxuLyoqXG4gKiBRdW90ZXMgYSB0YWJsZSBuYW1lIGZvciBzYWZlIFNRTCB1c2FnZS5cbiAqIEFsd2F5cyBxdW90ZXMgdG8gaGFuZGxlIGFsbCBlZGdlIGNhc2VzIChzcGFjZXMsIHNwZWNpYWwgY2hhcmFjdGVycywgcmVzZXJ2ZWQgd29yZHMpLlxuICogRm9yIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyAoY29udGFpbmluZyBkb3RzKSwgcHJlc2VydmVzIHRoZSBleGlzdGluZyBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gdGFibGVOYW1lIFRoZSB0YWJsZSBuYW1lIHRvIHF1b3RlLlxuICogQHJldHVybnMgVGhlIHRhYmxlIG5hbWUsIHByb3Blcmx5IHF1b3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUmV0dXJuIGFzLWlzIGlmOlxuICAvLyAxLiBJdCdzIGFscmVhZHkgYSBwcm9wZXJseSBxdW90ZWQgc2ltcGxlIGlkZW50aWZpZXIgKHN0YXJ0cyBhbmQgZW5kcyB3aXRoIHF1b3RlcylcbiAgLy8gMi4gSXQgY29udGFpbnMgYm90aCBkb3RzIGFuZCBxdW90ZXMgKGFzc3VtZSBpdCdzIGEgcXVhbGlmaWVkIG5hbWUpXG4gIGlmIChcbiAgICAodGFibGVOYW1lLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdGFibGVOYW1lLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICh0YWJsZU5hbWUuaW5jbHVkZXMoJy4nKSAmJiB0YWJsZU5hbWUuaW5jbHVkZXMoJ1wiJykpXG4gICkge1xuICAgIHJldHVybiB0YWJsZU5hbWU7XG4gIH1cblxuICByZXR1cm4gYFwiJHt0YWJsZU5hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG59XG5cbi8qKlxuICogUXVvdGVzIGEgY29sdW1uIG5hbWUgZm9yIHNhZmUgU1FMIHVzYWdlLlxuICogQWx3YXlzIHF1b3RlcyB0byBoYW5kbGUgYWxsIGVkZ2UgY2FzZXMgKHNwYWNlcywgc3BlY2lhbCBjaGFyYWN0ZXJzLCByZXNlcnZlZCB3b3JkcykuXG4gKiBAcGFyYW0gY29sdW1uTmFtZSBUaGUgY29sdW1uIG5hbWUgdG8gcXVvdGUuXG4gKiBAcmV0dXJucyBUaGUgY29sdW1uIG5hbWUsIHByb3Blcmx5IHF1b3RlZC5cbiAqL1xuZnVuY3Rpb24gcXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXCIke2NvbHVtbk5hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBTUUwgcXVlcnkgdG8gc2VsZWN0IGFsbCBjb2x1bW5zIGZyb20gYSBnaXZlbiB0YWJsZSxcbiAqIGNvbnZlcnRpbmcgc3BlY2lmaWVkIGNvbHVtbnMgdG8gV2VsbC1Lbm93biBCaW5hcnkgKFdLQikgZm9ybWF0IHVzaW5nIFNUX0FzV0tCLFxuICogYW5kIGNhc3RpbmcgQklHSU5UIGNvbHVtbnMgdG8gRE9VQkxFIGlmIHNwZWNpZmllZC5cbiAqIEBwYXJhbSB0YWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gc2VsZWN0IGRhdGEuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW4gZGVzY3JpcHRvcnMsIGVhY2ggd2l0aCBhIHR5cGUgYW5kIG5hbWUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbnRyb2wgdGhlIGNvbnZlcnNpb24gYmVoYXZpb3IuXG4gKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgU1FMIHF1ZXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyKFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgY29sdW1uczogRHVja0RCQ29sdW1uRGVzY1tdLFxuICBvcHRpb25zID0ge2dlb21ldHJ5VG9XS0I6IHRydWUsIGJpZ0ludFRvRG91YmxlOiB0cnVlfVxuKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kaWZpZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICBjb25zdCB7bmFtZSwgdHlwZX0gPSBjb2x1bW47XG4gICAgY29uc3QgcXVvdGVkQ29sdW1uTmFtZSA9IHF1b3RlQ29sdW1uTmFtZShuYW1lKTtcbiAgICBpZiAodHlwZSA9PT0gJ0dFT01FVFJZJyAmJiBvcHRpb25zLmdlb21ldHJ5VG9XS0IpIHtcbiAgICAgIHJldHVybiBgU1RfQXNXS0IoJHtxdW90ZWRDb2x1bW5OYW1lfSkgYXMgJHtxdW90ZWRDb2x1bW5OYW1lfWA7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG9wdGlvbnMuYmlnSW50VG9Eb3VibGUgJiZcbiAgICAgICh0eXBlID09PSAnQklHSU5UJyB8fCB0eXBlID09PSAnVUJJR0lOVCcgfHwgdHlwZSA9PT0gJ0hVR0VJTlQnIHx8IHR5cGUgPT09ICdVSFVHRUlOVCcpXG4gICAgKSB7XG4gICAgICAvLyBDYXN0IDY0LWJpdCBhbmQgbGFyZ2VyIGludGVnZXIgdHlwZXMgdG8gRE9VQkxFIHRvIGF2b2lkIEJpZ0ludCBpbiBKU1xuICAgICAgcmV0dXJuIGBDQVNUKCR7cXVvdGVkQ29sdW1uTmFtZX0gQVMgRE9VQkxFKSBhcyAke3F1b3RlZENvbHVtbk5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHF1b3RlZENvbHVtbk5hbWU7XG4gIH0pO1xuXG4gIGNvbnN0IHF1b3RlZFRhYmxlTmFtZSA9IHF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gIHJldHVybiBgU0VMRUNUICR7bW9kaWZpZWRDb2x1bW5zLmpvaW4oJywgJyl9IEZST00gJHtxdW90ZWRUYWJsZU5hbWV9YDtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBHZW9BcnJvdyBXS0IgZXh0ZW5zaW9uIG1ldGFkYXRhIGZvciBjb2x1bW5zIG9mIHR5cGUgR0VPTUVUUlkgaW4gYW4gQXJyb3cgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVGhlIEFwYWNoZSBBcnJvdyB0YWJsZSB3aG9zZSBzY2hlbWEgZmllbGRzIHdpbGwgYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW4gZGVzY3JpcHRvcnMgZnJvbSBhIER1Y2tEQiB0YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEdlb0Fycm93V0tCRXh0ZW5zaW9uKHRhYmxlOiBhcnJvdy5UYWJsZSwgY29sdW1uczogRHVja0RCQ29sdW1uRGVzY1tdKSB7XG4gIHRhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgaW5mbyA9IGNvbHVtbnMuZmluZCh0ID0+IHQubmFtZSA9PT0gZmllbGQubmFtZSk7XG4gICAgaWYgKGluZm8/LnR5cGUgPT09ICdHRU9NRVRSWScpIHtcbiAgICAgIGZpZWxkLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyb3cgdGFibGUgZnJvbSBhbiBhcnJheSBvZiBhcnJvdyB2ZWN0b3JzIGFuZCBmaWVsZHMuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBhcnJvdyB2ZWN0b3JzLlxuICogQHBhcmFtIGZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZHMgcGVyIGFycm93IHZlY3Rvci5cbiAqIEBwYXJhbSBhcnJvd1NjaGVtYSBPcHRpb25hbCBhcnJvdyB0YWJsZSBzY2hlbWEgd2hlbiBhdmFpbGFibGUuXG4gKiBAcmV0dXJucyBBbiBhcnJvdyB0YWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3RvcmVBcnJvd1RhYmxlID0gKFxuICBjb2x1bW5zOiBhcnJvdy5WZWN0b3JbXSxcbiAgZmllbGRzOiBQcm90b0RhdGFzZXRGaWVsZFtdLFxuICBhcnJvd1NjaGVtYT86IGFycm93LlNjaGVtYVxuKSA9PiB7XG4gIGNvbnN0IGNyZWFPcHRzID0ge307XG4gIGZpZWxkcy5tYXAoKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgIGNyZWFPcHRzW2ZpZWxkLm5hbWVdID0gY29sdW1uc1tpbmRleF07XG4gIH0pO1xuXG4gIHJldHVybiBhcnJvd1NjaGVtYSA/IG5ldyBhcnJvdy5UYWJsZShhcnJvd1NjaGVtYSwgY3JlYU9wdHMpIDogbmV3IGFycm93LlRhYmxlKGNyZWFPcHRzKTtcbn07XG5cbi8qKlxuICogRHVja0RiIHRocm93cyB3aGVuIGdlb2Fycm93IGV4dGVuc2lvbnMgYXJlIHByZXNlbnQgaW4gbWV0YWRhdGEuXG4gKiBAcGFyYW0gdGFibGUgQW4gYXJyb3cgdGFibGUgdG8gY2xlYXIgZnJvbSBleHRlbnNpb25zLlxuICogQHJldHVybnMgQSBtYXAgb2YgcmVtb3ZlZCBwZXIgZmllbGQgZ2VvYXJyb3cgZXh0ZW5zaW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyA9ICh0YWJsZTogYXJyb3cuVGFibGUpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmVtb3ZlZE1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHRhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZmllbGQubWV0YWRhdGEuZ2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSk7XG4gICAgaWYgKGV4dGVuc2lvbj8uc3RhcnRzV2l0aCgnZ2VvYXJyb3cnKSkge1xuICAgICAgcmVtb3ZlZE1ldGFkYXRhW2ZpZWxkLm5hbWVdID0gZXh0ZW5zaW9uO1xuICAgICAgZmllbGQubWV0YWRhdGEuZGVsZXRlKEdFT0FSUk9XX01FVEFEQVRBX0tFWSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlbW92ZWRNZXRhZGF0YTtcbn07XG5cbi8qKlxuICogUmVzdG9yZSByZW1vdmVkIG1ldGFkYXRhIGV4dGVuc2lvbnMgYWZ0ZXIgYSBjYWxsIHRvIHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucy5cbiAqIEBwYXJhbSB0YWJsZSBBbiBhcnJvdyB0YWJsZSB0byByZXN0b3JlIGdlb2Fycm93IGV4dGVuc2lvbnMuXG4gKiBAcGFyYW0gcmVtb3ZlZEV4dGVuc2lvbnMgQSBtYXAgb2YgcGVyIGZpZWxkIGdlb2Fycm93IGV4dGVuc2lvbnMgdG8gcmVzdG9yZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMgPSAoXG4gIHRhYmxlOiBhcnJvdy5UYWJsZSxcbiAgcmVtb3ZlZEV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikgPT4ge1xuICB0YWJsZS5zY2hlbWEuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IHJlbW92ZWRFeHRlbnNpb25zW2ZpZWxkLm5hbWVdO1xuICAgIGlmIChleHRlbnNpb24pIHtcbiAgICAgIGZpZWxkLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIGV4dGVuc2lvbik7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gQXBhY2hlIEFycm93IEpTIHR5cGUgaXMgYSBQb2ludCBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93UG9pbnQodHlwZTogRGF0YVR5cGUpIHtcbiAgaWYgKERhdGFUeXBlLmlzRml4ZWRTaXplTGlzdCh0eXBlKSkge1xuICAgIC8vIENoZWNrIGxpc3Qgc2l6ZVxuICAgIGlmICghWzIsIDMsIDRdLmluY2x1ZGVzKHR5cGUubGlzdFNpemUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgY2hpbGQgb2YgRml4ZWRTaXplTGlzdCBpcyBmbG9hdGluZyB0eXBlXG4gICAgaWYgKCFEYXRhVHlwZS5pc0Zsb2F0KHR5cGUuY2hpbGRyZW5bMF0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gQXBhY2hlIEFycm93IEpTIHR5cGUgaXMgYSBQb2ludCBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93TGluZVN0cmluZyh0eXBlOiBEYXRhVHlwZSkge1xuICAvLyBDaGVjayB0aGUgb3V0ZXIgdHlwZSBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBwb2ludCB0eXBlXG4gIGlmICghaXNHZW9BcnJvd1BvaW50KHR5cGUuY2hpbGRyZW5bMF0udHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvbHlnb24gZGF0YSB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9BcnJvd1BvbHlnb24odHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gQ2hlY2sgdGhlIG91dGVyIHZlY3RvciBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBsaW5lc3RyaW5nIHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dMaW5lU3RyaW5nKHR5cGUuY2hpbGRyZW5bMF0udHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBBcGFjaGUgQXJyb3cgSlMgdHlwZSBpcyBhIFBvbHlnb24gZGF0YSB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9BcnJvd011bHRpUG9pbnQodHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gQ2hlY2sgdGhlIG91dGVyIHZlY3RvciBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBwb2ludCB2ZWN0b3JcbiAgaWYgKCFpc0dlb0Fycm93UG9pbnQodHlwZS5jaGlsZHJlblswXS50eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEFwYWNoZSBBcnJvdyBKUyB0eXBlIGlzIGEgUG9seWdvbiBkYXRhIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nKHR5cGU6IERhdGFUeXBlKSB7XG4gIC8vIENoZWNrIHRoZSBvdXRlciB2ZWN0b3IgaXMgYSBMaXN0XG4gIGlmICghRGF0YVR5cGUuaXNMaXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIGNoaWxkIGlzIGEgbGluZXN0cmluZyB2ZWN0b3JcbiAgaWYgKCFpc0dlb0Fycm93TGluZVN0cmluZyh0eXBlLmNoaWxkcmVuWzBdLnR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gQXBhY2hlIEFycm93IEpTIHR5cGUgaXMgYSBQb2x5Z29uIGRhdGEgdHlwZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvQXJyb3dNdWx0aVBvbHlnb24odHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gQ2hlY2sgdGhlIG91dGVyIHZlY3RvciBpcyBhIExpc3RcbiAgaWYgKCFEYXRhVHlwZS5pc0xpc3QodHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayB0aGUgY2hpbGQgaXMgYSBwb2x5Z29uIHZlY3RvclxuICBpZiAoIWlzR2VvQXJyb3dQb2x5Z29uKHR5cGUuY2hpbGRyZW5bMF0udHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIFNRTCBxdWVyeSBpcyBhIFNFTEVDVCBxdWVyeSBieSB1c2luZyB0aGUgRVhQTEFJTiBjb21tYW5kLlxuICogQHBhcmFtIGNvbm5lY3Rpb24gVGhlIER1Y2tEQiBjb25uZWN0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHF1ZXJ5IFRoZSBTUUwgcXVlcnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBSZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXJ5IGlzIGEgU0VMRUNUIHN0YXRlbWVudCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0lzU2VsZWN0UXVlcnkoXG4gIGNvbm5lY3Rpb246IERhdGFiYXNlQ29ubmVjdGlvbixcbiAgcXVlcnk6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgRVhQTEFJTiAoJHtxdWVyeX0pYCk7XG4gICAgcmV0dXJuIHJlc3VsdC5udW1Sb3dzID4gMDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGxpdCBhIHN0cmluZyB3aXRoIHBvdGVudGlhbGx5IG11bHRpcGxlIFNRTCBxdWVyaWVzIChzZXBhcmF0ZWQgYXMgdXN1YWwgYnkgJzsnKSBpbnRvIGFuIGFycmF5IG9mIHF1ZXJpZXMuXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uOlxuICogIC0gSGFuZGxlcyBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZWQgc3RyaW5ncyB3aXRoIHByb3BlciBlc2NhcGluZ1xuICogIC0gSWdub3JlcyBzZW1pY29sb25zIGluIGxpbmUgY29tbWVudHMgKC0tKSBhbmQgYmxvY2sgY29tbWVudHMgKHNsYXNoIGFzdGVyaXNrKVxuICogIC0gVHJpbXMgd2hpdGVzcGFjZSBmcm9tIHF1ZXJpZXNcbiAqICAtIEhhbmRsZXMgU1FMLXN0eWxlIGVzY2FwZWQgcXVvdGVzICgnJyBpbnNpZGUgc3RyaW5ncylcbiAqICAtIFJldHVybnMgb25seSBub24tZW1wdHkgcXVlcmllc1xuICogQHBhcmFtIGlucHV0IEEgc3RyaW5nIHdpdGggcG90ZW50aWFsbHkgbXVsdGlwbGUgU1FMIHF1ZXJpZXMuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBxdWVyaWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTcWxTdGF0ZW1lbnRzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHF1ZXJpZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyZW50UXVlcnkgPSAnJztcbiAgbGV0IGluU2luZ2xlUXVvdGUgPSBmYWxzZTtcbiAgbGV0IGluRG91YmxlUXVvdGUgPSBmYWxzZTtcbiAgbGV0IGluTGluZUNvbW1lbnQgPSBmYWxzZTtcbiAgbGV0IGluQmxvY2tDb21tZW50ID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBpbnB1dFtpXTtcblxuICAgIGlmIChpbkxpbmVDb21tZW50KSB7XG4gICAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgICAgIGlmIChjaGFyID09PSAnXFxuJykge1xuICAgICAgICBpbkxpbmVDb21tZW50ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaW5CbG9ja0NvbW1lbnQpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09ICcqJyAmJiBpbnB1dFtpICsgMV0gPT09ICcvJykge1xuICAgICAgICBpbkJsb2NrQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICBjdXJyZW50UXVlcnkgKz0gaW5wdXRbKytpXTsgLy8gQ29uc3VtZSAnLydcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpblNpbmdsZVF1b3RlKSB7XG4gICAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgICAgIGlmIChjaGFyID09PSBcIidcIikge1xuICAgICAgICAvLyBIYW5kbGUgZXNjYXBlZCBzaW5nbGUgcXVvdGVzIGluIFNRTFxuICAgICAgICBpZiAoaSArIDEgPCBpbnB1dC5sZW5ndGggJiYgaW5wdXRbaSArIDFdID09PSBcIidcIikge1xuICAgICAgICAgIGN1cnJlbnRRdWVyeSArPSBpbnB1dFsrK2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluU2luZ2xlUXVvdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGluRG91YmxlUXVvdGUpIHtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyO1xuICAgICAgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgICAgLy8gSGFuZGxlIGVzY2FwZWQgZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoaSArIDEgPCBpbnB1dC5sZW5ndGggJiYgaW5wdXRbaSArIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXJ5ICs9IGlucHV0WysraV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5Eb3VibGVRdW90ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgY29tbWVudCBzdGFydHNcbiAgICBpZiAoY2hhciA9PT0gJy0nICYmIGlucHV0W2kgKyAxXSA9PT0gJy0nKSB7XG4gICAgICBpbkxpbmVDb21tZW50ID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyICsgaW5wdXRbKytpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFyID09PSAnLycgJiYgaW5wdXRbaSArIDFdID09PSAnKicpIHtcbiAgICAgIGluQmxvY2tDb21tZW50ID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRRdWVyeSArPSBjaGFyICsgaW5wdXRbKytpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBxdW90ZSBzdGFydHNcbiAgICBpZiAoY2hhciA9PT0gXCInXCIpIHtcbiAgICAgIGluU2luZ2xlUXVvdGUgPSB0cnVlO1xuICAgICAgY3VycmVudFF1ZXJ5ICs9IGNoYXI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgaW5Eb3VibGVRdW90ZSA9IHRydWU7XG4gICAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBxdWVyeSBzZXBhcmF0b3JcbiAgICBpZiAoY2hhciA9PT0gJzsnKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gY3VycmVudFF1ZXJ5LnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcXVlcmllcy5wdXNoKHRyaW1tZWQpO1xuICAgICAgfVxuICAgICAgY3VycmVudFF1ZXJ5ID0gJyc7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjdXJyZW50UXVlcnkgKz0gY2hhcjtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgZmluYWwgcXVlcnlcbiAgY29uc3QgdHJpbW1lZCA9IGN1cnJlbnRRdWVyeS50cmltKCk7XG4gIGlmICh0cmltbWVkLmxlbmd0aCA+IDApIHtcbiAgICBxdWVyaWVzLnB1c2godHJpbW1lZCk7XG4gIH1cblxuICByZXR1cm4gcXVlcmllcztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIFNRTCBjb21tZW50cyBmcm9tIGEgZ2l2ZW4gU1FMIHN0cmluZy5cbiAqIEBwYXJhbSBzcWwgVGhlIFNRTCBxdWVyeSBzdHJpbmcgZnJvbSB3aGljaCBjb21tZW50cyBzaG91bGQgYmUgcmVtb3ZlZC5cbiAqIEByZXR1cm5zIFRoZSBjbGVhbmVkIFNRTCBzdHJpbmcgd2l0aG91dCBjb21tZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNRTENvbW1lbnRzKHNxbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUmVtb3ZlIG11bHRpLWxpbmUgY29tbWVudHMgKC8qIC4uLiAqLylcbiAgc3FsID0gc3FsLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycpO1xuICAvLyBSZW1vdmUgc2luZ2xlLWxpbmUgY29tbWVudHMgKC0tIC4uLilcbiAgc3FsID0gc3FsLnJlcGxhY2UoLy0tLiokL2dtLCAnJyk7XG4gIHJldHVybiBzcWwudHJpbSgpO1xufVxuXG4vKipcbiAqIERyb3BzIGEgdGFibGUgaWYgaXQgZXhpc3RzIGluIHRoZSBEdWNrREIgZGF0YWJhc2UuXG4gKiBAcGFyYW0gY29ubmVjdGlvbiBUaGUgRHVja0RCIGNvbm5lY3Rpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gdGFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byBkcm9wLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICogQHRocm93cyBMb2dzIGFuIGVycm9yIGlmIHRoZSB0YWJsZSBkcm9wIG9wZXJhdGlvbiBmYWlscy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRyb3BUYWJsZUlmRXhpc3RzID0gYXN5bmMgKGNvbm5lY3Rpb246IERhdGFiYXNlQ29ubmVjdGlvbiwgdGFibGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KGBEUk9QIFRBQkxFIElGIEVYSVNUUyBcIiR7dGFibGVOYW1lfVwiO2ApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Ryb3BwaW5nIHRhYmxlIGZhaWxlZCcsIHRhYmxlTmFtZSwgZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIEltcG9ydHMgYSBmaWxlIGludG8gRHVja0RCIGFzIGEgdGFibGUsIHN1cHBvcnRpbmcgbXVsdGlwbGUgZm9ybWF0cyBmcm9tIFNVUFBPUlRFRF9EVUNLREJfRFJPUF9FWFRFTlNJT05TLlxuICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gYmUgaW1wb3J0ZWQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIHByb2Nlc3NlZCBpbnRvIGEgRHVja0RCIHRhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGFibGVGcm9tRmlsZShmaWxlOiBGaWxlIHwgbnVsbCk6IFByb21pc2U8bnVsbCB8IEVycm9yPiB7XG4gIGlmICghZmlsZSkgcmV0dXJuIG5ldyBFcnJvcignRmlsZSBEcmFnICYgRHJvcDogTm8gZmlsZScpO1xuXG4gIGNvbnN0IGZpbGVFeHQgPSBTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUy5maW5kKGV4dCA9PiBmaWxlLm5hbWUuZW5kc1dpdGgoZXh0KSk7XG4gIGlmICghZmlsZUV4dCkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoXCJGaWxlIERyYWcgJiBEcm9wOiBGaWxlIGV4dGVuc2lvbiBpc24ndCBzdXBwb3J0ZWRcIik7XG4gIH1cblxuICBjb25zdCBkYiA9IGF3YWl0IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZGF0YWJhc2U7XG4gIGlmICghZGIpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKCdUaGUgZGF0YWJhc2UgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuJyk7XG4gIH1cbiAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICBsZXQgZXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBzYW5pdGl6ZUR1Y2tEQlRhYmxlTmFtZShmaWxlLm5hbWUpO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSAndGVtcF9maWxlX2hhbmRsZSc7XG5cbiAgICBjLnF1ZXJ5KGBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICBsb2FkIHNwYXRpYWw7YCk7XG5cbiAgICBpZiAoZmlsZUV4dCA9PT0gJ2Fycm93Jykge1xuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7XG4gICAgICBjb25zdCB1aW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgY29uc3QgYXJyb3dUYWJsZSA9IGFycm93LnRhYmxlRnJvbUlQQyh1aW50OEFycmF5KTtcblxuICAgICAgYXdhaXQgYy5pbnNlcnRBcnJvd1RhYmxlKGFycm93VGFibGUsIHtuYW1lOiB0YWJsZU5hbWV9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlSGFuZGxlKHNvdXJjZU5hbWUsIGZpbGUsIER1Y2tEQkRhdGFQcm90b2NvbC5CUk9XU0VSX0ZJTEVSRUFERVIsIHRydWUpO1xuXG4gICAgICBpZiAoZmlsZUV4dCA9PT0gJ2NzdicpIHtcbiAgICAgICAgYXdhaXQgYy5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGFibGVOYW1lfScgQVNcbiAgICAgICAgICAgIFNFTEVDVCAqXG4gICAgICAgICAgICBGUk9NIHJlYWRfY3N2KCcke3NvdXJjZU5hbWV9JywgaGVhZGVyID0gdHJ1ZSwgYXV0b19kZXRlY3QgPSB0cnVlLCBzYW1wbGVfc2l6ZSA9IC0xKTtcbiAgICAgICAgICBgKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsZUV4dCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGF3YWl0IGMucXVlcnkoYFxuICAgICAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RhYmxlTmFtZX0nIEFTXG4gICAgICAgICAgICBTRUxFQ1QgKlxuICAgICAgICAgICAgRlJPTSByZWFkX2pzb25fYXV0bygnJHtzb3VyY2VOYW1lfScpO1xuICAgICAgICAgIGApO1xuICAgICAgfSBlbHNlIGlmIChmaWxlRXh0ID09PSAnZ2VvanNvbicpIHtcbiAgICAgICAgYXdhaXQgYy5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGFibGVOYW1lfScgQVNcbiAgICAgICAgICAgIFNFTEVDVCAqXG4gICAgICAgICAgICBGUk9NIFNUX1JFQUQoJyR7c291cmNlTmFtZX0nLCBrZWVwX3drYiA9IFRSVUUpO1xuICAgICAgICAgIGApO1xuICAgICAgfSBlbHNlIGlmIChmaWxlRXh0ID09PSAncGFycXVldCcpIHtcbiAgICAgICAgYXdhaXQgYy5xdWVyeShgXG4gICAgICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGFibGVOYW1lfScgQVNcbiAgICAgICAgICAgIFNFTEVDVCAqXG4gICAgICAgICAgICBGUk9NIHJlYWRfcGFycXVldCgnJHtzb3VyY2VOYW1lfScpXG4gICAgICAgICAgYCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvckRhdGEpIHtcbiAgICBpZiAoZXJyb3JEYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvckRhdGEubWVzc2FnZSB8fCAnJztcbiAgICAgIC8vIG91dHB1dCBtb3JlIHJlYWRhYmxlIGVycm9ycyBmb3Iga25vd24gaXNzdWVzXG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnQXJyb3cgVHlwZSB3aXRoIGV4dGVuc2lvbiBuYW1lOiBnZW9hcnJvdycpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICdUaGUgR2VvQXJyb3cgZXh0ZW5zaW9ucyBhcmUgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb25uZWN0ZWQgRHVja0RCIHZlcnNpb24uJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiR2VvcGFycXVldCBjb2x1bW4gJ2dlb21ldHJ5JyBkb2VzIG5vdCBoYXZlIGdlb21ldHJ5IHR5cGVzXCIpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIElucHV0IEVycm9yOiBHZW9wYXJxdWV0IGNvbHVtbiAnZ2VvbWV0cnknIGRvZXMgbm90IGhhdmUgZ2VvbWV0cnkgdHlwZXMuXG5Qb3NzaWJsZSByZWFzb25zOlxuICAtIE9sZCAucGFycXVldCBmaWxlcyB0aGF0IGRvbid0IG1hdGNoIHRoZSBQYXJxdWV0IGZvcm1hdCBzcGVjaWZpY2F0aW9uLlxuICAtIFVuc3VwcG9ydGVkIGNvbXByZXNzaW9uLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBlcnJvciA9IGVycm9yRGF0YSBhcyBFcnJvcjtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBjLmNsb3NlKCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG4vKipcbiAqIFNhbml0aXplcyBhIGZpbGUgbmFtZSB0byBiZSBhIHZhbGlkIER1Y2tEQiB0YWJsZSBuYW1lLlxuICogQHBhcmFtIGZpbGVOYW1lIFRoZSBpbnB1dCBmaWxlIG5hbWUgdG8gYmUgc2FuaXRpemVkLlxuICogQHJldHVybnMgQSB2YWxpZCBEdWNrREIgdGFibGUgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplRHVja0RCVGFibGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZXBsYWNlIGludmFsaWQgY2hhcmFjdGVycyB3aXRoIHVuZGVyc2NvcmVzXG4gIGxldCBuYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAnXycpO1xuICAvLyBFbnN1cmUgaXQgZG9lc24ndCBzdGFydCB3aXRoIGEgZGlnaXRcbiAgaWYgKC9eXFxkLy50ZXN0KG5hbWUpKSB7XG4gICAgbmFtZSA9IGB0XyR7bmFtZX1gO1xuICB9XG4gIHJldHVybiBuYW1lIHx8ICdkZWZhdWx0X3RhYmxlJztcbn1cbiJdLCJtYXBwaW5n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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/duckdb",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.2",
5
5
  "description": "DuckDB plugin for Kepler.gl",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -26,11 +26,11 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "@duckdb/duckdb-wasm": "^1.28.0",
29
- "@kepler.gl/common-utils": "3.2.0",
30
- "@kepler.gl/constants": "3.2.0",
31
- "@kepler.gl/processors": "3.2.0",
32
- "@kepler.gl/table": "3.2.0",
33
- "@kepler.gl/types": "3.2.0",
29
+ "@kepler.gl/common-utils": "3.2.2",
30
+ "@kepler.gl/constants": "3.2.2",
31
+ "@kepler.gl/processors": "3.2.2",
32
+ "@kepler.gl/table": "3.2.2",
33
+ "@kepler.gl/types": "3.2.2",
34
34
  "@monaco-editor/react": "^4.6.0",
35
35
  "@radix-ui/react-collapsible": "^1.1.0",
36
36
  "apache-arrow": ">=15.0.0",
@@ -111,7 +111,11 @@ export function castDuckDBTypesForKepler(
111
111
  const quotedColumnName = quoteColumnName(name);
112
112
  if (type === 'GEOMETRY' && options.geometryToWKB) {
113
113
  return `ST_AsWKB(${quotedColumnName}) as ${quotedColumnName}`;
114
- } else if (type === 'BIGINT' && options.bigIntToDouble) {
114
+ } else if (
115
+ options.bigIntToDouble &&
116
+ (type === 'BIGINT' || type === 'UBIGINT' || type === 'HUGEINT' || type === 'UHUGEINT')
117
+ ) {
118
+ // Cast 64-bit and larger integer types to DOUBLE to avoid BigInt in JS
115
119
  return `CAST(${quotedColumnName} AS DOUBLE) as ${quotedColumnName}`;
116
120
  }
117
121
  return quotedColumnName;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/effects",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.2",
5
5
  "description": "kepler.gl viaual effects",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,10 +31,10 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
- "@kepler.gl/common-utils": "3.2.0",
35
- "@kepler.gl/constants": "3.2.0",
36
- "@kepler.gl/types": "3.2.0",
37
- "@kepler.gl/utils": "3.2.0",
34
+ "@kepler.gl/common-utils": "3.2.2",
35
+ "@kepler.gl/constants": "3.2.2",
36
+ "@kepler.gl/types": "3.2.2",
37
+ "@kepler.gl/utils": "3.2.2",
38
38
  "@luma.gl/core": "^8.5.20",
39
39
  "@luma.gl/shadertools": "^8.5.20",
40
40
  "moment-timezone": "^0.5.35",
@@ -18,8 +18,8 @@ exports.groupColumnsAsGeoJson = groupColumnsAsGeoJson;
18
18
  exports.parseGeoJsonRawFeature = parseGeoJsonRawFeature;
19
19
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
20
20
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
21
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
22
21
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
23
  var _buffer = require("buffer");
24
24
  var _geojsonNormalize = _interopRequireDefault(require("@mapbox/geojson-normalize"));
25
25
  var _bbox = _interopRequireDefault(require("@turf/bbox"));
@@ -63,17 +63,35 @@ function fieldIsGeoArrow(geoField) {
63
63
  }
64
64
  function parseGeoJsonRawFeature(rawFeature) {
65
65
  var properties = null; // help ensure that properties is present on the returned geojson feature
66
+ // Support WKB geometry provided as binary (e.g., from Parquet/GeoParquet)
67
+ if (rawFeature instanceof Uint8Array || rawFeature instanceof ArrayBuffer) {
68
+ try {
69
+ var binaryInput = rawFeature instanceof ArrayBuffer ? rawFeature : rawFeature.buffer.slice(rawFeature.byteOffset, rawFeature.byteOffset + rawFeature.byteLength);
70
+ var binaryGeo = (0, _core.parseSync)(binaryInput, _wkt.WKBLoader);
71
+ // @ts-expect-error loaders.gl binary type to GeoJSON geometry
72
+ var parsedGeo = (0, _gis.binaryToGeometry)(binaryGeo);
73
+ var normalized = (0, _geojsonNormalize["default"])(parsedGeo);
74
+ if (!normalized || !Array.isArray(normalized.features) || !normalized.features.length) {
75
+ return null;
76
+ }
77
+ return _objectSpread({
78
+ properties: properties
79
+ }, normalized.features[0]);
80
+ } catch (e) {
81
+ return null;
82
+ }
83
+ }
66
84
  if ((0, _typeof2["default"])(rawFeature) === 'object') {
67
85
  // Support GeoJson feature as object
68
86
  // probably need to normalize it as well
69
- var normalized = (0, _geojsonNormalize["default"])(rawFeature);
70
- if (!normalized || !Array.isArray(normalized.features)) {
87
+ var _normalized = (0, _geojsonNormalize["default"])(rawFeature);
88
+ if (!_normalized || !Array.isArray(_normalized.features)) {
71
89
  // fail to normalize GeoJson
72
90
  return null;
73
91
  }
74
92
  return _objectSpread({
75
93
  properties: properties
76
- }, normalized.features[0]);
94
+ }, _normalized.features[0]);
77
95
  } else if (typeof rawFeature === 'string') {
78
96
  var parsedGeometry = parseGeometryFromString(rawFeature);
79
97
  if (!parsedGeometry) return null;
@@ -425,4 +443,4 @@ function applyFiltersToTableColumns(dataset, dataToFeature) {
425
443
  }
426
444
  return filteredFeatures;
427
445
  }
428
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVmZmVyIiwicmVxdWlyZSIsIl9nZW9qc29uTm9ybWFsaXplIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9iYm94IiwiX2QzQXJyYXkiLCJfY2VudGVyIiwiX2NvcmUiLCJfd2t0IiwiX2dpcyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJVdGlscyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkNPTFVNTl9NT0RFX0dFT0pTT04iLCJleHBvcnRzIiwiRmVhdHVyZVR5cGVzIiwiZmllbGRJc0dlb0Fycm93IiwiZ2VvRmllbGQiLCJfZ2VvRmllbGQkbWV0YWRhdGEiLCJCb29sZWFuIiwibWV0YWRhdGEiLCJnZXQiLCJwYXJzZUdlb0pzb25SYXdGZWF0dXJlIiwicmF3RmVhdHVyZSIsInByb3BlcnRpZXMiLCJfdHlwZW9mMiIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsInBhcnNlZEdlb21ldHJ5IiwicGFyc2VHZW9tZXRyeUZyb21TdHJpbmciLCJ0eXBlIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsIm1hcCIsInB0cyIsImdldEdlb2pzb25MYXllck1ldGEiLCJfcmVmIiwiZGF0YUNvbnRhaW5lciIsImdldEZlYXR1cmUiLCJjb25maWciLCJkYXRhVG9GZWF0dXJlIiwiY29sdW1uTW9kZSIsImdldEdlb2pzb25EYXRhTWFwcyIsImdyb3VwQ29sdW1uc0FzR2VvSnNvbiIsImNvbHVtbnMiLCJib3VuZHMiLCJnZXRHZW9qc29uQm91bmRzIiwiZml4ZWRSYWRpdXMiLCJmaW5kIiwiZCIsIl9kJHByb3BlcnRpZXMiLCJyYWRpdXMiLCJmZWF0dXJlVHlwZXMiLCJnZXRHZW9qc29uRmVhdHVyZVR5cGVzIiwibWVhbkNlbnRlcnMiLCJpIiwiZmVhdHVyZSIsImNlbnQiLCJjZW50ZXIiLCJjZW50cm9pZHMiLCJhY2NlcHRhYmxlVHlwZXMiLCJpbmRleCIsIm51bVJvd3MiLCJpbmNsdWRlcyIsImNsZWFuZWQiLCJnZXRHZW9qc29uUG9pbnREYXRhTWFwcyIsInJvd0FzQXJyYXkiLCJnZW9tZXRyaWVzIiwicmVkdWNlIiwiYWNjdSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJnZW9TdHJpbmciLCJwYXJzZWRHZW8iLCJKU09OIiwicGFyc2UiLCJwYXJzZVN5bmMiLCJXS1RMb2FkZXIiLCJidWZmZXIiLCJCdWZmZXIiLCJiaW5hcnlHZW8iLCJXS0JMb2FkZXIiLCJiaW5hcnlUb0dlb21ldHJ5IiwidW5kZWZpbmVkIiwibWF4Q291bnQiLCJzYW1wbGVzIiwiZ2V0U2FtcGxlRGF0YSIsInZhbGlkU2luZ2xlR2VvbWV0cnkiLCJnZW9tIiwidmFsaWRHZW9tZXRyeUNvbGxlY3Rpb24iLCJldmVyeSIsIm5vbkVtcHR5IiwiYmJveCIsImZlYXR1cmVUb0RlY2tHbEdlb1R5cGUiLCJQb2ludCIsIk11bHRpUG9pbnQiLCJMaW5lU3RyaW5nIiwiTXVsdGlMaW5lU3RyaW5nIiwiUG9seWdvbiIsIk11bHRpUG9seWdvbiIsImFsbEZlYXR1cmVzIiwiZ2VvVHlwZSIsInNvcnRCeUNvbHVtbiIsImdyb3VwZWRCeUlkIiwic29ydEJ5RmllbGRJZHgiLCJmaWVsZElkeCIsInNvcnRCeVJlcXVpcmVkIiwib3B0aW9uYWwiLCJkYXR1bSIsImlkIiwibGF0IiwibG9uIiwibG5nIiwiYWx0aXR1ZGUiLCJzb3J0QnkiLCJjb29yZHMiLCJkYXR1bUluZGV4IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJyZXN1bHQiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5MiIsIl8iLCJpdGVtcyIsInNvcnQiLCJiIiwiYXNjZW5kaW5nIiwidmFsdWVzIiwiaXRlbSIsImRldGVjdFRhYmxlQ29sdW1ucyIsImRhdGFzZXQiLCJsYXllckNvbHVtbnMiLCJmaWVsZHMiLCJmaWVsZFBhaXJzIiwiZmluZEluZGV4IiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiaWRGaWVsZElkeCIsIl9mJG5hbWUiLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoIiwicG9pbnRDb2x1bW5zIiwiYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbiIsImNvbCIsIl9wb2ludENvbHVtbnMkY29sIiwiZ2VvanNvbiIsImxhYmVsIiwiZGVmYXVsdE5hbWUiLCJhcHBseUZpbHRlcnNUb1RhYmxlQ29sdW1ucyIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJlZEluZGV4U2V0IiwiU2V0IiwiZmlsdGVyZWRGZWF0dXJlcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZmlsdGVyZWRDb29yZHMiLCJjIiwiaGFzIiwiZXJyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlb2pzb24tbGF5ZXIvZ2VvanNvbi11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0J1ZmZlcn0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7RmVhdHVyZSwgUG9zaXRpb24sIEJCb3h9IGZyb20gJ2dlb2pzb24nO1xuaW1wb3J0IG5vcm1hbGl6ZSBmcm9tICdAbWFwYm94L2dlb2pzb24tbm9ybWFsaXplJztcbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHthc2NlbmRpbmd9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBjZW50ZXIgZnJvbSAnQHR1cmYvY2VudGVyJztcbmltcG9ydCB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQge3BhcnNlU3luY30gZnJvbSAnQGxvYWRlcnMuZ2wvY29yZSc7XG5pbXBvcnQge1dLQkxvYWRlciwgV0tUTG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC93a3QnO1xuaW1wb3J0IHtiaW5hcnlUb0dlb21ldHJ5fSBmcm9tICdAbG9hZGVycy5nbC9naXMnO1xuaW1wb3J0IHtCaW5hcnlGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSAnQGxvYWRlcnMuZ2wvc2NoZW1hJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgZ2V0U2FtcGxlRGF0YX0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMYXllckNvbHVtbnMsIFByb3RvRGF0YXNldEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge0dlb2pzb25MYXllck1ldGFQcm9wcywgYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbn0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtMYXllckJhc2VDb25maWd9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuXG5leHBvcnQgdHlwZSBHZXRGZWF0dXJlID0gKGQ6IGFueSkgPT4gRmVhdHVyZTtcbmV4cG9ydCB0eXBlIEdlb2pzb25EYXRhTWFwcyA9IChGZWF0dXJlIHwgQmluYXJ5RmVhdHVyZUNvbGxlY3Rpb24gfCBudWxsKVtdO1xuZXhwb3J0IHR5cGUgR2VvanNvblBvaW50RGF0YU1hcHMgPSAobnVtYmVyW10gfCBudW1iZXJbXVtdIHwgbnVsbClbXTtcblxuZXhwb3J0IGNvbnN0IENPTFVNTl9NT0RFX0dFT0pTT04gPSAnZ2VvanNvbic7XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBUT0RPOiBSZS1lbmFibGUgZXNsaW50IHdoZW4gd2UgdXBncmFkZSB0byBoYW5kbGUgZW51bXMgYW5kIHR5cGUgbWFwc1xuZXhwb3J0IGVudW0gRmVhdHVyZVR5cGVzIHtcbiAgUG9pbnQgPSAnUG9pbnQnLFxuICBNdWx0aVBvaW50ID0gJ011bHRpUG9pbnQnLFxuICBMaW5lU3RyaW5nID0gJ0xpbmVTdHJpbmcnLFxuICBNdWx0aUxpbmVTdHJpbmcgPSAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgUG9seWdvbiA9ICdQb2x5Z29uJyxcbiAgTXVsdGlQb2x5Z29uID0gJ011bHRpUG9seWdvbidcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciByZXR1cm4gdHlwZSBvZiBnZXRHZW9qc29uRmVhdHVyZVR5cGVzID9cbnR5cGUgRmVhdHVyZVR5cGVNYXAgPSB7XG4gIFtrZXkgaW4gRmVhdHVyZVR5cGVzXTogYm9vbGVhbjtcbn07XG5cbi8qIGVzbGludC1lbmFibGUgKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGhhcyBnZW9hcnJvdyBleHRlbnNpb24uXG4gKiBAcGFyYW0gZ2VvRmllbGQgQSBmaWVsZCB0byB0ZXN0LlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSXNHZW9BcnJvdyhnZW9GaWVsZD86IFByb3RvRGF0YXNldEZpZWxkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihnZW9GaWVsZD8ubWV0YWRhdGE/LmdldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdlb0pzb25SYXdGZWF0dXJlKHJhd0ZlYXR1cmU6IHVua25vd24pOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsOyAvLyBoZWxwIGVuc3VyZSB0aGF0IHByb3BlcnRpZXMgaXMgcHJlc2VudCBvbiB0aGUgcmV0dXJuZWQgZ2VvanNvbiBmZWF0dXJlXG4gIGlmICh0eXBlb2YgcmF3RmVhdHVyZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBTdXBwb3J0IEdlb0pzb24gZmVhdHVyZSBhcyBvYmplY3RcbiAgICAvLyBwcm9iYWJseSBuZWVkIHRvIG5vcm1hbGl6ZSBpdCBhcyB3ZWxsXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZShyYXdGZWF0dXJlKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZC5mZWF0dXJlcykpIHtcbiAgICAgIC8vIGZhaWwgdG8gbm9ybWFsaXplIEdlb0pzb25cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7cHJvcGVydGllcywgLi4ubm9ybWFsaXplZC5mZWF0dXJlc1swXX07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHJhd0ZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgcGFyc2VkR2VvbWV0cnkgPSBwYXJzZUdlb21ldHJ5RnJvbVN0cmluZyhyYXdGZWF0dXJlKTtcbiAgICBpZiAoIXBhcnNlZEdlb21ldHJ5KSByZXR1cm4gbnVsbDtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHZlcmlmeSB3aGV0aGVyIHBhcnNlZEdlb21ldHJ5IGFsd2F5cyBjb250YWlucyBwcm9wZXJ0aWVzXG4gICAgcmV0dXJuIHtwcm9wZXJ0aWVzLCAuLi5wYXJzZWRHZW9tZXRyeX07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyYXdGZWF0dXJlKSkge1xuICAgIC8vIFN1cHBvcnQgR2VvSnNvbiAgTGluZVN0cmluZyBhcyBhbiBhcnJheSBvZiBwb2ludHNcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0ZlYXR1cmUnLFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgLy8gd2h5IGRvIHdlIG5lZWQgdG8gZmxpcCBpdC4uLlxuICAgICAgICBjb29yZGluYXRlczogcmF3RmVhdHVyZS5tYXAocHRzID0+IFtwdHNbMV0sIHB0c1swXV0pLFxuICAgICAgICB0eXBlOiAnTGluZVN0cmluZydcbiAgICAgIH0sXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvbkxheWVyTWV0YSh7XG4gIGRhdGFDb250YWluZXIsXG4gIGdldEZlYXR1cmUsXG4gIGNvbmZpZ1xufToge1xuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBnZXRGZWF0dXJlOiBHZXRGZWF0dXJlO1xuICBjb25maWc6IExheWVyQmFzZUNvbmZpZztcbn0pOiBHZW9qc29uTGF5ZXJNZXRhUHJvcHMge1xuICBjb25zdCBkYXRhVG9GZWF0dXJlID1cbiAgICBjb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfR0VPSlNPTlxuICAgICAgPyBnZXRHZW9qc29uRGF0YU1hcHMoZGF0YUNvbnRhaW5lciwgZ2V0RmVhdHVyZSlcbiAgICAgIDogLy8gQ09MVU1OX01PREVfVEFCTEVcbiAgICAgICAgZ3JvdXBDb2x1bW5zQXNHZW9Kc29uKGRhdGFDb250YWluZXIsIGNvbmZpZy5jb2x1bW5zLCAnc29ydEJ5Jyk7XG5cbiAgLy8gZ2V0IGJvdW5kcyBmcm9tIGZlYXR1cmVzXG4gIGNvbnN0IGJvdW5kcyA9IGdldEdlb2pzb25Cb3VuZHMoZGF0YVRvRmVhdHVyZSk7XG4gIC8vIGlmIGFueSBvZiB0aGUgZmVhdHVyZSBoYXMgcHJvcGVydGllcy5yYWRpdXMgc2V0IHRvIGJlIHRydWVcbiAgY29uc3QgZml4ZWRSYWRpdXMgPSBCb29sZWFuKFxuICAgIGRhdGFUb0ZlYXR1cmUuZmluZChkID0+IGQgJiYgJ3Byb3BlcnRpZXMnIGluIGQgJiYgZC5wcm9wZXJ0aWVzPy5yYWRpdXMpXG4gICk7XG5cbiAgLy8ga2VlcCBhIHJlY29yZCBvZiB3aGF0IHR5cGUgb2YgZ2VvbWV0cnkgdGhlIGNvbGxlY3Rpb24gaGFzXG4gIGNvbnN0IGZlYXR1cmVUeXBlcyA9IGdldEdlb2pzb25GZWF0dXJlVHlwZXMoZGF0YVRvRmVhdHVyZSk7XG5cbiAgY29uc3QgbWVhbkNlbnRlcnM6IEFycmF5PG51bWJlcltdIHwgbnVsbD4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhVG9GZWF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZmVhdHVyZSA9IGRhdGFUb0ZlYXR1cmVbaV07XG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRPRE86IHVzZSBsaW5lIGludGVycG9sYXRlIHRvIGdldCBjZW50ZXIgb2YgbGluZSBmb3IgTGluZVN0cmluZ1xuICAgICAgICBjb25zdCBjZW50ID0gY2VudGVyKGZlYXR1cmUgYXMgQWxsR2VvSlNPTik7XG4gICAgICAgIG1lYW5DZW50ZXJzLnB1c2goY2VudC5nZW9tZXRyeS5jb29yZGluYXRlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG1lYW5DZW50ZXJzLnB1c2gobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhVG9GZWF0dXJlLFxuICAgIGJvdW5kcyxcbiAgICBmaXhlZFJhZGl1cyxcbiAgICBmZWF0dXJlVHlwZXMsXG4gICAgY2VudHJvaWRzOiBtZWFuQ2VudGVyc1xuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlIHJhdyBkYXRhIHRvIEdlb0pzb24gZmVhdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvbkRhdGFNYXBzKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBnZXRGZWF0dXJlOiBHZXRGZWF0dXJlXG4pOiBHZW9qc29uRGF0YU1hcHMge1xuICBjb25zdCBhY2NlcHRhYmxlVHlwZXMgPSBbXG4gICAgJ1BvaW50JyxcbiAgICAnTXVsdGlQb2ludCcsXG4gICAgJ0xpbmVTdHJpbmcnLFxuICAgICdNdWx0aUxpbmVTdHJpbmcnLFxuICAgICdQb2x5Z29uJyxcbiAgICAnTXVsdGlQb2x5Z29uJyxcbiAgICAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xuICBdO1xuXG4gIGNvbnN0IGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25EYXRhTWFwcyA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTsgaW5kZXgrKykge1xuICAgIGNvbnN0IGZlYXR1cmUgPSBwYXJzZUdlb0pzb25SYXdGZWF0dXJlKGdldEZlYXR1cmUoe2luZGV4fSkpO1xuXG4gICAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5nZW9tZXRyeSAmJiBhY2NlcHRhYmxlVHlwZXMuaW5jbHVkZXMoZmVhdHVyZS5nZW9tZXRyeS50eXBlKSkge1xuICAgICAgY29uc3QgY2xlYW5lZCA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgLy8gc3RvcmUgaW5kZXggb2YgdGhlIGRhdGEgaW4gZmVhdHVyZSBwcm9wZXJ0aWVzXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW5kZXhcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZGF0YVRvRmVhdHVyZVtpbmRleF0gPSBjbGVhbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhVG9GZWF0dXJlW2luZGV4XSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGFUb0ZlYXR1cmU7XG59XG5cbi8qKlxuICogUGFyc2UgcmF3IGRhdGEgdG8gR2VvSnNvbiBwb2ludCBmZWF0dXJlIGNvb3JkaW5hdGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW9qc29uUG9pbnREYXRhTWFwcyhcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgZ2V0RmVhdHVyZTogR2V0RmVhdHVyZVxuKTogR2VvanNvblBvaW50RGF0YU1hcHMge1xuICBjb25zdCBhY2NlcHRhYmxlVHlwZXMgPSBbJ1BvaW50JywgJ011bHRpUG9pbnQnLCAnR2VvbWV0cnlDb2xsZWN0aW9uJ107XG5cbiAgY29uc3QgZGF0YVRvRmVhdHVyZTogR2VvanNvblBvaW50RGF0YU1hcHMgPSBbXTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7IGluZGV4KyspIHtcbiAgICBjb25zdCBmZWF0dXJlID0gcGFyc2VHZW9Kc29uUmF3RmVhdHVyZShnZXRGZWF0dXJlKGRhdGFDb250YWluZXIucm93QXNBcnJheShpbmRleCkpKTtcblxuICAgIGlmIChmZWF0dXJlICYmIGZlYXR1cmUuZ2VvbWV0cnkgJiYgYWNjZXB0YWJsZVR5cGVzLmluY2x1ZGVzKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSkpIHtcbiAgICAgIGRhdGFUb0ZlYXR1cmVbaW5kZXhdID1cbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS50eXBlID09PSAnUG9pbnQnIHx8IGZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9pbnQnXG4gICAgICAgICAgPyBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzXG4gICAgICAgICAgOiAvLyBAdHMtZXhwZWN0LWVycm9yIFByb3BlcnR5ICdnZW9tZXRyaWVzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdMaW5lU3RyaW5nJ1xuICAgICAgICAgICAgKGZlYXR1cmUuZ2VvbWV0cnkuZ2VvbWV0cmllcyB8fCBbXSkucmVkdWNlKChhY2N1LCBmKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgICAgICAgICBhY2N1LnB1c2goZi5jb29yZGluYXRlcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgICAgICBhY2N1LnB1c2goLi4uZi5jb29yZGluYXRlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVRvRmVhdHVyZVtpbmRleF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhVG9GZWF0dXJlO1xufVxuXG4vKipcbiAqIFBhcnNlIGdlb2pzb24gZnJvbSBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBnZW9TdHJpbmdcbiAqIEByZXR1cm5zIHtudWxsIHwgT2JqZWN0fSBnZW9qc29uIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICovXG5mdW5jdGlvbiBwYXJzZUdlb21ldHJ5RnJvbVN0cmluZyhnZW9TdHJpbmc6IHN0cmluZyk6IEZlYXR1cmUgfCBudWxsIHtcbiAgbGV0IHBhcnNlZEdlbztcblxuICAvLyB0cnkgcGFyc2UgYXMgZ2VvanNvbiBzdHJpbmdcbiAgLy8ge1widHlwZVwiOlwiUG9seWdvblwiLFwiY29vcmRpbmF0ZXNcIjpbW1stNzQuMTU4NDkxLDQwLjgzNTk0XV1dfVxuICB0cnkge1xuICAgIHBhcnNlZEdlbyA9IEpTT04ucGFyc2UoZ2VvU3RyaW5nKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGtlZXAgdHJ5aW5nIHRvIHBhcnNlXG4gIH1cblxuICAvLyB0cnkgcGFyc2UgYXMgd2t0IHVzaW5nIGxvYWRlcnMuZ2wgV0tUTG9hZGVyXG4gIGlmICghcGFyc2VkR2VvKSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZEdlbyA9IHBhcnNlU3luYyhnZW9TdHJpbmcsIFdLVExvYWRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJ5IHBhcnNlIGFzIHdrYiB1c2luZyBsb2FkZXJzLmdsIFdLQkxvYWRlclxuICBpZiAoIXBhcnNlZEdlbykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShnZW9TdHJpbmcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGJpbmFyeUdlbyA9IHBhcnNlU3luYyhidWZmZXIsIFdLQkxvYWRlcik7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBwYXJzZWRHZW8gPSBiaW5hcnlUb0dlb21ldHJ5KGJpbmFyeUdlbyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXJzZWRHZW8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUocGFyc2VkR2VvKTtcblxuICBpZiAoIW5vcm1hbGl6ZWQgfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZC5mZWF0dXJlcykpIHtcbiAgICAvLyBmYWlsIHRvIG5vcm1hbGl6ZSBnZW9qc29uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZC5mZWF0dXJlc1swXTtcbn1cblxuLyoqXG4gKiBHZXQgZ2VvanNvbiBib3VuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25Cb3VuZHMoZmVhdHVyZXM6IEdlb2pzb25EYXRhTWFwcyA9IFtdKTogQkJveCB8IG51bGwge1xuICAvLyA3MCBtcyBmb3IgMTAsMDAwIHBvbHlnb25zXG4gIC8vIGhlcmUgd2Ugb25seSBwaWNrIGNvdXBsZVxuICBjb25zdCBtYXhDb3VudCA9IDEwMDAwO1xuICBjb25zdCBzYW1wbGVzID0gZmVhdHVyZXMubGVuZ3RoID4gbWF4Q291bnQgPyBnZXRTYW1wbGVEYXRhKGZlYXR1cmVzLCBtYXhDb3VudCkgOiBmZWF0dXJlcztcblxuICBjb25zdCB2YWxpZFNpbmdsZUdlb21ldHJ5ID0gZ2VvbSA9PiBnZW9tLmNvb3JkaW5hdGVzICYmIGdlb20uY29vcmRpbmF0ZXMubGVuZ3RoO1xuICBjb25zdCB2YWxpZEdlb21ldHJ5Q29sbGVjdGlvbiA9IGdlb20gPT5cbiAgICBnZW9tLmdlb21ldHJpZXMgJiYgZ2VvbS5nZW9tZXRyaWVzLmxlbmd0aCAmJiBnZW9tLmdlb21ldHJpZXMuZXZlcnkodmFsaWRTaW5nbGVHZW9tZXRyeSk7XG4gIGNvbnN0IG5vbkVtcHR5ID0gc2FtcGxlcy5maWx0ZXIoXG4gICAgZCA9PiBkICYmIGQuZ2VvbWV0cnkgJiYgKHZhbGlkU2luZ2xlR2VvbWV0cnkoZC5nZW9tZXRyeSkgfHwgdmFsaWRHZW9tZXRyeUNvbGxlY3Rpb24oZC5nZW9tZXRyeSkpXG4gICk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmJveCh7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IG5vbkVtcHR5XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmVhdHVyZVRvRGVja0dsR2VvVHlwZSA9IHtcbiAgUG9pbnQ6ICdwb2ludCcsXG4gIE11bHRpUG9pbnQ6ICdwb2ludCcsXG4gIExpbmVTdHJpbmc6ICdsaW5lJyxcbiAgTXVsdGlMaW5lU3RyaW5nOiAnbGluZScsXG4gIFBvbHlnb246ICdwb2x5Z29uJyxcbiAgTXVsdGlQb2x5Z29uOiAncG9seWdvbidcbn07XG5cbmV4cG9ydCB0eXBlIERlY2tHbEdlb1R5cGVzID0ge1xuICBwb2ludDogYm9vbGVhbjtcbiAgbGluZTogYm9vbGVhbjtcbiAgcG9seWdvbjogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUGFyc2UgZ2VvanNvbiBmcm9tIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyhhbGxGZWF0dXJlczogR2VvanNvbkRhdGFNYXBzKTogRGVja0dsR2VvVHlwZXMge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNvbWUgdGVzdCBjYXNlcyBvbmx5IGhhdmUgMSBnZW90eXBlXG4gIGNvbnN0IGZlYXR1cmVUeXBlczogRGVja0dsR2VvVHlwZXMgPSB7fTtcbiAgZm9yIChsZXQgZiA9IDA7IGYgPCBhbGxGZWF0dXJlcy5sZW5ndGg7IGYrKykge1xuICAgIGNvbnN0IGZlYXR1cmUgPSBhbGxGZWF0dXJlc1tmXTtcbiAgICBpZiAoZmVhdHVyZSAmJiAnZ2VvbWV0cnknIGluIGZlYXR1cmUpIHtcbiAgICAgIGNvbnN0IGdlb1R5cGUgPSBmZWF0dXJlVG9EZWNrR2xHZW9UeXBlW2ZlYXR1cmUuZ2VvbWV0cnkgJiYgZmVhdHVyZS5nZW9tZXRyeS50eXBlXTtcbiAgICAgIGlmIChnZW9UeXBlKSB7XG4gICAgICAgIGZlYXR1cmVUeXBlc1tnZW9UeXBlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZlYXR1cmVUeXBlcztcbn1cblxudHlwZSBDb29yZHNUeXBlID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciB8IG51bGxdICYge1xuICBkYXR1bUluZGV4OiBudW1iZXI7XG4gIGRhdHVtOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cENvbHVtbnNBc0dlb0pzb24oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgc29ydEJ5Q29sdW1uID0gJ3RpbWVzdGFtcCdcbik6IEZlYXR1cmVbXSB7XG4gIGNvbnN0IGdyb3VwZWRCeUlkOiB7W2tleTogc3RyaW5nXTogQ29vcmRzVHlwZVtdfSA9IHt9O1xuICBjb25zdCBzb3J0QnlGaWVsZElkeCA9IGNvbHVtbnNbc29ydEJ5Q29sdW1uXS5maWVsZElkeDtcbiAgY29uc3Qgc29ydEJ5UmVxdWlyZWQgPSAhY29sdW1uc1tzb3J0QnlDb2x1bW5dLm9wdGlvbmFsO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7IGluZGV4KyspIHtcbiAgICAvLyBub3RlOiBjYW4gbWF0ZXJpYWxpemUgdGhlIHJvd1xuICAgIGNvbnN0IGRhdHVtID0gZGF0YUNvbnRhaW5lci5yb3dBc0FycmF5KGluZGV4KTtcbiAgICBjb25zdCBpZCA9IGRhdHVtW2NvbHVtbnMuaWQuZmllbGRJZHhdO1xuICAgIGNvbnN0IGxhdCA9IGRhdHVtW2NvbHVtbnMubGF0LmZpZWxkSWR4XTtcbiAgICBjb25zdCBsb24gPSBkYXR1bVtjb2x1bW5zLmxuZy5maWVsZElkeF07XG4gICAgY29uc3QgYWx0aXR1ZGUgPSBjb2x1bW5zLmFsdGl0dWRlID8gZGF0dW1bY29sdW1ucy5hbHRpdHVkZS5maWVsZElkeF0gOiAwO1xuICAgIGNvbnN0IHNvcnRCeSA9IHNvcnRCeUZpZWxkSWR4ID4gLTEgPyBkYXR1bVtzb3J0QnlGaWVsZElkeF0gOiBudWxsO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBjb25zdCBjb29yZHM6IENvb3Jkc1R5cGUgPSBbbG9uLCBsYXQsIGFsdGl0dWRlLCBzb3J0QnldO1xuICAgIC8vIEFkZGluZyByZWZlcmVuY2VzIHRvIHRoZSBvcmlnaW5hbCBkYXRhIHRvIHRoZSBjb29yZGluYXRlcyBhcnJheVxuICAgIGNvb3Jkcy5kYXR1bUluZGV4ID0gaW5kZXg7XG4gICAgY29vcmRzLmRhdHVtID0gZGF0dW07XG4gICAgaWYgKCFncm91cGVkQnlJZFtpZF0pIGdyb3VwZWRCeUlkW2lkXSA9IFtdO1xuXG4gICAgaWYgKFxuICAgICAgTnVtYmVyLmlzRmluaXRlKGxvbikgJiZcbiAgICAgIE51bWJlci5pc0Zpbml0ZShsYXQpICYmXG4gICAgICAoIXNvcnRCeVJlcXVpcmVkIHx8IChzb3J0QnlSZXF1aXJlZCAmJiBzb3J0QnkpKVxuICAgICkge1xuICAgICAgLy8gb25seSBwdXNoIHBvaW50cyBpZiBsYXQsbG5nLGFuZCBzb3J0YnkgZXhpc3RcbiAgICAgIGdyb3VwZWRCeUlkW2lkXS5wdXNoKGNvb3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBGZWF0dXJlW10gPSBPYmplY3QuZW50cmllcyhncm91cGVkQnlJZCkubWFwKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAoW18sIGl0ZW1zXTogW3N0cmluZywgQ29vcmRzVHlwZVtdXSwgaW5kZXgpID0+ICh7XG4gICAgICB0eXBlOiAnRmVhdHVyZScgYXMgY29uc3QsXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnTGluZVN0cmluZycgYXMgY29uc3QsXG4gICAgICAgIC8vIFNvcnQgYnkgY29sdW1ucyBpZiBoYXMgc29ydEJ5RmllbGRcbiAgICAgICAgLy8gVE9ETzogaXRlbXMgYXJlIGV4cGVjdGVkIGluIFBvc2l0aW9uW10gZm9ybWF0P1xuICAgICAgICBjb29yZGluYXRlczogKHNvcnRCeUZpZWxkSWR4ID4gLTFcbiAgICAgICAgICA/IGl0ZW1zLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhWzNdIGFzIGFueSwgYlszXSBhcyBhbnkpKVxuICAgICAgICAgIDogaXRlbXMpIGFzIFBvc2l0aW9uW11cbiAgICAgIH0sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICAvLyB2YWx1ZXMgYXJlIHVzZWQgZm9yIHZhbHVlQWNjZXNzb3IgaW4gVHJpcExheWVyLmZvcm1hdExheWVyRGF0YSgpXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY2FuIGNhdXNlIHJvdyBtYXRlcmlhbGl6YXRpb24gaW4gY2FzZSBvZiBub24tcm93IGJhc2VkIGNvbnRhaW5lcnNcbiAgICAgICAgdmFsdWVzOiBpdGVtcy5tYXAoaXRlbSA9PiBkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoaXRlbS5kYXR1bUluZGV4KSlcbiAgICAgIH1cbiAgICB9KVxuICApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZpbmQgaWQgLyB0cyAvIGxhdCAvIGxuZyBjb2x1bW5zIGZyb20gYSB0YWJsZSBhbmQgYXNzaWduIGl0IHRvIGxheWVyIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFRhYmxlQ29sdW1ucyhcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIGxheWVyQ29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBzb3J0QnkgPSAndGltZXN0YW1wJ1xuKSB7XG4gIGNvbnN0IHtmaWVsZHMsIGZpZWxkUGFpcnN9ID0gZGF0YXNldDtcbiAgaWYgKCFmaWVsZFBhaXJzLmxlbmd0aCB8fCAhZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpbmQgc29ydCBieSBmaWVsZFxuICBjb25zdCBzb3J0QnlGaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApO1xuICAvLyBmaW5kIGlkIGNvbHVtblxuICBjb25zdCBpZEZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZT8udG9Mb3dlckNhc2UoKS5tYXRjaCgvXihpZHx1dWlkKSQvZykpO1xuXG4gIGlmIChzb3J0QnlGaWVsZElkeCA+IC0xICYmIGlkRmllbGRJZHggPiAtMSkge1xuICAgIGNvbnN0IHBvaW50Q29sdW1ucyA9IGFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW4oZmllbGRQYWlyc1swXSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgLi4uT2JqZWN0LmtleXMobGF5ZXJDb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgICAgKGFjY3UsIGNvbCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICBbY29sXTogcG9pbnRDb2x1bW5zW2NvbF0gPz8gbGF5ZXJDb2x1bW5zW2NvbF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApLFxuICAgICAgICBnZW9qc29uOiB7XG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgZmllbGRJZHg6IC0xXG4gICAgICAgICAgLy8gb3B0aW9uYWw6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGRzW2lkRmllbGRJZHhdLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGlkRmllbGRJZHhcbiAgICAgICAgICAvLyBvcHRpb25hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgW3NvcnRCeV06IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGRzW3NvcnRCeUZpZWxkSWR4XS5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBzb3J0QnlGaWVsZElkeFxuICAgICAgICAgIC8vIG9wdGlvbmFsOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGFiZWw6IGZpZWxkUGFpcnNbMF0uZGVmYXVsdE5hbWVcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlcnNUb1RhYmxlQ29sdW1ucyhcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25EYXRhTWFwc1xuKTogR2VvanNvbkRhdGFNYXBzIHtcbiAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9ID0gZGF0YXNldDtcbiAgaWYgKGZpbHRlcmVkSW5kZXgubGVuZ3RoID09PSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSkge1xuICAgIC8vIE9ubHkgYXBwbHkgdGhlIGZpbHRlcmluZyB3aGVuIHNvbWV0aGluZyBpcyB0byBiZSBmaWx0ZXJlZCBvdXRcbiAgICByZXR1cm4gZGF0YVRvRmVhdHVyZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkSW5kZXhTZXQgPSBuZXcgU2V0KGZpbHRlcmVkSW5kZXgpO1xuICBjb25zdCBmaWx0ZXJlZEZlYXR1cmVzOiBHZW9qc29uRGF0YU1hcHMgPSBbXTtcbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGRhdGFUb0ZlYXR1cmUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGdlb21ldHJ5LmNvb3JkaW5hdGVzIG5vdCBhdmFpbGFibGUgZm9yIEdlb21ldHJ5Q29sbGVjdGlvblxuICAgIGNvbnN0IGZpbHRlcmVkQ29vcmRzID0gZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcy5maWx0ZXIoYyA9PlxuICAgICAgZmlsdGVyZWRJbmRleFNldC5oYXMoYy5kYXR1bUluZGV4KVxuICAgICk7XG4gICAgaWYgKGZpbHRlcmVkQ29vcmRzLmxlbmd0aCA+IDAgJiYgZmVhdHVyZSkge1xuICAgICAgZmlsdGVyZWRGZWF0dXJlcy5wdXNoKHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEJpbmFyeUZlYXR1cmVDb2xsZWN0aW9uXG4gICAgICAgICAgLi4uZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICBjb29yZGluYXRlczogZmlsdGVyZWRDb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQmluYXJ5RmVhdHVyZUNvbGxlY3Rpb25cbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBCaW5hcnlGZWF0dXJlQ29sbGVjdGlvblxuICAgICAgICAgIHZhbHVlczogZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcy5tYXAoYyA9PiBkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoYy5kYXR1bUluZGV4KSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJlZEZlYXR1cmVzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEs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
446
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVmZmVyIiwicmVxdWlyZSIsIl9nZW9qc29uTm9ybWFsaXplIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9iYm94IiwiX2QzQXJyYXkiLCJfY2VudGVyIiwiX2NvcmUiLCJfd2t0IiwiX2dpcyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJVdGlscyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkNPTFVNTl9NT0RFX0dFT0pTT04iLCJleHBvcnRzIiwiRmVhdHVyZVR5cGVzIiwiZmllbGRJc0dlb0Fycm93IiwiZ2VvRmllbGQiLCJfZ2VvRmllbGQkbWV0YWRhdGEiLCJCb29sZWFuIiwibWV0YWRhdGEiLCJnZXQiLCJwYXJzZUdlb0pzb25SYXdGZWF0dXJlIiwicmF3RmVhdHVyZSIsInByb3BlcnRpZXMiLCJVaW50OEFycmF5IiwiQXJyYXlCdWZmZXIiLCJiaW5hcnlJbnB1dCIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiYmluYXJ5R2VvIiwicGFyc2VTeW5jIiwiV0tCTG9hZGVyIiwicGFyc2VkR2VvIiwiYmluYXJ5VG9HZW9tZXRyeSIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsIl90eXBlb2YyIiwicGFyc2VkR2VvbWV0cnkiLCJwYXJzZUdlb21ldHJ5RnJvbVN0cmluZyIsInR5cGUiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwibWFwIiwicHRzIiwiZ2V0R2VvanNvbkxheWVyTWV0YSIsIl9yZWYiLCJkYXRhQ29udGFpbmVyIiwiZ2V0RmVhdHVyZSIsImNvbmZpZyIsImRhdGFUb0ZlYXR1cmUiLCJjb2x1bW5Nb2RlIiwiZ2V0R2VvanNvbkRhdGFNYXBzIiwiZ3JvdXBDb2x1bW5zQXNHZW9Kc29uIiwiY29sdW1ucyIsImJvdW5kcyIsImdldEdlb2pzb25Cb3VuZHMiLCJmaXhlZFJhZGl1cyIsImZpbmQiLCJkIiwiX2QkcHJvcGVydGllcyIsInJhZGl1cyIsImZlYXR1cmVUeXBlcyIsImdldEdlb2pzb25GZWF0dXJlVHlwZXMiLCJtZWFuQ2VudGVycyIsImkiLCJmZWF0dXJlIiwiY2VudCIsImNlbnRlciIsImNlbnRyb2lkcyIsImFjY2VwdGFibGVUeXBlcyIsImluZGV4IiwibnVtUm93cyIsImluY2x1ZGVzIiwiY2xlYW5lZCIsImdldEdlb2pzb25Qb2ludERhdGFNYXBzIiwicm93QXNBcnJheSIsImdlb21ldHJpZXMiLCJyZWR1Y2UiLCJhY2N1IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdlb1N0cmluZyIsIkpTT04iLCJwYXJzZSIsIldLVExvYWRlciIsIkJ1ZmZlciIsInVuZGVmaW5lZCIsIm1heENvdW50Iiwic2FtcGxlcyIsImdldFNhbXBsZURhdGEiLCJ2YWxpZFNpbmdsZUdlb21ldHJ5IiwiZ2VvbSIsInZhbGlkR2VvbWV0cnlDb2xsZWN0aW9uIiwiZXZlcnkiLCJub25FbXB0eSIsImJib3giLCJmZWF0dXJlVG9EZWNrR2xHZW9UeXBlIiwiUG9pbnQiLCJNdWx0aVBvaW50IiwiTGluZVN0cmluZyIsIk11bHRpTGluZVN0cmluZyIsIlBvbHlnb24iLCJNdWx0aVBvbHlnb24iLCJhbGxGZWF0dXJlcyIsImdlb1R5cGUiLCJzb3J0QnlDb2x1bW4iLCJncm91cGVkQnlJZCIsInNvcnRCeUZpZWxkSWR4IiwiZmllbGRJZHgiLCJzb3J0QnlSZXF1aXJlZCIsIm9wdGlvbmFsIiwiZGF0dW0iLCJpZCIsImxhdCIsImxvbiIsImxuZyIsImFsdGl0dWRlIiwic29ydEJ5IiwiY29vcmRzIiwiZGF0dW1JbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwicmVzdWx0IiwiZW50cmllcyIsIl9yZWYyIiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheTIiLCJfIiwiaXRlbXMiLCJzb3J0IiwiYiIsImFzY2VuZGluZyIsInZhbHVlcyIsIml0ZW0iLCJkZXRlY3RUYWJsZUNvbHVtbnMiLCJkYXRhc2V0IiwibGF5ZXJDb2x1bW5zIiwiZmllbGRzIiwiZmllbGRQYWlycyIsImZpbmRJbmRleCIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImlkRmllbGRJZHgiLCJfZiRuYW1lIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBvaW50Q29sdW1ucyIsImFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW4iLCJjb2wiLCJfcG9pbnRDb2x1bW5zJGNvbCIsImdlb2pzb24iLCJsYWJlbCIsImRlZmF1bHROYW1lIiwiYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMiLCJmaWx0ZXJlZEluZGV4IiwiZmlsdGVyZWRJbmRleFNldCIsIlNldCIsImZpbHRlcmVkRmVhdHVyZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImZpbHRlcmVkQ29vcmRzIiwiYyIsImhhcyIsImVyciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW9qc29uLWxheWVyL2dlb2pzb24tdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtCdWZmZXJ9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQge0ZlYXR1cmUsIFBvc2l0aW9uLCBCQm94fSBmcm9tICdnZW9qc29uJztcbmltcG9ydCBub3JtYWxpemUgZnJvbSAnQG1hcGJveC9nZW9qc29uLW5vcm1hbGl6ZSc7XG5pbXBvcnQgYmJveCBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB7YXNjZW5kaW5nfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgY2VudGVyIGZyb20gJ0B0dXJmL2NlbnRlcic7XG5pbXBvcnQge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHtwYXJzZVN5bmN9IGZyb20gJ0Bsb2FkZXJzLmdsL2NvcmUnO1xuaW1wb3J0IHtXS0JMb2FkZXIsIFdLVExvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvd2t0JztcbmltcG9ydCB7YmluYXJ5VG9HZW9tZXRyeX0gZnJvbSAnQGxvYWRlcnMuZ2wvZ2lzJztcbmltcG9ydCB7QmluYXJ5RmVhdHVyZUNvbGxlY3Rpb259IGZyb20gJ0Bsb2FkZXJzLmdsL3NjaGVtYSc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2UsIGdldFNhbXBsZURhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXJDb2x1bW5zLCBQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtHZW9qc29uTGF5ZXJNZXRhUHJvcHMsIGFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW59IGZyb20gJy4uL2xheWVyLXV0aWxzJztcbmltcG9ydCB7TGF5ZXJCYXNlQ29uZmlnfSBmcm9tICcuLi9iYXNlLWxheWVyJztcblxuZXhwb3J0IHR5cGUgR2V0RmVhdHVyZSA9IChkOiBhbnkpID0+IEZlYXR1cmU7XG5leHBvcnQgdHlwZSBHZW9qc29uRGF0YU1hcHMgPSAoRmVhdHVyZSB8IEJpbmFyeUZlYXR1cmVDb2xsZWN0aW9uIHwgbnVsbClbXTtcbmV4cG9ydCB0eXBlIEdlb2pzb25Qb2ludERhdGFNYXBzID0gKG51bWJlcltdIHwgbnVtYmVyW11bXSB8IG51bGwpW107XG5cbmV4cG9ydCBjb25zdCBDT0xVTU5fTU9ERV9HRU9KU09OID0gJ2dlb2pzb24nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gVE9ETzogUmUtZW5hYmxlIGVzbGludCB3aGVuIHdlIHVwZ3JhZGUgdG8gaGFuZGxlIGVudW1zIGFuZCB0eXBlIG1hcHNcbmV4cG9ydCBlbnVtIEZlYXR1cmVUeXBlcyB7XG4gIFBvaW50ID0gJ1BvaW50JyxcbiAgTXVsdGlQb2ludCA9ICdNdWx0aVBvaW50JyxcbiAgTGluZVN0cmluZyA9ICdMaW5lU3RyaW5nJyxcbiAgTXVsdGlMaW5lU3RyaW5nID0gJ011bHRpTGluZVN0cmluZycsXG4gIFBvbHlnb24gPSAnUG9seWdvbicsXG4gIE11bHRpUG9seWdvbiA9ICdNdWx0aVBvbHlnb24nXG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgcmV0dXJuIHR5cGUgb2YgZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyA/XG50eXBlIEZlYXR1cmVUeXBlTWFwID0ge1xuICBba2V5IGluIEZlYXR1cmVUeXBlc106IGJvb2xlYW47XG59O1xuXG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBoYXMgZ2VvYXJyb3cgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGdlb0ZpZWxkIEEgZmllbGQgdG8gdGVzdC5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZElzR2VvQXJyb3coZ2VvRmllbGQ/OiBQcm90b0RhdGFzZXRGaWVsZCB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oZ2VvRmllbGQ/Lm1ldGFkYXRhPy5nZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VHZW9Kc29uUmF3RmVhdHVyZShyYXdGZWF0dXJlOiB1bmtub3duKTogRmVhdHVyZSB8IG51bGwge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDsgLy8gaGVscCBlbnN1cmUgdGhhdCBwcm9wZXJ0aWVzIGlzIHByZXNlbnQgb24gdGhlIHJldHVybmVkIGdlb2pzb24gZmVhdHVyZVxuICAvLyBTdXBwb3J0IFdLQiBnZW9tZXRyeSBwcm92aWRlZCBhcyBiaW5hcnkgKGUuZy4sIGZyb20gUGFycXVldC9HZW9QYXJxdWV0KVxuICBpZiAocmF3RmVhdHVyZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgcmF3RmVhdHVyZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJpbmFyeUlucHV0ID1cbiAgICAgICAgcmF3RmVhdHVyZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyXG4gICAgICAgICAgPyByYXdGZWF0dXJlXG4gICAgICAgICAgOiAocmF3RmVhdHVyZSBhcyBVaW50OEFycmF5KS5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIChyYXdGZWF0dXJlIGFzIFVpbnQ4QXJyYXkpLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIChyYXdGZWF0dXJlIGFzIFVpbnQ4QXJyYXkpLmJ5dGVPZmZzZXQgKyAocmF3RmVhdHVyZSBhcyBVaW50OEFycmF5KS5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgY29uc3QgYmluYXJ5R2VvID0gcGFyc2VTeW5jKGJpbmFyeUlucHV0IGFzIEFycmF5QnVmZmVyLCBXS0JMb2FkZXIpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsb2FkZXJzLmdsIGJpbmFyeSB0eXBlIHRvIEdlb0pTT04gZ2VvbWV0cnlcbiAgICAgIGNvbnN0IHBhcnNlZEdlbyA9IGJpbmFyeVRvR2VvbWV0cnkoYmluYXJ5R2VvKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUocGFyc2VkR2VvKTtcbiAgICAgIGlmICghbm9ybWFsaXplZCB8fCAhQXJyYXkuaXNBcnJheShub3JtYWxpemVkLmZlYXR1cmVzKSB8fCAhbm9ybWFsaXplZC5mZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ge3Byb3BlcnRpZXMsIC4uLm5vcm1hbGl6ZWQuZmVhdHVyZXNbMF19O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHJhd0ZlYXR1cmUgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gU3VwcG9ydCBHZW9Kc29uIGZlYXR1cmUgYXMgb2JqZWN0XG4gICAgLy8gcHJvYmFibHkgbmVlZCB0byBub3JtYWxpemUgaXQgYXMgd2VsbFxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUocmF3RmVhdHVyZSk7XG4gICAgaWYgKCFub3JtYWxpemVkIHx8ICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWQuZmVhdHVyZXMpKSB7XG4gICAgICAvLyBmYWlsIHRvIG5vcm1hbGl6ZSBHZW9Kc29uXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3Byb3BlcnRpZXMsIC4uLm5vcm1hbGl6ZWQuZmVhdHVyZXNbMF19O1xuICB9IGVsc2UgaWYgKHR5cGVvZiByYXdGZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlZEdlb21ldHJ5ID0gcGFyc2VHZW9tZXRyeUZyb21TdHJpbmcocmF3RmVhdHVyZSk7XG4gICAgaWYgKCFwYXJzZWRHZW9tZXRyeSkgcmV0dXJuIG51bGw7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB2ZXJpZnkgd2hldGhlciBwYXJzZWRHZW9tZXRyeSBhbHdheXMgY29udGFpbnMgcHJvcGVydGllc1xuICAgIHJldHVybiB7cHJvcGVydGllcywgLi4ucGFyc2VkR2VvbWV0cnl9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmF3RmVhdHVyZSkpIHtcbiAgICAvLyBTdXBwb3J0IEdlb0pzb24gIExpbmVTdHJpbmcgYXMgYW4gYXJyYXkgb2YgcG9pbnRzXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIC8vIHdoeSBkbyB3ZSBuZWVkIHRvIGZsaXAgaXQuLi5cbiAgICAgICAgY29vcmRpbmF0ZXM6IHJhd0ZlYXR1cmUubWFwKHB0cyA9PiBbcHRzWzFdLCBwdHNbMF1dKSxcbiAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllc1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25MYXllck1ldGEoe1xuICBkYXRhQ29udGFpbmVyLFxuICBnZXRGZWF0dXJlLFxuICBjb25maWdcbn06IHtcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTtcbiAgZ2V0RmVhdHVyZTogR2V0RmVhdHVyZTtcbiAgY29uZmlnOiBMYXllckJhc2VDb25maWc7XG59KTogR2VvanNvbkxheWVyTWV0YVByb3BzIHtcbiAgY29uc3QgZGF0YVRvRmVhdHVyZSA9XG4gICAgY29uZmlnLmNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX0dFT0pTT05cbiAgICAgID8gZ2V0R2VvanNvbkRhdGFNYXBzKGRhdGFDb250YWluZXIsIGdldEZlYXR1cmUpXG4gICAgICA6IC8vIENPTFVNTl9NT0RFX1RBQkxFXG4gICAgICAgIGdyb3VwQ29sdW1uc0FzR2VvSnNvbihkYXRhQ29udGFpbmVyLCBjb25maWcuY29sdW1ucywgJ3NvcnRCeScpO1xuXG4gIC8vIGdldCBib3VuZHMgZnJvbSBmZWF0dXJlc1xuICBjb25zdCBib3VuZHMgPSBnZXRHZW9qc29uQm91bmRzKGRhdGFUb0ZlYXR1cmUpO1xuICAvLyBpZiBhbnkgb2YgdGhlIGZlYXR1cmUgaGFzIHByb3BlcnRpZXMucmFkaXVzIHNldCB0byBiZSB0cnVlXG4gIGNvbnN0IGZpeGVkUmFkaXVzID0gQm9vbGVhbihcbiAgICBkYXRhVG9GZWF0dXJlLmZpbmQoZCA9PiBkICYmICdwcm9wZXJ0aWVzJyBpbiBkICYmIGQucHJvcGVydGllcz8ucmFkaXVzKVxuICApO1xuXG4gIC8vIGtlZXAgYSByZWNvcmQgb2Ygd2hhdCB0eXBlIG9mIGdlb21ldHJ5IHRoZSBjb2xsZWN0aW9uIGhhc1xuICBjb25zdCBmZWF0dXJlVHlwZXMgPSBnZXRHZW9qc29uRmVhdHVyZVR5cGVzKGRhdGFUb0ZlYXR1cmUpO1xuXG4gIGNvbnN0IG1lYW5DZW50ZXJzOiBBcnJheTxudW1iZXJbXSB8IG51bGw+ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVRvRmVhdHVyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGZlYXR1cmUgPSBkYXRhVG9GZWF0dXJlW2ldO1xuICAgIGlmIChmZWF0dXJlKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUT0RPOiB1c2UgbGluZSBpbnRlcnBvbGF0ZSB0byBnZXQgY2VudGVyIG9mIGxpbmUgZm9yIExpbmVTdHJpbmdcbiAgICAgICAgY29uc3QgY2VudCA9IGNlbnRlcihmZWF0dXJlIGFzIEFsbEdlb0pTT04pO1xuICAgICAgICBtZWFuQ2VudGVycy5wdXNoKGNlbnQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtZWFuQ2VudGVycy5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGF0YVRvRmVhdHVyZSxcbiAgICBib3VuZHMsXG4gICAgZml4ZWRSYWRpdXMsXG4gICAgZmVhdHVyZVR5cGVzLFxuICAgIGNlbnRyb2lkczogbWVhbkNlbnRlcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSByYXcgZGF0YSB0byBHZW9Kc29uIGZlYXR1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25EYXRhTWFwcyhcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgZ2V0RmVhdHVyZTogR2V0RmVhdHVyZVxuKTogR2VvanNvbkRhdGFNYXBzIHtcbiAgY29uc3QgYWNjZXB0YWJsZVR5cGVzID0gW1xuICAgICdQb2ludCcsXG4gICAgJ011bHRpUG9pbnQnLFxuICAgICdMaW5lU3RyaW5nJyxcbiAgICAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgICAnUG9seWdvbicsXG4gICAgJ011bHRpUG9seWdvbicsXG4gICAgJ0dlb21ldHJ5Q29sbGVjdGlvbidcbiAgXTtcblxuICBjb25zdCBkYXRhVG9GZWF0dXJlOiBHZW9qc29uRGF0YU1hcHMgPSBbXTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7IGluZGV4KyspIHtcbiAgICBjb25zdCBmZWF0dXJlID0gcGFyc2VHZW9Kc29uUmF3RmVhdHVyZShnZXRGZWF0dXJlKHtpbmRleH0pKTtcblxuICAgIGlmIChmZWF0dXJlICYmIGZlYXR1cmUuZ2VvbWV0cnkgJiYgYWNjZXB0YWJsZVR5cGVzLmluY2x1ZGVzKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSkpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIC8vIHN0b3JlIGluZGV4IG9mIHRoZSBkYXRhIGluIGZlYXR1cmUgcHJvcGVydGllc1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGRhdGFUb0ZlYXR1cmVbaW5kZXhdID0gY2xlYW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVRvRmVhdHVyZVtpbmRleF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhVG9GZWF0dXJlO1xufVxuXG4vKipcbiAqIFBhcnNlIHJhdyBkYXRhIHRvIEdlb0pzb24gcG9pbnQgZmVhdHVyZSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvblBvaW50RGF0YU1hcHMoXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIGdldEZlYXR1cmU6IEdldEZlYXR1cmVcbik6IEdlb2pzb25Qb2ludERhdGFNYXBzIHtcbiAgY29uc3QgYWNjZXB0YWJsZVR5cGVzID0gWydQb2ludCcsICdNdWx0aVBvaW50JywgJ0dlb21ldHJ5Q29sbGVjdGlvbiddO1xuXG4gIGNvbnN0IGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25Qb2ludERhdGFNYXBzID0gW107XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFDb250YWluZXIubnVtUm93cygpOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZmVhdHVyZSA9IHBhcnNlR2VvSnNvblJhd0ZlYXR1cmUoZ2V0RmVhdHVyZShkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoaW5kZXgpKSk7XG5cbiAgICBpZiAoZmVhdHVyZSAmJiBmZWF0dXJlLmdlb21ldHJ5ICYmIGFjY2VwdGFibGVUeXBlcy5pbmNsdWRlcyhmZWF0dXJlLmdlb21ldHJ5LnR5cGUpKSB7XG4gICAgICBkYXRhVG9GZWF0dXJlW2luZGV4XSA9XG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ1BvaW50JyB8fCBmZWF0dXJlLmdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvaW50J1xuICAgICAgICAgID8gZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1xuICAgICAgICAgIDogLy8gQHRzLWV4cGVjdC1lcnJvciBQcm9wZXJ0eSAnZ2VvbWV0cmllcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnTGluZVN0cmluZydcbiAgICAgICAgICAgIChmZWF0dXJlLmdlb21ldHJ5Lmdlb21ldHJpZXMgfHwgW10pLnJlZHVjZSgoYWNjdSwgZikgPT4ge1xuICAgICAgICAgICAgICBpZiAoZi50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgYWNjdS5wdXNoKGYuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgYWNjdS5wdXNoKC4uLmYuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFUb0ZlYXR1cmVbaW5kZXhdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YVRvRmVhdHVyZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBnZW9qc29uIGZyb20gc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gZ2VvU3RyaW5nXG4gKiBAcmV0dXJucyB7bnVsbCB8IE9iamVjdH0gZ2VvanNvbiBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VHZW9tZXRyeUZyb21TdHJpbmcoZ2VvU3RyaW5nOiBzdHJpbmcpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGxldCBwYXJzZWRHZW87XG5cbiAgLy8gdHJ5IHBhcnNlIGFzIGdlb2pzb24gc3RyaW5nXG4gIC8vIHtcInR5cGVcIjpcIlBvbHlnb25cIixcImNvb3JkaW5hdGVzXCI6W1tbLTc0LjE1ODQ5MSw0MC44MzU5NF1dXX1cbiAgdHJ5IHtcbiAgICBwYXJzZWRHZW8gPSBKU09OLnBhcnNlKGdlb1N0cmluZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBrZWVwIHRyeWluZyB0byBwYXJzZVxuICB9XG5cbiAgLy8gdHJ5IHBhcnNlIGFzIHdrdCB1c2luZyBsb2FkZXJzLmdsIFdLVExvYWRlclxuICBpZiAoIXBhcnNlZEdlbykge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWRHZW8gPSBwYXJzZVN5bmMoZ2VvU3RyaW5nLCBXS1RMb2FkZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyeSBwYXJzZSBhcyB3a2IgdXNpbmcgbG9hZGVycy5nbCBXS0JMb2FkZXJcbiAgaWYgKCFwYXJzZWRHZW8pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZ2VvU3RyaW5nLCAnaGV4Jyk7XG4gICAgICBjb25zdCBiaW5hcnlHZW8gPSBwYXJzZVN5bmMoYnVmZmVyLCBXS0JMb2FkZXIpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcGFyc2VkR2VvID0gYmluYXJ5VG9HZW9tZXRyeShiaW5hcnlHZW8pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcGFyc2VkR2VvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKHBhcnNlZEdlbyk7XG5cbiAgaWYgKCFub3JtYWxpemVkIHx8ICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWQuZmVhdHVyZXMpKSB7XG4gICAgLy8gZmFpbCB0byBub3JtYWxpemUgZ2VvanNvblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQuZmVhdHVyZXNbMF07XG59XG5cbi8qKlxuICogR2V0IGdlb2pzb24gYm91bmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW9qc29uQm91bmRzKGZlYXR1cmVzOiBHZW9qc29uRGF0YU1hcHMgPSBbXSk6IEJCb3ggfCBudWxsIHtcbiAgLy8gNzAgbXMgZm9yIDEwLDAwMCBwb2x5Z29uc1xuICAvLyBoZXJlIHdlIG9ubHkgcGljayBjb3VwbGVcbiAgY29uc3QgbWF4Q291bnQgPSAxMDAwMDtcbiAgY29uc3Qgc2FtcGxlcyA9IGZlYXR1cmVzLmxlbmd0aCA+IG1heENvdW50ID8gZ2V0U2FtcGxlRGF0YShmZWF0dXJlcywgbWF4Q291bnQpIDogZmVhdHVyZXM7XG5cbiAgY29uc3QgdmFsaWRTaW5nbGVHZW9tZXRyeSA9IGdlb20gPT4gZ2VvbS5jb29yZGluYXRlcyAmJiBnZW9tLmNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgY29uc3QgdmFsaWRHZW9tZXRyeUNvbGxlY3Rpb24gPSBnZW9tID0+XG4gICAgZ2VvbS5nZW9tZXRyaWVzICYmIGdlb20uZ2VvbWV0cmllcy5sZW5ndGggJiYgZ2VvbS5nZW9tZXRyaWVzLmV2ZXJ5KHZhbGlkU2luZ2xlR2VvbWV0cnkpO1xuICBjb25zdCBub25FbXB0eSA9IHNhbXBsZXMuZmlsdGVyKFxuICAgIGQgPT4gZCAmJiBkLmdlb21ldHJ5ICYmICh2YWxpZFNpbmdsZUdlb21ldHJ5KGQuZ2VvbWV0cnkpIHx8IHZhbGlkR2VvbWV0cnlDb2xsZWN0aW9uKGQuZ2VvbWV0cnkpKVxuICApO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJib3goe1xuICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgIGZlYXR1cmVzOiBub25FbXB0eVxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZlYXR1cmVUb0RlY2tHbEdlb1R5cGUgPSB7XG4gIFBvaW50OiAncG9pbnQnLFxuICBNdWx0aVBvaW50OiAncG9pbnQnLFxuICBMaW5lU3RyaW5nOiAnbGluZScsXG4gIE11bHRpTGluZVN0cmluZzogJ2xpbmUnLFxuICBQb2x5Z29uOiAncG9seWdvbicsXG4gIE11bHRpUG9seWdvbjogJ3BvbHlnb24nXG59O1xuXG5leHBvcnQgdHlwZSBEZWNrR2xHZW9UeXBlcyA9IHtcbiAgcG9pbnQ6IGJvb2xlYW47XG4gIGxpbmU6IGJvb2xlYW47XG4gIHBvbHlnb246IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFBhcnNlIGdlb2pzb24gZnJvbSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25GZWF0dXJlVHlwZXMoYWxsRmVhdHVyZXM6IEdlb2pzb25EYXRhTWFwcyk6IERlY2tHbEdlb1R5cGVzIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBzb21lIHRlc3QgY2FzZXMgb25seSBoYXZlIDEgZ2VvdHlwZVxuICBjb25zdCBmZWF0dXJlVHlwZXM6IERlY2tHbEdlb1R5cGVzID0ge307XG4gIGZvciAobGV0IGYgPSAwOyBmIDwgYWxsRmVhdHVyZXMubGVuZ3RoOyBmKyspIHtcbiAgICBjb25zdCBmZWF0dXJlID0gYWxsRmVhdHVyZXNbZl07XG4gICAgaWYgKGZlYXR1cmUgJiYgJ2dlb21ldHJ5JyBpbiBmZWF0dXJlKSB7XG4gICAgICBjb25zdCBnZW9UeXBlID0gZmVhdHVyZVRvRGVja0dsR2VvVHlwZVtmZWF0dXJlLmdlb21ldHJ5ICYmIGZlYXR1cmUuZ2VvbWV0cnkudHlwZV07XG4gICAgICBpZiAoZ2VvVHlwZSkge1xuICAgICAgICBmZWF0dXJlVHlwZXNbZ2VvVHlwZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmZWF0dXJlVHlwZXM7XG59XG5cbnR5cGUgQ29vcmRzVHlwZSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIgfCBudWxsXSAmIHtcbiAgZGF0dW1JbmRleDogbnVtYmVyO1xuICBkYXR1bTogbnVtYmVyW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBDb2x1bW5zQXNHZW9Kc29uKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIHNvcnRCeUNvbHVtbiA9ICd0aW1lc3RhbXAnXG4pOiBGZWF0dXJlW10ge1xuICBjb25zdCBncm91cGVkQnlJZDoge1trZXk6IHN0cmluZ106IENvb3Jkc1R5cGVbXX0gPSB7fTtcbiAgY29uc3Qgc29ydEJ5RmllbGRJZHggPSBjb2x1bW5zW3NvcnRCeUNvbHVtbl0uZmllbGRJZHg7XG4gIGNvbnN0IHNvcnRCeVJlcXVpcmVkID0gIWNvbHVtbnNbc29ydEJ5Q29sdW1uXS5vcHRpb25hbDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFDb250YWluZXIubnVtUm93cygpOyBpbmRleCsrKSB7XG4gICAgLy8gbm90ZTogY2FuIG1hdGVyaWFsaXplIHRoZSByb3dcbiAgICBjb25zdCBkYXR1bSA9IGRhdGFDb250YWluZXIucm93QXNBcnJheShpbmRleCk7XG4gICAgY29uc3QgaWQgPSBkYXR1bVtjb2x1bW5zLmlkLmZpZWxkSWR4XTtcbiAgICBjb25zdCBsYXQgPSBkYXR1bVtjb2x1bW5zLmxhdC5maWVsZElkeF07XG4gICAgY29uc3QgbG9uID0gZGF0dW1bY29sdW1ucy5sbmcuZmllbGRJZHhdO1xuICAgIGNvbnN0IGFsdGl0dWRlID0gY29sdW1ucy5hbHRpdHVkZSA/IGRhdHVtW2NvbHVtbnMuYWx0aXR1ZGUuZmllbGRJZHhdIDogMDtcbiAgICBjb25zdCBzb3J0QnkgPSBzb3J0QnlGaWVsZElkeCA+IC0xID8gZGF0dW1bc29ydEJ5RmllbGRJZHhdIDogbnVsbDtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgY29uc3QgY29vcmRzOiBDb29yZHNUeXBlID0gW2xvbiwgbGF0LCBhbHRpdHVkZSwgc29ydEJ5XTtcbiAgICAvLyBBZGRpbmcgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwgZGF0YSB0byB0aGUgY29vcmRpbmF0ZXMgYXJyYXlcbiAgICBjb29yZHMuZGF0dW1JbmRleCA9IGluZGV4O1xuICAgIGNvb3Jkcy5kYXR1bSA9IGRhdHVtO1xuICAgIGlmICghZ3JvdXBlZEJ5SWRbaWRdKSBncm91cGVkQnlJZFtpZF0gPSBbXTtcblxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc0Zpbml0ZShsb24pICYmXG4gICAgICBOdW1iZXIuaXNGaW5pdGUobGF0KSAmJlxuICAgICAgKCFzb3J0QnlSZXF1aXJlZCB8fCAoc29ydEJ5UmVxdWlyZWQgJiYgc29ydEJ5KSlcbiAgICApIHtcbiAgICAgIC8vIG9ubHkgcHVzaCBwb2ludHMgaWYgbGF0LGxuZyxhbmQgc29ydGJ5IGV4aXN0XG4gICAgICBncm91cGVkQnlJZFtpZF0ucHVzaChjb29yZHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogRmVhdHVyZVtdID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBlZEJ5SWQpLm1hcChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgKFtfLCBpdGVtc106IFtzdHJpbmcsIENvb3Jkc1R5cGVbXV0sIGluZGV4KSA9PiAoe1xuICAgICAgdHlwZTogJ0ZlYXR1cmUnIGFzIGNvbnN0LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnIGFzIGNvbnN0LFxuICAgICAgICAvLyBTb3J0IGJ5IGNvbHVtbnMgaWYgaGFzIHNvcnRCeUZpZWxkXG4gICAgICAgIC8vIFRPRE86IGl0ZW1zIGFyZSBleHBlY3RlZCBpbiBQb3NpdGlvbltdIGZvcm1hdD9cbiAgICAgICAgY29vcmRpbmF0ZXM6IChzb3J0QnlGaWVsZElkeCA+IC0xXG4gICAgICAgICAgPyBpdGVtcy5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYVszXSBhcyBhbnksIGJbM10gYXMgYW55KSlcbiAgICAgICAgICA6IGl0ZW1zKSBhcyBQb3NpdGlvbltdXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgLy8gdmFsdWVzIGFyZSB1c2VkIGZvciB2YWx1ZUFjY2Vzc29yIGluIFRyaXBMYXllci5mb3JtYXRMYXllckRhdGEoKVxuICAgICAgICAvLyBOb3RlOiB0aGlzIGNhbiBjYXVzZSByb3cgbWF0ZXJpYWxpemF0aW9uIGluIGNhc2Ugb2Ygbm9uLXJvdyBiYXNlZCBjb250YWluZXJzXG4gICAgICAgIHZhbHVlczogaXRlbXMubWFwKGl0ZW0gPT4gZGF0YUNvbnRhaW5lci5yb3dBc0FycmF5KGl0ZW0uZGF0dW1JbmRleCkpXG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGaW5kIGlkIC8gdHMgLyBsYXQgLyBsbmcgY29sdW1ucyBmcm9tIGEgdGFibGUgYW5kIGFzc2lnbiBpdCB0byBsYXllciBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RUYWJsZUNvbHVtbnMoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBsYXllckNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgc29ydEJ5ID0gJ3RpbWVzdGFtcCdcbikge1xuICBjb25zdCB7ZmllbGRzLCBmaWVsZFBhaXJzfSA9IGRhdGFzZXQ7XG4gIGlmICghZmllbGRQYWlycy5sZW5ndGggfHwgIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaW5kIHNvcnQgYnkgZmllbGRcbiAgY29uc3Qgc29ydEJ5RmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi50eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKTtcbiAgLy8gZmluZCBpZCBjb2x1bW5cbiAgY29uc3QgaWRGaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWU/LnRvTG93ZXJDYXNlKCkubWF0Y2goL14oaWR8dXVpZCkkL2cpKTtcblxuICBpZiAoc29ydEJ5RmllbGRJZHggPiAtMSAmJiBpZEZpZWxkSWR4ID4gLTEpIHtcbiAgICBjb25zdCBwb2ludENvbHVtbnMgPSBhc3NpZ25Qb2ludFBhaXJUb0xheWVyQ29sdW1uKGZpZWxkUGFpcnNbMF0sIHRydWUpO1xuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5zOiB7XG4gICAgICAgIC4uLk9iamVjdC5rZXlzKGxheWVyQ29sdW1ucykucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBjb2wpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2NvbF06IHBvaW50Q29sdW1uc1tjb2xdID8/IGxheWVyQ29sdW1uc1tjb2xdXG4gICAgICAgICAgfSksXG4gICAgICAgICAge31cbiAgICAgICAgKSxcbiAgICAgICAgZ2VvanNvbjoge1xuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIGZpZWxkSWR4OiAtMVxuICAgICAgICAgIC8vIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGlkOiB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkc1tpZEZpZWxkSWR4XS5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBpZEZpZWxkSWR4XG4gICAgICAgICAgLy8gb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFtzb3J0QnldOiB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkc1tzb3J0QnlGaWVsZElkeF0ubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogc29ydEJ5RmllbGRJZHhcbiAgICAgICAgICAvLyBvcHRpb25hbDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBmaWVsZFBhaXJzWzBdLmRlZmF1bHROYW1lXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBkYXRhVG9GZWF0dXJlOiBHZW9qc29uRGF0YU1hcHNcbik6IEdlb2pzb25EYXRhTWFwcyB7XG4gIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fSA9IGRhdGFzZXQ7XG4gIGlmIChmaWx0ZXJlZEluZGV4Lmxlbmd0aCA9PT0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpIHtcbiAgICAvLyBPbmx5IGFwcGx5IHRoZSBmaWx0ZXJpbmcgd2hlbiBzb21ldGhpbmcgaXMgdG8gYmUgZmlsdGVyZWQgb3V0XG4gICAgcmV0dXJuIGRhdGFUb0ZlYXR1cmU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZEluZGV4U2V0ID0gbmV3IFNldChmaWx0ZXJlZEluZGV4KTtcbiAgY29uc3QgZmlsdGVyZWRGZWF0dXJlczogR2VvanNvbkRhdGFNYXBzID0gW107XG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBkYXRhVG9GZWF0dXJlKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBnZW9tZXRyeS5jb29yZGluYXRlcyBub3QgYXZhaWxhYmxlIGZvciBHZW9tZXRyeUNvbGxlY3Rpb25cbiAgICBjb25zdCBmaWx0ZXJlZENvb3JkcyA9IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZmlsdGVyKGMgPT5cbiAgICAgIGZpbHRlcmVkSW5kZXhTZXQuaGFzKGMuZGF0dW1JbmRleClcbiAgICApO1xuICAgIGlmIChmaWx0ZXJlZENvb3Jkcy5sZW5ndGggPiAwICYmIGZlYXR1cmUpIHtcbiAgICAgIGZpbHRlcmVkRmVhdHVyZXMucHVzaCh7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBCaW5hcnlGZWF0dXJlQ29sbGVjdGlvblxuICAgICAgICAgIC4uLmZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IGZpbHRlcmVkQ29vcmRzXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEJpbmFyeUZlYXR1cmVDb2xsZWN0aW9uXG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQmluYXJ5RmVhdHVyZUNvbGxlY3Rpb25cbiAgICAgICAgICB2YWx1ZXM6IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubWFwKGMgPT4gZGF0YUNvbnRhaW5lci5yb3dBc0FycmF5KGMuZGF0dW1JbmRleCkpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyZWRGZWF0dXJlcztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxJQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxJQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxVQUFBLEdBQUFWLE9BQUE7QUFJQSxJQUFBVyxXQUFBLEdBQUFYLE9BQUE7QUFBbUYsU0FBQVksMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FB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