kepler.gl 3.1.9 → 3.2.0

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 (98) hide show
  1. package/README.md +21 -21
  2. package/dist/src/components/src/common/link-renderer.d.ts +6 -2
  3. package/dist/src/components/src/index.d.ts +1 -0
  4. package/dist/src/components/src/map-container.d.ts +1 -0
  5. package/dist/src/components/src/plot-container.d.ts +1 -0
  6. package/dist/src/components/src/side-panel/layer-manager.d.ts +1 -0
  7. package/dist/src/duckdb/src/index.d.ts +1 -0
  8. package/dist/src/duckdb/src/processors/data-processor.d.ts +8 -0
  9. package/dist/src/utils/src/data-utils.d.ts +1 -0
  10. package/package.json +2 -2
  11. package/src/actions/package.json +8 -8
  12. package/src/ai-assistant/package.json +7 -7
  13. package/src/cloud-providers/package.json +2 -2
  14. package/src/common-utils/package.json +3 -3
  15. package/src/components/dist/common/link-renderer.d.ts +6 -2
  16. package/src/components/dist/common/link-renderer.js +1 -1
  17. package/src/components/dist/index.d.ts +1 -0
  18. package/src/components/dist/index.js +44 -1
  19. package/src/components/dist/map-container.d.ts +1 -0
  20. package/src/components/dist/map-container.js +2 -1
  21. package/src/components/dist/modal-container.js +3 -3
  22. package/src/components/dist/modals/tilesets-modals/tileset-raster-form.js +38 -9
  23. package/src/components/dist/plot-container.d.ts +1 -0
  24. package/src/components/dist/plot-container.js +7 -4
  25. package/src/components/dist/side-panel/layer-manager.d.ts +1 -0
  26. package/src/components/dist/side-panel/layer-manager.js +5 -3
  27. package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +16 -9
  28. package/src/components/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +3 -3
  29. package/src/components/package.json +16 -16
  30. package/src/components/src/common/link-renderer.tsx +7 -2
  31. package/src/components/src/index.ts +8 -0
  32. package/src/components/src/map-container.tsx +4 -0
  33. package/src/components/src/modal-container.tsx +6 -2
  34. package/src/components/src/modals/tilesets-modals/tileset-raster-form.tsx +60 -4
  35. package/src/components/src/plot-container.tsx +9 -3
  36. package/src/components/src/side-panel/layer-manager.tsx +4 -2
  37. package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +22 -9
  38. package/src/components/src/side-panel/layer-panel/raster-tile-layer-configurator.tsx +2 -1
  39. package/src/constants/dist/default-settings.js +1 -1
  40. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/56/48/71c2c5381c01c063c164e15fa04b4b1f3faae02e6727f2f2daf483e15205feca68334bad721af0c6f31abb20b56d60504623838127764aab6883912e7f71 +1 -0
  41. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e4/a7/04d0f645deb094cab21e70c2457f3b87750bee1dfea9b3ad1d4f746ae10ff013d960af8a46b1f87a10409989d6a352c21e29a8784a161a84f83a310955e2 +1 -0
  42. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b2/5f/6daa692cacd1234803d6a5abefef0c49aae2d1403e4d8e53140088950a04 +2 -0
  43. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bf/88/ea60c7619185516464a4ae21f51394966047bfdf190a5463de651c61931c +2 -0
  44. package/src/constants/package.json +2 -2
  45. package/src/constants/umd/keplergl.min.js +1 -1
  46. package/src/deckgl-arrow-layers/package.json +2 -2
  47. package/src/deckgl-layers/package.json +4 -4
  48. package/src/duckdb/dist/index.d.ts +1 -0
  49. package/src/duckdb/dist/index.js +24 -2
  50. package/src/duckdb/dist/processors/data-processor.d.ts +8 -0
  51. package/src/duckdb/dist/processors/data-processor.js +23 -1
  52. package/src/duckdb/package.json +6 -6
  53. package/src/duckdb/src/index.ts +5 -0
  54. package/src/duckdb/src/processors/data-processor.ts +25 -1
  55. package/src/effects/package.json +5 -5
  56. package/src/layers/dist/raster-tile/gpu-utils.d.ts +11 -10
  57. package/src/layers/dist/raster-tile/gpu-utils.js +7 -6
  58. package/src/layers/dist/raster-tile/image.d.ts +4 -0
  59. package/src/layers/dist/raster-tile/image.js +30 -16
  60. package/src/layers/dist/raster-tile/raster-tile-layer.d.ts +4 -0
  61. package/src/layers/dist/raster-tile/raster-tile-layer.js +18 -6
  62. package/src/layers/dist/raster-tile/request-throttle.d.ts +1 -1
  63. package/src/layers/dist/raster-tile/request-throttle.js +17 -16
  64. package/src/layers/dist/raster-tile/types.d.ts +16 -0
  65. package/src/layers/dist/raster-tile/types.js +1 -1
  66. package/src/layers/dist/raster-tile/url.d.ts +1 -1
  67. package/src/layers/dist/raster-tile/url.js +5 -4
  68. package/src/layers/package.json +9 -9
  69. package/src/layers/src/raster-tile/gpu-utils.ts +96 -78
  70. package/src/layers/src/raster-tile/image.ts +35 -9
  71. package/src/layers/src/raster-tile/raster-tile-layer.ts +23 -5
  72. package/src/layers/src/raster-tile/request-throttle.ts +10 -5
  73. package/src/layers/src/raster-tile/types.ts +19 -1
  74. package/src/layers/src/raster-tile/url.ts +10 -3
  75. package/src/localization/package.json +1 -1
  76. package/src/processors/package.json +7 -7
  77. package/src/reducers/package.json +16 -16
  78. package/src/schemas/package.json +7 -7
  79. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/4a/50f77069dbf70c6792dd82d4e149375a888e25ddddd3209e2db013be62091f79082291fa06eb518cccb111b09a778e2946c1fb7a27bb6e32f72da0ccf250 +1 -0
  80. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/41/e3/d873c0efff87c4438d34d09be942ff6877947926c2309949e1eea8a58722c9ebf1e9451b44f62996d3590f398318e2fd17f19613445810226c8354b7d746 +1 -0
  81. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/9d/95/efc8c9f0bdd09b105646cf5e34b067e621726ceeb296771ff7da9e2e03b4 +2 -0
  82. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c5/b6/9c4bdb089acc30ac8a16a6b9b93898757537f7017b2f725ddb832b4614d6 +2 -0
  83. package/src/styles/package.json +2 -2
  84. package/src/styles/umd/keplergl.min.js +1 -1
  85. package/src/table/dist/tileset/vector-tile-utils.js +9 -5
  86. package/src/table/package.json +5 -5
  87. package/src/table/src/tileset/vector-tile-utils.ts +9 -6
  88. package/src/tasks/package.json +2 -2
  89. package/src/types/package.json +1 -1
  90. package/src/utils/dist/application-config.js +5 -5
  91. package/src/utils/dist/data-scale-utils.js +35 -16
  92. package/src/utils/dist/data-utils.d.ts +1 -0
  93. package/src/utils/dist/data-utils.js +2 -1
  94. package/src/utils/package.json +4 -4
  95. package/src/utils/src/application-config.ts +4 -6
  96. package/src/utils/src/data-scale-utils.ts +34 -21
  97. package/src/utils/src/data-utils.ts +1 -0
  98. package/umd/keplergl.min.js +1240 -1220
@@ -870,6 +870,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
870
870
  mapControls: mapControls,
871
871
  readOnly: this.props.readOnly,
872
872
  scale: mapState.scale || 1,
873
+ logoComponent: this.props.logoComponent,
873
874
  top: interactionConfig.geocoder && interactionConfig.geocoder.enabled ? theme.mapControlTop : 0,
874
875
  editor: editor,
875
876
  locale: locale,
@@ -961,4 +962,4 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
961
962
  });
962
963
  return (0, _styledComponents.withTheme)(MapContainer);
963
964
  }
964
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZWFjdE1hcEdsIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZSIsIl9kZWJvdW5jZSIsIl9tYXBQb3BvdmVyIiwiX21hcENvbnRyb2wiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfZWRpdG9yIiwiX2xheWVycyIsIl91dGlscyIsIl9zdHlsZXMiLCJfY29uc3RhbnRzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9jb3JlMiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUiLCJERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIkxPQ0FMRV9DT0RFU19BUlJBWSIsIkxPQ0FMRV9DT0RFUyIsIlN0eWxlZE1hcCIsInN0eWxlZCIsIlN0eWxlZE1hcENvbnRhaW5lciIsIl9yZWYiLCJfcmVmJCRtaXhCbGVuZE1vZGUiLCIkbWl4QmxlbmRNb2RlIiwiJG1hcExpYkNzc0NsYXNzIiwiY29uY2F0IiwiTUFQQk9YR0xfU1RZTEVfVVBEQVRFIiwiTUFQQk9YR0xfUkVOREVSIiwibm9wIiwiTWFwTGliTG9nbyIsIl9yZWYyIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFwTGliQ3NzQ2xhc3MiLCJ0YXJnZXQiLCJyZWwiLCJocmVmIiwibWFwTGliVXJsIiwibWFwTGliTmFtZSIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMyIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsInNldE5vZGVSZWYiLCJyZWYiLCJTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyIiwiaXNQYWxtIiwibGFiZWxDb2xvciIsIkRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfcmVmNCIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJGcmFnbWVudCIsIm1hcCIsImRzIiwiaWR4IiwiX2V4dGVuZHMyIiwidXJsIiwia2V5IiwidGl0bGUiLCJBdHRyaWJ1dGlvbiIsIl9yZWY1IiwiX3JlZjUkc2hvd0Jhc2VNYXBMaWJMIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiX3JlZjUkc2hvd09zbUJhc2VtYXBBIiwic2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbiIsImhhc01vYmlsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsIm1lbW9pemVkQ29tcG9uZW50cyIsInVzZU1lbW8iLCJTdHlsZWRBdHRyaWJ1dGlvbiIsIm1hcExpYkF0dHJpYnV0aW9uQ3NzQ2xhc3MiLCJFbmRIb3Jpem9udGFsRmxleGJveCIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJzaG93QmFzZU1hcEF0dHJpYnV0aW9uIiwiY3JlYXRlUmVmIiwiZGltZW5zaW9ucyIsIl90aGlzJHByb3BzIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsImNyZWF0ZVNlbGVjdG9yIiwic3BsaXRNYXBTZWxlY3RvciIsInNwbGl0TWFwSW5kZXhTZWxlY3RvciIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJsYXllck9yZGVyIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJmaWx0ZXJzIiwiZmlsdGVyc1NlbGVjdG9yIiwiZiIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsIk5PX01BUF9JRCIsInJnYlRvSGV4IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsImNvbG9yRG9tYWluIiwiZG9tYWluIiwiYWdncmVnYXRlZEJpbnMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMiIsIl90aGlzJHByb3BzMiRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJzZXRTdGF0ZSIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwiaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzIiwib25NYXBTdHlsZUxvYWRlZCIsIl9tYXAiLCJtYXBSZWYiLCJnZXRNYXAiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcDIiLCJvZmYiLCJvbiIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwib25NYXBSZW5kZXIiLCJnZXRNYXBib3hSZWYiLCJfcmVmNiIsImdsIiwic2V0TGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJlcnJvciIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJsYXllck1lc3NhZ2UiLCJlcnJvck1lc3NhZ2VGdWxsIiwibGFzdFNob3duIiwiX2RlY2tHTEVycm9yc0VsYXBzZWQiLCJEYXRlIiwibm93IiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJleHRyYUxheWVyTWVzc2FnZSIsIl90b3BNb3N0TGF5ZXIkcHJvcHMiLCJ0b3BNb3N0TGF5ZXIiLCJwYXJlbnQiLCJsYXllclNldElzVmFsaWQiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGVib3VuY2UiLCJfdGhpcyRjb250ZXh0Iiwidmlld1N0YXRlIiwiY29udGV4dCIsImdldEludGVybmFsVmlld1N0YXRlIiwib25WaWV3UG9ydENoYW5nZSIsIm9uVmlld1N0YXRlQ2hhbmdlIiwidmlld3BvcnQiLCJpc0V4cG9ydCIsInNldEludGVybmFsVmlld1N0YXRlIiwiX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQiLCJvbk1vdXNlTW92ZSIsIm5vcm1hbGl6ZUV2ZW50Iiwic2V0TG9hZGluZ0luZGljYXRvciIsImNoYW5nZSIsInBhbmVsSWQiLCJfdGhpcyRwcm9wczMiLCJ0b2dnbGVNYXBDb250cm9sIiwiTnVtYmVyIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIl90aGlzJF9tYXAzIiwiX3RoaXMkX21hcDQiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwiX29uRGVja0luaXRpYWxpemVkIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJfZGVjayIsIl9pc09LVG9SZW5kZXJFZmZlY3RzIiwidmlld0luZGV4IiwiX3RoaXMkX2RlY2siLCJ2aWV3TWFuYWdlciIsIl92aWV3cG9ydHMiLCJfcmVuZGVyTWFwUG9wb3ZlciIsIl90aGlzJHByb3BzJHZpc1N0YXRlJCIsImhvdmVySW5mbyIsIl90aGlzJHByb3BzNCIsIm1hcFN0YXRlIiwiX3RoaXMkcHJvcHM0JHZpc1N0YXRlIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJhbmltYXRpb25Db25maWciLCJfdGhpcyRwcm9wczQkdmlzU3RhdGUyIiwibW91c2VQb3MiLCJtb3VzZVBvc2l0aW9uIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsImNvbmZpZyIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsImxuZ0xhdCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJjb21wYXJlVHlwZSIsImNvbW1vblByb3AiLCJvbkNsb3NlIiwiX29uQ2xvc2VNYXBQb3BvdmVyIiwiem9vbSIsImNhbnZhcyIsInVuZGVmaW5lZCIsImZyb3plbiIsImlzQmFzZSIsIm9uU2V0RmVhdHVyZXMiLCJzZXRGZWF0dXJlcyIsInNldFNlbGVjdGVkRmVhdHVyZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwiX3JlbmRlckRlY2tPdmVybGF5IiwibGF5ZXJzRm9yRGVjayIsIl90aGlzJGNvbnRleHQyIiwiX3RoaXMyIiwib3B0aW9ucyIsInByaW1hcnlNYXAiLCJfdGhpcyRwcm9wczUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbFByb3BzIiwibWFwQ29udHJvbHMiLCJkZWNrUmVuZGVyQ2FsbGJhY2tzIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnMiLCJpc0ludGVyYWN0aXZlIiwiY2hpbGRyZW4iLCJtYXBEcmF3IiwiX3JlZjciLCJfcmVmNyRhY3RpdmUiLCJhY3RpdmUiLCJlZGl0b3JNZW51QWN0aXZlIiwiaXNFZGl0b3JEcmF3aW5nTW9kZSIsIkVkaXRvckxheWVyVXRpbHMiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxWaWV3U3RhdGUiLCJpbnRlcm5hbE1hcFN0YXRlIiwiZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXgiLCJzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QiLCJjb21wdXRlRGVja0xheWVycyIsImRlY2tHbExheWVycyIsImVkaXRvckluZm8iLCJzZWxlY3RlZEZlYXR1cmVJbmRleGVzIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yIiwiX29uTGF5ZXJIb3ZlciIsIm9uU2V0TGF5ZXJEb21haW4iLCJfb25MYXllclNldERvbWFpbiIsIm9uRmlsdGVyZWRJdGVtc0NoYW5nZSIsIl9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIm9uV01TRmVhdHVyZUluZm8iLCJfb25XTVNGZWF0dXJlSW5mbyIsImV4dHJhRGVja1BhcmFtcyIsImdldFRvb2x0aXAiLCJnZXRDdXJzb3IiLCJfcmVmOCIsImlzRHJhZ2dpbmciLCJlZGl0b3JDdXJzb3IiLCJlZmZlY3RzIiwiY29tcHV0ZURlY2tFZmZlY3RzIiwidmlld3MiLCJNYXBWaWV3IiwibGVnYWN5TWV0ZXJTaXplcyIsImFsbERlY2tHbFByb3BzIiwicGlja2luZ1JhZGl1cyIsIkRFRkFVTFRfUElDS0lOR19SQURJVVMiLCJvbkRlY2tSZW5kZXIiLCJfb25Nb3VzZU1vdmVEZWJvdW5jZWQiLCJvbkxvYWQiLCJvbkRlY2tMb2FkIiwiY29udHJvbGxlciIsImRvdWJsZUNsaWNrWm9vbSIsImRyYWdSb3RhdGUiLCJpbml0aWFsVmlld1N0YXRlIiwib25CZWZvcmVSZW5kZXIiLCJfb25CZWZvcmVSZW5kZXIiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9uSG92ZXIiLCJyZXMiLCJfb25MYXllckhvdmVyRGVib3VuY2VkIiwib25DbGljayIsInNyY0V2ZW50Iiwib25FcnJvciIsIl9vbkRlY2tFcnJvciIsImNvbXAiLCJkZWNrIiwib25XZWJHTEluaXRpYWxpemVkIiwib25BZnRlclJlbmRlciIsIm9uRGVja0FmdGVyUmVuZGVyIiwiYW55QWN0aXZlTGF5ZXJMb2FkaW5nIiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSIsIm1hcGJveExheWVycyIsIm1hcGJveExheWVyc1NlbGVjdG9yIiwidXBkYXRlTWFwYm94TGF5ZXJzIiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwiaXNTdHlsZUxvYWRlZCIsIl9yZW5kZXJNYXAiLCJfbWFwU3R5bGUkbWFwU3R5bGVzIiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiX3RoaXMkY29udGV4dDMiLCJfbWFwU3R5bGUkYm90dG9tTWFwU3QiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkTWFwQ29tcG8iLCJNYXBDb21wb25lbnQiLCJNYXAiLCJsb2NhbGUiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRvcE1hcENvbnRhaW5lclByb3BzIiwiX3RoaXMkcHJvcHM2JGRhdGFzZXRBIiwiX3RoaXMkcHJvcHM2JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiY3VycmVudFN0eWxlIiwibWFwU3R5bGVzIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsIm1hcExpYiIsImdldE1hcExpYiIsInRyYW5zZm9ybVJlcXVlc3QiLCJoYXNHZW9jb2RlckxheWVyIiwiZmluZCIsImwiLCJHRU9DT0RFUl9MQVlFUl9JRCIsImlzU3BsaXQiLCJib3R0b21NYXBTdHlsZSIsIkVNUFRZX01BUEJPWF9TVFlMRSIsIl9zZXRNYXBSZWYiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImdlb2NvZGVyIiwibWFwQ29udHJvbFRvcCIsIm9uVG9nZ2xlUGVyc3BlY3RpdmUiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwibWFwSGVpZ2h0Iiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwib25EZWxldGVGZWF0dXJlIiwiZGVsZXRlRmVhdHVyZSIsIm9uU2VsZWN0Iiwib25Ub2dnbGVQb2x5Z29uRmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckxheWVyIiwidmlzaWJsZSIsInRvcE1hcFN0eWxlIiwiaXNWaXNpYmxlIiwic3RhdGUiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMiIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZzIiLCJfdGhpcyRwcm9wczciLCJtYXBDb250ZW50Iiwic3R5bGVTZWxlY3RvciIsIm9uQ29udGV4dE1lbnUiLCJwcmV2ZW50RGVmYXVsdCIsIm92ZXJsYXlCbGVuZGluZyIsIkNvbXBvbmVudCIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJ3aXRoVGhlbWUiXSwic291cmNlcyI6WyIuLi9zcmMvbWFwLWNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNYXAsIE1hcFJlZn0gZnJvbSAncmVhY3QtbWFwLWdsJztcbmltcG9ydCB7UGlja0luZm99IGZyb20gJ0BkZWNrLmdsL2NvcmUvbGliL2RlY2snO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yLCBTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHt1c2VEcm9wcGFibGV9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCB7XG4gIFN0eWxlZE1hcENvbnRhaW5lcixcbiAgU3R5bGVkQXR0cmlidXRpb24sXG4gIEVuZEhvcml6b250YWxGbGV4Ym94XG59IGZyb20gJy4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcblxuLy8gdXRpbHNcbmltcG9ydCB7XG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzLFxuICB1cGRhdGVNYXBib3hMYXllcnMsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgRWRpdG9yTGF5ZXJVdGlscyxcbiAgQWdncmVnYXRlZEJpblxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE1hcFN0YXRlLFxuICBNYXBDb250cm9scyxcbiAgVmlld3BvcnQsXG4gIFNwbGl0TWFwLFxuICBTcGxpdE1hcExheWVyc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBzZXRMYXllckJsZW5kaW5nLFxuICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyxcbiAgaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzLFxuICBnZXRCYXNlTWFwTGlicmFyeSxcbiAgQmFzZU1hcExpYnJhcnlDb25maWcsXG4gIHRyYW5zZm9ybVJlcXVlc3QsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBoYXNNb2JpbGVXaWR0aCxcbiAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyxcbiAgb25WaWV3UG9ydENoYW5nZSxcbiAgZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUsXG4gIG5vcm1hbGl6ZUV2ZW50LFxuICByZ2JUb0hleCxcbiAgY29tcHV0ZURlY2tFZmZlY3RzLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgR2V0TWFwUmVmXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHticmVha1BvaW50VmFsdWVzfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5cbi8vIGRlZmF1bHQtc2V0dGluZ3NcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FLFxuICBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICBOT19NQVBfSUQsXG4gIEVNUFRZX01BUEJPWF9TVFlMRVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7RFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRX0gZnJvbSAnLi9jb21tb24vZG5kLWxheWVyLWl0ZW1zJztcbi8vIENvbnRleHRzXG5pbXBvcnQge01hcFZpZXdTdGF0ZUNvbnRleHR9IGZyb20gJy4vbWFwLXZpZXctc3RhdGUtY29udGV4dCc7XG5cbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge01hcFZpZXd9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWFwU3R5bGUsXG4gIGFyZUFueURlY2tMYXllcnNMb2FkaW5nLFxuICBjb21wdXRlRGVja0xheWVycyxcbiAgZ2V0TGF5ZXJIb3ZlclByb3AsXG4gIExheWVySG92ZXJQcm9wLFxuICBwcmVwYXJlTGF5ZXJzRm9yRGVjayxcbiAgcHJlcGFyZUxheWVyc1RvUmVuZGVyLFxuICBMYXllcnNUb1JlbmRlclxufSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCBMb2FkaW5nSW5kaWNhdG9yIGZyb20gJy4vbG9hZGluZy1pbmRpY2F0b3InO1xuXG4vLyBEZWJvdW5jZSB0aGUgcHJvcGFnYXRpb24gb2Ygdmlld3BvcnQgY2hhbmdlIGFuZCBtb3VzZSBtb3ZlcyB0byByZWR1eCBzdG9yZS5cbi8vIFRoaXMgaXMgdG8gYXZvaWQgdG9vIG1hbnkgcmVuZGVycyBvZiBvdGhlciBjb21wb25lbnRzIHdoZW4gdGhlIG1hcCBpc1xuLy8gYmVpbmcgcGFubmVkL3pvb21lZCAobGVhZGluZyB0byBsYWdneSBiYXNlbWFwL2RlY2sgc3luY2luZykuXG5jb25zdCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUgPSAxMDtcbmNvbnN0IERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFID0gMTA7XG5cbi8vIEhvdyBsb25nIHNob3VsZCB3ZSB3YWl0IGJldHdlZW4gbGF5ZXIgbG9hZGluZyBzdGF0ZSBjaGFuZ2VzIGJlZm9yZSB0cmlnZ2VyaW5nIGEgVUkgdXBkYXRlXG5jb25zdCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSA9IDEwMDtcblxuY29uc3QgTUFQX1NUWUxFOiB7W2tleTogc3RyaW5nXTogUmVhY3QuQ1NTUHJvcGVydGllc30gPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfSxcbiAgdG9wOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gIH1cbn07XG5cbmNvbnN0IExPQ0FMRV9DT0RFU19BUlJBWSA9IE9iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyk7XG5cbmludGVyZmFjZSBTdHlsZWRNYXBDb250YWluZXJQcm9wcyB7XG4gICRtaXhCbGVuZE1vZGU/OiBzdHJpbmc7XG4gICRtYXBMaWJDc3NDbGFzczogc3RyaW5nO1xufVxuXG5jb25zdCBTdHlsZWRNYXAgPSBzdHlsZWQoU3R5bGVkTWFwQ29udGFpbmVyKTxTdHlsZWRNYXBDb250YWluZXJQcm9wcz4oXG4gICh7JG1peEJsZW5kTW9kZSA9ICdub3JtYWwnLCAkbWFwTGliQ3NzQ2xhc3N9KSA9PiBgXG4gICNkZWZhdWx0LWRlY2tnbC1vdmVybGF5IHtcbiAgICBtaXgtYmxlbmQtbW9kZTogJHskbWl4QmxlbmRNb2RlfTtcbiAgfTtcbiAgKlskeyRtYXBMaWJDc3NDbGFzc30tY2hpbGRyZW5dIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbmBcbik7XG5cbmNvbnN0IE1BUEJPWEdMX1NUWUxFX1VQREFURSA9ICdzdHlsZS5sb2FkJztcbmNvbnN0IE1BUEJPWEdMX1JFTkRFUiA9ICdyZW5kZXInO1xuY29uc3Qgbm9wID0gKCkgPT4ge1xuICByZXR1cm47XG59O1xuXG50eXBlIE1hcExpYkxvZ29Qcm9wcyA9IHtcbiAgYmFzZU1hcExpYnJhcnlDb25maWc6IEJhc2VNYXBMaWJyYXJ5Q29uZmlnO1xufTtcblxuY29uc3QgTWFwTGliTG9nbyA9ICh7YmFzZU1hcExpYnJhcnlDb25maWd9OiBNYXBMaWJMb2dvUHJvcHMpID0+IChcbiAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbG9nb1wiPlxuICAgIEJhc2VtYXAgYnk6XG4gICAgPGFcbiAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogJzVweCd9fVxuICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc30tY3RybC1sb2dvYH1cbiAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGhyZWY9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYlVybH1cbiAgICAgIGFyaWEtbGFiZWw9e2Ake2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYk5hbWV9IGxvZ29gfVxuICAgIC8+XG4gIDwvZGl2PlxuKTtcblxuaW50ZXJmYWNlIFN0eWxlZERyb3BwYWJsZVByb3BzIHtcbiAgaXNPdmVyOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREcm9wcGFibGUgPSBzdHlsZWQuZGl2PFN0eWxlZERyb3BwYWJsZVByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuaXNPdmVyID8gcHJvcHMudGhlbWUuZG5kT3ZlckJhY2tncm91bmRDb2xvciA6ICdub25lJyl9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IHByb3BzID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZSA9ICh7Y29udGFpbmVySWR9KSA9PiB7XG4gIGNvbnN0IHtpc092ZXIsIHNldE5vZGVSZWZ9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogY29udGFpbmVySWQsXG4gICAgZGF0YToge3R5cGU6IERST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUsIGluZGV4OiBjb250YWluZXJJZH0sXG4gICAgZGlzYWJsZWQ6ICFjb250YWluZXJJZFxuICB9KTtcblxuICByZXR1cm4gPFN0eWxlZERyb3BwYWJsZSByZWY9e3NldE5vZGVSZWZ9IGlzT3Zlcj17aXNPdmVyfSAvPjtcbn07XG5cbmludGVyZmFjZSBTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyUHJvcHMge1xuICBpc1BhbG06IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZERhdGFzZXRBdHRyaWJ1dGlvbnNDb250YWluZXIgPSBzdHlsZWQuZGl2PFN0eWxlZERhdGFzZXRBdHRyaWJ1dGlvbnNDb250YWluZXJQcm9wcz5gXG4gIG1heC13aWR0aDogJHtwcm9wcyA9PiAocHJvcHMuaXNQYWxtID8gJzIwMHB4JyA6ICczMDBweCcpfTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3J9O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICBsaW5lLWhlaWdodDogJHtwcm9wcyA9PiAocHJvcHMuaXNQYWxtID8gJzFlbScgOiAnMS40ZW0nKX07XG5cbiAgJjpob3ZlciB7XG4gICAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7XG4gIH1cbmA7XG5cbmNvbnN0IERhdGFzZXRBdHRyaWJ1dGlvbnMgPSAoe1xuICBkYXRhc2V0QXR0cmlidXRpb25zLFxuICBpc1BhbG1cbn06IHtcbiAgZGF0YXNldEF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGlzUGFsbTogYm9vbGVhbjtcbn0pID0+IChcbiAgPD5cbiAgICB7ZGF0YXNldEF0dHJpYnV0aW9ucz8ubGVuZ3RoID8gKFxuICAgICAgPFN0eWxlZERhdGFzZXRBdHRyaWJ1dGlvbnNDb250YWluZXIgaXNQYWxtPXtpc1BhbG19PlxuICAgICAgICB7ZGF0YXNldEF0dHJpYnV0aW9ucy5tYXAoKGRzLCBpZHgpID0+IChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgey4uLihkcy51cmwgPyB7aHJlZjogZHMudXJsfSA6IG51bGwpfVxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAga2V5PXtgJHtkcy50aXRsZX1fJHtpZHh9YH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZHMudGl0bGV9XG4gICAgICAgICAgICB7aWR4ICE9PSBkYXRhc2V0QXR0cmlidXRpb25zLmxlbmd0aCAtIDEgPyAnLCAnIDogbnVsbH1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICkpfVxuICAgICAgPC9TdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyPlxuICAgICkgOiBudWxsfVxuICA8Lz5cbik7XG5cbnR5cGUgQXR0cmlidXRpb25Qcm9wcyA9IHtcbiAgc2hvd0Jhc2VNYXBMaWJMb2dvOiBib29sZWFuO1xuICBzaG93T3NtQmFzZW1hcEF0dHJpYnV0aW9uOiBib29sZWFuO1xuICBkYXRhc2V0QXR0cmlidXRpb25zOiBEYXRhc2V0QXR0cmlidXRpb25bXTtcbiAgYmFzZU1hcExpYnJhcnlDb25maWc6IEJhc2VNYXBMaWJyYXJ5Q29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0aW9uOiBSZWFjdC5GQzxBdHRyaWJ1dGlvblByb3BzPiA9ICh7XG4gIHNob3dCYXNlTWFwTGliTG9nbyA9IHRydWUsXG4gIHNob3dPc21CYXNlbWFwQXR0cmlidXRpb24gPSBmYWxzZSxcbiAgZGF0YXNldEF0dHJpYnV0aW9ucyxcbiAgYmFzZU1hcExpYnJhcnlDb25maWdcbn06IEF0dHJpYnV0aW9uUHJvcHMpID0+IHtcbiAgY29uc3QgaXNQYWxtID0gaGFzTW9iaWxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcyk7XG5cbiAgY29uc3QgbWVtb2l6ZWRDb21wb25lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzaG93QmFzZU1hcExpYkxvZ28pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRBdHRyaWJ1dGlvblxuICAgICAgICAgIG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgICBtYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAgPEVuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgICAgICAgPERhdGFzZXRBdHRyaWJ1dGlvbnMgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc30gaXNQYWxtPXtpc1BhbG19IC8+XG4gICAgICAgICAgICB7c2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbiA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbGlua1wiPlxuICAgICAgICAgICAgICAgIHtkYXRhc2V0QXR0cmlidXRpb25zPy5sZW5ndGggPyA8c3BhbiBjbGFzc05hbWU9XCJwaXBlLXNlcGFyYXRvclwiPnw8L3NwYW4+IDogbnVsbH1cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICDCqSBPcGVuU3RyZWV0TWFwXG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvRW5kSG9yaXpvbnRhbEZsZXhib3g+XG4gICAgICAgIDwvU3R5bGVkQXR0cmlidXRpb24+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQXR0cmlidXRpb25cbiAgICAgICAgbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICBtYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzfVxuICAgICAgPlxuICAgICAgICA8RW5kSG9yaXpvbnRhbEZsZXhib3g+XG4gICAgICAgICAgPERhdGFzZXRBdHRyaWJ1dGlvbnMgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc30gaXNQYWxtPXtpc1BhbG19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbGlua1wiPlxuICAgICAgICAgICAge2RhdGFzZXRBdHRyaWJ1dGlvbnM/Lmxlbmd0aCA/IDxzcGFuIGNsYXNzTmFtZT1cInBpcGUtc2VwYXJhdG9yXCI+fDwvc3Bhbj4gOiBudWxsfVxuICAgICAgICAgICAge2lzUGFsbSA/IDxNYXBMaWJMb2dvIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ30gLz4gOiBudWxsfVxuICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8va2VwbGVyLmdsL3BvbGljeS9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgICAgICAgIMKpIGtlcGxlci5nbCB8eycgJ31cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIHshaXNQYWxtID8gPE1hcExpYkxvZ28gYmFzZU1hcExpYnJhcnlDb25maWc9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfSAvPiA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRW5kSG9yaXpvbnRhbEZsZXhib3g+XG4gICAgICA8L1N0eWxlZEF0dHJpYnV0aW9uPlxuICAgICk7XG4gIH0sIFtcbiAgICBzaG93QmFzZU1hcExpYkxvZ28sXG4gICAgc2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbixcbiAgICBkYXRhc2V0QXR0cmlidXRpb25zLFxuICAgIGlzUGFsbSxcbiAgICBiYXNlTWFwTGlicmFyeUNvbmZpZ1xuICBdKTtcblxuICByZXR1cm4gbWVtb2l6ZWRDb21wb25lbnRzO1xufTtcblxuTWFwQ29udGFpbmVyRmFjdG9yeS5kZXBzID0gW01hcFBvcG92ZXJGYWN0b3J5LCBNYXBDb250cm9sRmFjdG9yeSwgRWRpdG9yRmFjdG9yeV07XG5cbnR5cGUgTWFwYm94U3R5bGUgPSBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQ7XG50eXBlIFByb3BTZWxlY3RvcjxSPiA9IFNlbGVjdG9yPE1hcENvbnRhaW5lclByb3BzLCBSPjtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBDb250YWluZXJQcm9wcyB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIG1hcFN0eWxlOiB7Ym90dG9tTWFwU3R5bGU/OiBNYXBib3hTdHlsZTsgdG9wTWFwU3R5bGU/OiBNYXBib3hTdHlsZX0gJiBNYXBTdHlsZTtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsOiBzdHJpbmc7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuXG4gIC8vIG9wdGlvbmFsXG4gIHByaW1hcnk/OiBib29sZWFuOyAvLyBwcmltYXJ5IG9uZSB3aWxsIGJlIHJlcG9ydGluZyBpdHMgc2l6ZSB0byBhcHBTdGF0ZVxuICByZWFkT25seT86IGJvb2xlYW47XG4gIGlzRXhwb3J0PzogYm9vbGVhbjtcbiAgLy8gb25NYXBTdHlsZUxvYWRlZD86IChtYXA6IG1hcGxpYnJlZ2wuTWFwIHwgUmV0dXJuVHlwZTxNYXBSZWZbJ2dldE1hcCddPiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFJlbmRlcj86IChtYXA6IEdldE1hcFJlZiB8IG51bGwpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86IChtYXBib3g/OiBNYXBSZWYgfCBudWxsLCBpbmRleD86IG51bWJlcikgPT4gdm9pZDtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGRlbGV0ZU1hcExhYmVscz86IChjb250YWluZXJJZDogc3RyaW5nLCBsYXllcklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNvbnRhaW5lcklkPzogbnVtYmVyO1xuXG4gIGlzTG9hZGluZ0luZGljYXRvclZpc2libGU/OiBib29sZWFuO1xuICBhY3RpdmVTaWRlUGFuZWw6IHN0cmluZyB8IG51bGw7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuXG4gIGxvY2FsZT86IGFueTtcbiAgdGhlbWU/OiBhbnk7XG4gIGVkaXRvcj86IGFueTtcbiAgTWFwQ29tcG9uZW50PzogdHlwZW9mIE1hcDtcbiAgZGVja0dsUHJvcHM/OiBhbnk7XG4gIG9uRGVja0luaXRpYWxpemVkPzogKGE6IGFueSwgYjogYW55KSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3cG9ydDogVmlld3BvcnQpID0+IHZvaWQ7XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgdHJhbnNmb3JtUmVxdWVzdD86ICh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlPzogc3RyaW5nKSA9PiB7dXJsOiBzdHJpbmd9O1xuXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM/OiBEYXRhc2V0QXR0cmlidXRpb25bXTtcblxuICBnZW5lcmF0ZU1hcGJveExheWVycz86IHR5cGVvZiBnZW5lcmF0ZU1hcGJveExheWVycztcbiAgZ2VuZXJhdGVEZWNrR0xMYXllcnM/OiB0eXBlb2YgY29tcHV0ZURlY2tMYXllcnM7XG5cbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG5cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlY2tSZW5kZXJDYWxsYmFja3M/OiB7XG4gICAgb25EZWNrTG9hZD86ICgpID0+IHZvaWQ7XG4gICAgb25EZWNrUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgICBvbkRlY2tBZnRlclJlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBhbnk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hcENvbnRhaW5lckZhY3RvcnkoXG4gIE1hcFBvcG92ZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcFBvcG92ZXJGYWN0b3J5PixcbiAgTWFwQ29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udHJvbEZhY3Rvcnk+LFxuICBFZGl0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVkaXRvckZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPE1hcENvbnRhaW5lclByb3BzPiB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudDxNYXBDb250YWluZXJQcm9wcz4ge1xuICAgIGRpc3BsYXlOYW1lID0gJ01hcENvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlID0gTWFwVmlld1N0YXRlQ29udGV4dDtcblxuICAgIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hcFZpZXdTdGF0ZUNvbnRleHQ+O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIE1hcENvbXBvbmVudDogTWFwLFxuICAgICAgZGVja0dsUHJvcHM6IHt9LFxuICAgICAgaW5kZXg6IDAsXG4gICAgICBwcmltYXJ5OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7XG4gICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYXR0cmlidXRpb24gc2hvdWxkIGJlIHZpc2libGUgYmFzZWQgdGhlIHJlc3VsdCBvZiBsb2FkaW5nIHRoZSBtYXAgc3R5bGVcbiAgICAgIHNob3dCYXNlTWFwQXR0cmlidXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgLy8gdW5iaW5kIG1hcGJveGdsIGV2ZW50IGxpc3RlbmVyXG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgbm9wKTtcbiAgICAgICAgdGhpcy5fbWFwPy5vZmYoTUFQQk9YR0xfUkVOREVSLCBub3ApO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBfZGVjazogYW55ID0gbnVsbDtcbiAgICBfbWFwOiBHZXRNYXBSZWYgfCBudWxsID0gbnVsbDtcbiAgICBfcmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIF9kZWNrR0xFcnJvcnNFbGFwc2VkOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG5cbiAgICBwcmV2aW91c0xheWVycyA9IHtcbiAgICAgIC8vIFtsYXllcnMuaWRdOiBtYXBib3hMYXllckNvbmZpZ1xuICAgIH07XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgaW5kZXh9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChwcmltYXJ5KSB7XG4gICAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGRpbWVuc2lvbnMgJiYgZGltZW5zaW9ucy53aWR0aCA+IDAgJiYgZGltZW5zaW9ucy5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChkaW1lbnNpb25zLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJzO1xuICAgIGxheWVyRGF0YVNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyRGF0YTtcbiAgICBzcGxpdE1hcFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBbXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHM7XG4gICAgc3BsaXRNYXBJbmRleFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8bnVtYmVyIHwgdW5kZWZpbmVkPiA9IHByb3BzID0+IHByb3BzLmluZGV4O1xuICAgIG1hcExheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBMYXllcnMgfCBudWxsIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5zcGxpdE1hcFNlbGVjdG9yLFxuICAgICAgdGhpcy5zcGxpdE1hcEluZGV4U2VsZWN0b3IsXG4gICAgICBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzXG4gICAgKTtcbiAgICBsYXllck9yZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJPcmRlciddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXI7XG4gICAgbGF5ZXJzVG9SZW5kZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPExheWVyc1RvUmVuZGVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcExheWVyc1NlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc1RvUmVuZGVyXG4gICAgKTtcbiAgICBsYXllcnNGb3JEZWNrU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc0ZvckRlY2tcbiAgICApO1xuICAgIGZpbHRlcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmZpbHRlcnM7XG4gICAgcG9seWdvbkZpbHRlcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmlsdGVyc1NlbGVjdG9yLCBmaWx0ZXJzID0+XG4gICAgICBmaWx0ZXJzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZSlcbiAgICApO1xuICAgIGZlYXR1cmVzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gICAgc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMucG9seWdvbkZpbHRlcnNTZWxlY3RvcixcbiAgICAgIHRoaXMuZmVhdHVyZXNTZWxlY3RvcixcbiAgICAgIChwb2x5Z29uRmlsdGVycywgZmVhdHVyZXMpID0+ICh7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5jb25jYXQocG9seWdvbkZpbHRlcnMubWFwKGYgPT4gZi52YWx1ZSkpXG4gICAgICB9KVxuICAgICk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIE5vIG92ZXJsb2FkIG1hdGNoZXMgdGhpcyBjYWxsXG4gICAgc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yLFxuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVTZWxlY3RvcixcbiAgICAgIChjb2xsZWN0aW9uLCBzZWxlY3RlZEZlYXR1cmUpID0+XG4gICAgICAgIGNvbGxlY3Rpb24uZmVhdHVyZXMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlPy5pZClcbiAgICApO1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlLFxuICAgICAgdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gW10gOiBbdmFsdWVdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5nZW5lcmF0ZU1hcGJveExheWVycyA/PyBnZW5lcmF0ZU1hcGJveExheWVycztcblxuICAgIG1hcGJveExheWVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJPcmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5nZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IsXG4gICAgICAobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIsIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QpID0+XG4gICAgICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIpXG4gICAgKTtcblxuICAgIC8vIG1lcmdlIGluIGEgYmFja2dyb3VuZC1jb2xvciBzdHlsZSBpZiB0aGUgYmFzZW1hcCBjaG9pY2UgaXMgTk9fTUFQX0lEXG4gICAgLy8gdXNlZCBieSA8U3R5bGVkTWFwPiBpbmxpbmUgc3R5bGUgcHJvcFxuICAgIG1hcFN0eWxlVHlwZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlO1xuICAgIG1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgc3R5bGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5tYXBTdHlsZVR5cGVTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIChzdHlsZVR5cGUsIGJhY2tncm91bmRDb2xvcikgPT4gKHtcbiAgICAgICAgLi4uTUFQX1NUWUxFLmNvbnRhaW5lcixcbiAgICAgICAgLi4uKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEID8ge2JhY2tncm91bmRDb2xvcjogcmdiVG9IZXgoYmFja2dyb3VuZENvbG9yKX0gOiB7fSlcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qIGNvbXBvbmVudCBwcml2YXRlIGZ1bmN0aW9ucyAqL1xuICAgIF9vbkNsb3NlTWFwUG9wb3ZlciA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhudWxsKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlciA9IChfaWR4OiBudW1iZXIsIGluZm86IFBpY2tJbmZvPGFueT4gfCBudWxsKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoaW5mbywgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyU2V0RG9tYWluID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICB2YWx1ZToge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IEFnZ3JlZ2F0ZWRCaW5bXX1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIHtcbiAgICAgICAgY29sb3JEb21haW46IHZhbHVlLmRvbWFpbixcbiAgICAgICAgYWdncmVnYXRlZEJpbnM6IHZhbHVlLmFnZ3JlZ2F0ZWRCaW5zXG4gICAgICB9IGFzIFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPik7XG4gICAgfTtcblxuICAgIF9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSA9IChpZHgsIGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UodGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XSwgZXZlbnQpO1xuICAgIH07XG5cbiAgICBfb25XTVNGZWF0dXJlSW5mbyA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgZGF0YToge1xuICAgICAgICBmZWF0dXJlSW5mbzogQXJyYXk8e25hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZ30+IHwgc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgY29vcmRpbmF0ZT86IFtudW1iZXIsIG51bWJlcl0gfCBudWxsO1xuICAgICAgfVxuICAgICkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMud21zRmVhdHVyZUluZm8oXG4gICAgICAgIHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sXG4gICAgICAgIGRhdGEuZmVhdHVyZUluZm8sXG4gICAgICAgIGRhdGEuY29vcmRpbmF0ZVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX2hhbmRsZU1hcFRvZ2dsZUxheWVyID0gbGF5ZXJJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXg6IG1hcEluZGV4ID0gMCwgdmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICBfb25NYXBib3hTdHlsZVVwZGF0ZSA9IHVwZGF0ZSA9PiB7XG4gICAgICAvLyBmb3JjZSByZWZyZXNoIG1hcGJveGdsIGxheWVyc1xuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IHt9O1xuICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG5cbiAgICAgIGlmICh1cGRhdGUgJiYgdXBkYXRlLnN0eWxlKSB7XG4gICAgICAgIC8vIE5vIGF0dHJpYnV0aW9ucyBhcmUgbmVlZGVkIGlmIHRoZSBzdHlsZSBkb2Vzbid0IHJlZmVyZW5jZSBNYXBib3ggc291cmNlc1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzaG93QmFzZU1hcEF0dHJpYnV0aW9uOlxuICAgICAgICAgICAgaXNTdHlsZVVzaW5nTWFwYm94VGlsZXModXBkYXRlLnN0eWxlKSB8fCAhaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzKHVwZGF0ZS5zdHlsZSlcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCh0aGlzLl9tYXApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfc2V0TWFwUmVmID0gbWFwUmVmID0+IHtcbiAgICAgIC8vIEhhbmRsZSBjaGFuZ2Ugb2YgdGhlIG1hcCBsaWJyYXJ5XG4gICAgICBpZiAodGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICBjb25zdCBtYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIGlmIChtYXAgJiYgdGhpcy5fbWFwICE9PSBtYXApIHtcbiAgICAgICAgICB0aGlzLl9tYXA/Lm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIG5vcCk7XG4gICAgICAgICAgdGhpcy5fbWFwPy5vZmYoTUFQQk9YR0xfUkVOREVSLCBub3ApO1xuICAgICAgICAgIHRoaXMuX21hcCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9tYXAgJiYgbWFwUmVmKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcFJlZi5nZXRNYXAoKTtcbiAgICAgICAgLy8gaSBub3RpY2VkIGluIGNlcnRhaW4gY29udGV4dCB3ZSBkb24ndCBhY2Nlc3MgdGhlIGFjdHVhbCBtYXAgZWxlbWVudFxuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBiaW5kIG1hcGJveGdsIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9SRU5ERVIsICgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25NYXBSZW5kZXIodGhpcy5fbWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5nZXRNYXBib3hSZWYpIHtcbiAgICAgICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgY2FuIGdhaW4gYWNjZXNzIHRvIG91ciBNYXBib3hHbE1hcCBieVxuICAgICAgICAvLyBwcm92aWRpbmcgdGhpcyBjYWxsYmFjay4gTm90ZSB0aGF0ICdtYXBib3gnIHdpbGwgYmUgbnVsbCB3aGVuIHRoZVxuICAgICAgICAvLyByZWYgaXMgdW5zZXQgKGUuZy4gd2hlbiBhIHNwbGl0IG1hcCBpcyBjbG9zZWQpLlxuICAgICAgICB0aGlzLnByb3BzLmdldE1hcGJveFJlZihtYXBSZWYsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfb25EZWNrSW5pdGlhbGl6ZWQoZ2wpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQodGhpcy5fZGVjaywgZ2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEpIEFsbG93IGVmZmVjdHMgb25seSBmb3IgdGhlIGZpcnN0IHZpZXcuXG4gICAgICogMikgUHJldmVudCBlZmZlY3Q6cHJlUmVuZGVyIGNhbGwgd2l0aG91dCB2YWxpZCBnZW5lcmF0ZWQgdmlld3BvcnRzLlxuICAgICAqIEBwYXJhbSB2aWV3SW5kZXggVmlldyBpbmRleC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWZmZWN0cyBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBfaXNPS1RvUmVuZGVyRWZmZWN0cyh2aWV3SW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhdmlld0luZGV4ICYmIEJvb2xlYW4odGhpcy5fZGVjaz8udmlld01hbmFnZXI/Ll92aWV3cG9ydHM/Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKHtnbH0pID0+IHtcbiAgICAgIHNldExheWVyQmxlbmRpbmcoZ2wsIHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJCbGVuZGluZyk7XG4gICAgfTtcblxuICAgIF9vbkRlY2tFcnJvciA9IChlcnJvciwgbGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5tZXNzYWdlIHx8ICd1bmtub3duLWVycm9yJztcbiAgICAgIGNvbnN0IGxheWVyTWVzc2FnZSA9IGxheWVyPy5pZCA/IGAgaW4gJHtsYXllci5pZH0gbGF5ZXJgIDogJyc7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VGdWxsID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSAnV2ViR0wgY29udGV4dCBpcyBsb3N0J1xuICAgICAgICAgID8gJ1lvdXIgR1BVIHdhcyBkaXNjb25uZWN0ZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3VyIGNvbXB1dGVyIGdvZXMgdG8gc2xlZXAuIEl0IGNhbiBhbHNvIG9jY3VyIGZvciBvdGhlciByZWFzb25zLCBzdWNoIGFzIGlmIHlvdSBhcmUgcnVubmluZyB0b28gbWFueSBHUFUgYXBwbGljYXRpb25zLidcbiAgICAgICAgICA6IGBBbiBlcnJvciBpbiBkZWNrLmdsOiAke2Vycm9yTWVzc2FnZX0ke2xheWVyTWVzc2FnZX0uYDtcblxuICAgICAgLy8gVGhyb3R0bGUgZXJyb3Igbm90aWZpY2F0aW9ucywgYXMgUmVhY3QgZG9lc24ndCBsaWtlIHRvbyBtYW55IHN0YXRlIGNoYW5nZXMgZnJvbSBoZXJlLlxuICAgICAgY29uc3QgbGFzdFNob3duID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXTtcbiAgICAgIGlmICghbGFzdFNob3duIHx8IGxhc3RTaG93biA8IERhdGUubm93KCkgLSBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSkge1xuICAgICAgICB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBNYXJrIGxheWVyIGFzIGludmFsaWRcbiAgICAgICAgbGV0IGV4dHJhTGF5ZXJNZXNzYWdlID0gJyc7XG4gICAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgICAgbGV0IHRvcE1vc3RMYXllciA9IGxheWVyO1xuICAgICAgICAgIHdoaWxlICh0b3BNb3N0TGF5ZXIucGFyZW50KSB7XG4gICAgICAgICAgICB0b3BNb3N0TGF5ZXIgPSB0b3BNb3N0TGF5ZXIucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG9wTW9zdExheWVyLnByb3BzPy5pZCkge1xuICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyU2V0SXNWYWxpZCh0b3BNb3N0TGF5ZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIGV4dHJhTGF5ZXJNZXNzYWdlID0gJ1RoZSBsYXllciBoYXMgYmVlbiBkaXNhYmxlZCBhbmQgaGlnaGxpZ2h0ZWQuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIG5vdGlmaWNhdGlvbiBvciB1cGRhdGUgZXhpc3Rpbmcgb25lIHdpdGggc2FtZSBpZC5cbiAgICAgICAgLy8gVXBkYXRlIGlzIHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBub3RpZmljYXRpb25zIGFzIHRoZXkgcHJvYmFibHkgYXJlIGdvaW5nIHRvIFwianVtcFwiIGJhc2VkIG9uIG9yZGVyIG9mIGVycm9ycy5cbiAgICAgICAgY29uc3Qge3VpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgJHtlcnJvck1lc3NhZ2VGdWxsfSAke2V4dHJhTGF5ZXJNZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogZXJyb3JNZXNzYWdlRnVsbCAvLyB0cmVhdCB0aGUgZXJyb3IgbWVzc2FnZSBhcyBpZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb25zICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcFBvcG92ZXIoKSB7XG4gICAgICAvLyB0aGlzIGNoZWNrIGlzIGZvciBsaW1pdGluZyB0aGUgZGlzcGxheSBvZiB0aGUgYDxNYXBQb3BvdmVyPmAgdG8gdGhlIGA8TWFwQ29udGFpbmVyPmAgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aFxuICAgICAgLy8gdGhlIERlY2tHTCBvbkhvdmVyIGV2ZW50IGhhbmRsZXIgYWRkcyBhIGBtYXBJbmRleGAgcHJvcGVydHkgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBgaG92ZXJJbmZvYCBvYmplY3Qgb2YgYHZpc1N0YXRlYFxuICAgICAgaWYgKHRoaXMucHJvcHMuaW5kZXggIT09IHRoaXMucHJvcHMudmlzU3RhdGUuaG92ZXJJbmZvPy5tYXBJbmRleCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogbW92ZSB0aGlzIGludG8gcmVkdWNlciBzbyBpdCBjYW4gYmUgdGVzdGVkXG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZToge1xuICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbW91c2VQb3M6IHttb3VzZVBvc2l0aW9uLCBjb29yZGluYXRlLCBwaW5uZWR9XG4gICAgICAgIH1cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGlmICghbW91c2VQb3NpdGlvbiB8fCAhaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5ZXJIb3ZlclByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgZGF0YXNldHNcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wYXJlTW9kZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnXG4gICAgICAgID8gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZU1vZGVcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgbGV0IHBpbm5lZFBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuICAgICAgbGV0IGxheWVyUGlubmVkUHJvcDogTGF5ZXJIb3ZlclByb3AgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChwaW5uZWQgfHwgY2xpY2tlZCkge1xuICAgICAgICAvLyBwcm9qZWN0IGxuZ2xhdCB0byBzY3JlZW4gc28gdGhhdCB0b29sdGlwIGZvbGxvd3MgdGhlIG9iamVjdCBvbiB6b29tXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUobWFwU3RhdGUpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBjbGlja2VkID8gY2xpY2tlZC5jb29yZGluYXRlIDogcGlubmVkLmNvb3JkaW5hdGU7XG4gICAgICAgIHBpbm5lZFBvc2l0aW9uID0gdGhpcy5fZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KTtcbiAgICAgICAgbGF5ZXJQaW5uZWRQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBob3ZlckluZm86IGNsaWNrZWQsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICAgIGRhdGFzZXRzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGF5ZXJIb3ZlclByb3AgJiYgbGF5ZXJQaW5uZWRQcm9wKSB7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AucHJpbWFyeURhdGEgPSBsYXllclBpbm5lZFByb3AuZGF0YTtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5jb21wYXJlVHlwZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1vblByb3AgPSB7XG4gICAgICAgIG9uQ2xvc2U6IHRoaXMuX29uQ2xvc2VNYXBQb3BvdmVyLFxuICAgICAgICB6b29tOiBtYXBTdGF0ZS56b29tLFxuICAgICAgICBjb250YWluZXI6IHRoaXMuX2RlY2sgPyB0aGlzLl9kZWNrLmNhbnZhcyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAge2xheWVyUGlubmVkUHJvcCAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB7Li4ucGlubmVkUG9zaXRpb259XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJQaW5uZWRQcm9wfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgKHBpbm5lZCB8fCB7fSkuY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgZnJvemVuPXt0cnVlfVxuICAgICAgICAgICAgICBpc0Jhc2U9e2NvbXBhcmVNb2RlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2xheWVySG92ZXJQcm9wICYmICghbGF5ZXJQaW5uZWRQcm9wIHx8IGNvbXBhcmVNb2RlKSAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB4PXttb3VzZVBvc2l0aW9uWzBdfVxuICAgICAgICAgICAgICB5PXttb3VzZVBvc2l0aW9uWzFdfVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVySG92ZXJQcm9wfVxuICAgICAgICAgICAgICBmcm96ZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4gICAgX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCkge1xuICAgICAgY29uc3Qgc2NyZWVuQ29vcmQgPSAhdmlld3BvcnQgfHwgIWxuZ0xhdCA/IG51bGwgOiB2aWV3cG9ydC5wcm9qZWN0KGxuZ0xhdCk7XG4gICAgICByZXR1cm4gc2NyZWVuQ29vcmQgJiYge3g6IHNjcmVlbkNvb3JkWzBdLCB5OiBzY3JlZW5Db29yZFsxXX07XG4gICAgfVxuXG4gICAgX3JlbmRlckRlY2tPdmVybGF5KFxuICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgIG9wdGlvbnM6IHtwcmltYXJ5TWFwOiBib29sZWFuOyBpc0ludGVyYWN0aXZlPzogYm9vbGVhbjsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGV9ID0ge1xuICAgICAgICBwcmltYXJ5TWFwOiBmYWxzZVxuICAgICAgfVxuICAgICkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIGRlY2tHbFByb3BzLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3MsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBnZW5lcmF0ZURlY2tHTExheWVycyxcbiAgICAgICAgb25Nb3VzZU1vdmVcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7aG92ZXJJbmZvLCBlZGl0b3J9ID0gdmlzU3RhdGU7XG4gICAgICBjb25zdCB7cHJpbWFyeU1hcCwgaXNJbnRlcmFjdGl2ZSwgY2hpbGRyZW59ID0gb3B0aW9ucztcblxuICAgICAgLy8gZGlzYWJsZSBkb3VibGUgY2xpY2sgem9vbSB3aGVuIGVkaXRvciBpcyBpbiBhbnkgZHJhdyBtb2RlXG4gICAgICBjb25zdCB7bWFwRHJhd30gPSBtYXBDb250cm9scztcbiAgICAgIGNvbnN0IHthY3RpdmU6IGVkaXRvck1lbnVBY3RpdmUgPSBmYWxzZX0gPSBtYXBEcmF3IHx8IHt9O1xuICAgICAgY29uc3QgaXNFZGl0b3JEcmF3aW5nTW9kZSA9IEVkaXRvckxheWVyVXRpbHMuaXNEcmF3aW5nQWN0aXZlKGVkaXRvck1lbnVBY3RpdmUsIGVkaXRvci5tb2RlKTtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGludGVybmFsTWFwU3RhdGUgPSB7Li4ubWFwU3RhdGUsIC4uLmludGVybmFsVmlld1N0YXRlfTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUoaW50ZXJuYWxNYXBTdGF0ZSk7XG5cbiAgICAgIGNvbnN0IGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCB7c2V0RmVhdHVyZXMsIG9uTGF5ZXJDbGljaywgc2V0U2VsZWN0ZWRGZWF0dXJlfSA9IHZpc1N0YXRlQWN0aW9ucztcblxuICAgICAgY29uc3QgZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QgPSBnZW5lcmF0ZURlY2tHTExheWVycyA/PyBjb21wdXRlRGVja0xheWVycztcbiAgICAgIGNvbnN0IGRlY2tHbExheWVycyA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kKFxuICAgICAgICB7XG4gICAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgICAgbWFwU3RhdGU6IGludGVybmFsTWFwU3RhdGUsXG4gICAgICAgICAgbWFwU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hcEluZGV4OiBpbmRleCxcbiAgICAgICAgICBwcmltYXJ5TWFwLFxuICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgICAgIGVkaXRvckluZm86IHByaW1hcnlNYXBcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM6IHNldEZlYXR1cmVzLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ3Vua25vd24nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdudW1iZXInLlxuICAgICAgICAgICAgICAgICAgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkxheWVySG92ZXI6IHRoaXMuX29uTGF5ZXJIb3ZlcixcbiAgICAgICAgICBvblNldExheWVyRG9tYWluOiB0aGlzLl9vbkxheWVyU2V0RG9tYWluLFxuICAgICAgICAgIG9uRmlsdGVyZWRJdGVtc0NoYW5nZTogdGhpcy5fb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UsXG4gICAgICAgICAgb25XTVNGZWF0dXJlSW5mbzogdGhpcy5fb25XTVNGZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBkZWNrR2xQcm9wc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgZXh0cmFEZWNrUGFyYW1zOiB7XG4gICAgICAgIGdldFRvb2x0aXA/OiAoaW5mbzogYW55KSA9PiBvYmplY3QgfCBudWxsO1xuICAgICAgICBnZXRDdXJzb3I/OiAoe2lzRHJhZ2dpbmd9OiB7aXNEcmFnZ2luZzogYm9vbGVhbn0pID0+IHN0cmluZztcbiAgICAgIH0gPSB7fTtcbiAgICAgIGlmIChwcmltYXJ5TWFwKSB7XG4gICAgICAgIGV4dHJhRGVja1BhcmFtcy5nZXRUb29sdGlwID0gaW5mbyA9PlxuICAgICAgICAgIEVkaXRvckxheWVyVXRpbHMuZ2V0VG9vbHRpcChpbmZvLCB7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0Q3Vyc29yID0gKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yQ3Vyc29yID0gRWRpdG9yTGF5ZXJVdGlscy5nZXRDdXJzb3Ioe1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlZGl0b3JDdXJzb3IpIHJldHVybiBlZGl0b3JDdXJzb3I7XG5cbiAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuICdncmFiYmluZyc7XG4gICAgICAgICAgaWYgKGhvdmVySW5mbz8ubGF5ZXIpIHJldHVybiAncG9pbnRlcic7XG4gICAgICAgICAgcmV0dXJuICdncmFiJztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0cyA9IHRoaXMuX2lzT0tUb1JlbmRlckVmZmVjdHMoaW5kZXgpXG4gICAgICAgID8gY29tcHV0ZURlY2tFZmZlY3RzKHt2aXNTdGF0ZSwgbWFwU3RhdGV9KVxuICAgICAgICA6IFtdO1xuXG4gICAgICBjb25zdCB2aWV3cyA9IGRlY2tHbFByb3BzPy52aWV3c1xuICAgICAgICA/IGRlY2tHbFByb3BzPy52aWV3cygpXG4gICAgICAgIDogbmV3IE1hcFZpZXcoe2xlZ2FjeU1ldGVyU2l6ZXM6IHRydWV9KTtcblxuICAgICAgbGV0IGFsbERlY2tHbFByb3BzID0ge1xuICAgICAgICAuLi5kZWNrR2xQcm9wcyxcbiAgICAgICAgcGlja2luZ1JhZGl1czogREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgICAgICAgdmlld3MsXG4gICAgICAgIGxheWVyczogZGVja0dsTGF5ZXJzLFxuICAgICAgICBlZmZlY3RzXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja1JlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhbGxEZWNrR2xQcm9wcyA9IGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgaWYgKCFhbGxEZWNrR2xQcm9wcykge1xuICAgICAgICAgIC8vIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGwsIGRvIG5vdCByZW5kZXIgZGVjay5nbFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICB7Li4uKGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICAgICAgICA/IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZT8uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZURlYm91bmNlZChldmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtzdHlsZToge3BvaW50ZXJFdmVudHM6ICdub25lJ319KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xcbiAgICAgICAgICAgIGlkPVwiZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheVwiXG4gICAgICAgICAgICBvbkxvYWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tMb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tMb2FkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uYWxsRGVja0dsUHJvcHN9XG4gICAgICAgICAgICBjb250cm9sbGVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkb3VibGVDbGlja1pvb206ICFpc0VkaXRvckRyYXdpbmdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBkcmFnUm90YXRlOiB0aGlzLnByb3BzLm1hcFN0YXRlLmRyYWdSb3RhdGVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbml0aWFsVmlld1N0YXRlPXtpbnRlcm5hbFZpZXdTdGF0ZX1cbiAgICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXt0aGlzLl9vbkJlZm9yZVJlbmRlcn1cbiAgICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXtpc0ludGVyYWN0aXZlID8gdGhpcy5fb25WaWV3cG9ydENoYW5nZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHsuLi5leHRyYURlY2tQYXJhbXN9XG4gICAgICAgICAgICBvbkhvdmVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25Ib3ZlcihkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckhvdmVyRGVib3VuY2VkKGRhdGEsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhkYXRhLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUV2ZW50KGV2ZW50LnNyY0V2ZW50LCB2aWV3cG9ydCk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25DbGljayhkYXRhLCBldmVudCwge1xuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIG9uTGF5ZXJDbGljayxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgbWFwSW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhkYXRhKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkVycm9yPXt0aGlzLl9vbkRlY2tFcnJvcn1cbiAgICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKGNvbXAgJiYgY29tcC5kZWNrICYmICF0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbldlYkdMSW5pdGlhbGl6ZWQ9e2dsID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGdsKX1cbiAgICAgICAgICAgIG9uQWZ0ZXJSZW5kZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tBZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrQWZ0ZXJSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYXJlQW55RGVja0xheWVyc0xvYWRpbmcoYWxsRGVja0dsUHJvcHMubGF5ZXJzKTtcbiAgICAgICAgICAgICAgaWYgKGFueUFjdGl2ZUxheWVyTG9hZGluZyAhPT0gdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhbnlBY3RpdmVMYXllckxvYWRpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvRGVja0dMPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcGJveExheWVycygpIHtcbiAgICAgIGNvbnN0IG1hcGJveExheWVycyA9IHRoaXMubWFwYm94TGF5ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIU9iamVjdC5rZXlzKG1hcGJveExheWVycykubGVuZ3RoICYmICFPYmplY3Qua2V5cyh0aGlzLnByZXZpb3VzTGF5ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVNYXBib3hMYXllcnModGhpcy5fbWFwLCBtYXBib3hMYXllcnMsIHRoaXMucHJldmlvdXNMYXllcnMpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0gbWFwYm94TGF5ZXJzO1xuICAgIH1cblxuICAgIF9yZW5kZXJNYXBib3hPdmVybGF5cygpIHtcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQoKSkge1xuICAgICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgb25WaWV3UG9ydENoYW5nZShcbiAgICAgICAgdmlld1N0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gICAgICAgIHRoaXMucHJvcHMucHJpbWFyeSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbmRleFxuICAgICAgKTtcbiAgICB9LCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUpO1xuXG4gICAgX29uVmlld3BvcnRDaGFuZ2UgPSB2aWV3cG9ydCA9PiB7XG4gICAgICBjb25zdCB7dmlld1N0YXRlfSA9IHZpZXdwb3J0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNFeHBvcnQpIHtcbiAgICAgICAgLy8gSW1hZ2UgZXhwb3J0IG1hcCBzaG91bGRuJ3QgYmUgaW50ZXJhY3RpdmUgKG90aGVyd2lzZSB0aGlzIGNhbGxiYWNrIGNhblxuICAgICAgICAvLyBsZWFkIHRvIGluYWR2ZXJ0ZW50IGNoYW5nZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBtYWluIG1hcClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge3NldEludGVybmFsVmlld1N0YXRlfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXJEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihkYXRhLCBpbmRleCk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTW91c2VNb3ZlRGVib3VuY2VkID0gZGVib3VuY2UoKGV2ZW50LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25Nb3VzZU1vdmUobm9ybWFsaXplRXZlbnQoZXZlbnQsIHZpZXdwb3J0KSk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAvLyB0cmlnZ2VyIGxvYWRpbmcgaW5kaWNhdG9yIHVwZGF0ZSB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdXBkYXRlIFVJXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDB9KTtcbiAgICB9LCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSk7XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIE51bWJlcihpbmRleCkpO1xuICAgIH07XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBNYXBDb21wb25lbnQgPSBNYXAsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAvLyBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBpc0V4cG9ydCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHMsXG4gICAgICAgIHRvcE1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucyA9IFtdLFxuICAgICAgICBjb250YWluZXJJZCA9IDAsXG4gICAgICAgIGlzTG9hZGluZ0luZGljYXRvclZpc2libGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbCxcbiAgICAgICAgc2lkZVBhbmVsV2lkdGhcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7bGF5ZXJzLCBkYXRhc2V0cywgZWRpdG9yLCBpbnRlcmFjdGlvbkNvbmZpZ30gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllcnNGb3JEZWNrID0gdGhpcy5sYXllcnNGb3JEZWNrU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIC8vIEN1cnJlbnQgc3R5bGUgY2FuIGJlIGEgY3VzdG9tIHN0eWxlLCBmcm9tIHdoaWNoIHdlIHB1bGwgdGhlIG1hcGJveCBBUEkgYWNjY2VzcyB0b2tlblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9XG4gICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWc/LltiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgbWFwUHJvcHMgPSB7XG4gICAgICAgIC4uLmludGVybmFsVmlld1N0YXRlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXG4gICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuOiBjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAvLyBiYXNlQXBpVXJsOiBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcExpYjogYmFzZU1hcExpYnJhcnlDb25maWcuZ2V0TWFwTGliKCksXG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q6XG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc2Zvcm1SZXF1ZXN0IHx8XG4gICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdChjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuKVxuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFzR2VvY29kZXJMYXllciA9IEJvb2xlYW4obGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCkpO1xuICAgICAgY29uc3QgaXNTcGxpdCA9IEJvb2xlYW4obWFwU3RhdGUuaXNTcGxpdCk7XG5cbiAgICAgIGNvbnN0IGRlY2sgPSB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShsYXllcnNGb3JEZWNrLCB7XG4gICAgICAgIHByaW1hcnlNYXA6IHRydWUsXG4gICAgICAgIGlzSW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiAoXG4gICAgICAgICAgPE1hcENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgYm90dG9tLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGUuYm90dG9tTWFwU3R5bGUgPz8gRU1QVFlfTUFQQk9YX1NUWUxFfVxuICAgICAgICAgICAgey4uLmJvdHRvbU1hcENvbnRhaW5lclByb3BzfVxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWRlY2spIHtcbiAgICAgICAgLy8gZGVja092ZXJsYXkgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPE1hcENvbnRyb2xcbiAgICAgICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXM9e0xPQ0FMRV9DT0RFU19BUlJBWX1cbiAgICAgICAgICAgIGRyYWdSb3RhdGU9e21hcFN0YXRlLmRyYWdSb3RhdGV9XG4gICAgICAgICAgICBpc1NwbGl0PXtpc1NwbGl0fVxuICAgICAgICAgICAgcHJpbWFyeT17Qm9vbGVhbihwcmltYXJ5KX1cbiAgICAgICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgbGF5ZXJzVG9SZW5kZXI9e2xheWVyc1RvUmVuZGVyfVxuICAgICAgICAgICAgbWFwSW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICBtYXBDb250cm9scz17bWFwQ29udHJvbHN9XG4gICAgICAgICAgICByZWFkT25seT17dGhpcy5wcm9wcy5yZWFkT25seX1cbiAgICAgICAgICAgIHNjYWxlPXttYXBTdGF0ZS5zY2FsZSB8fCAxfVxuICAgICAgICAgICAgdG9wPXtcbiAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIgJiYgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZFxuICAgICAgICAgICAgICAgID8gdGhlbWUubWFwQ29udHJvbFRvcFxuICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlUGVyc3BlY3RpdmU9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVQZXJzcGVjdGl2ZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXA9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcH1cbiAgICAgICAgICAgIG9uTWFwVG9nZ2xlTGF5ZXI9e3RoaXMuX2hhbmRsZU1hcFRvZ2dsZUxheWVyfVxuICAgICAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sPXt0aGlzLl90b2dnbGVNYXBDb250cm9sfVxuICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXBWaWV3cG9ydH1cbiAgICAgICAgICAgIG9uU2V0RWRpdG9yTW9kZT17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvck1vZGV9XG4gICAgICAgICAgICBvblNldExvY2FsZT17dWlTdGF0ZUFjdGlvbnMuc2V0TG9jYWxlfVxuICAgICAgICAgICAgb25Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5PXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlRWRpdG9yVmlzaWJpbGl0eX1cbiAgICAgICAgICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2U9e3Zpc1N0YXRlQWN0aW9ucy5sYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgICAgICAgIG1hcEhlaWdodD17bWFwU3RhdGUuaGVpZ2h0fVxuICAgICAgICAgICAgc2V0TWFwQ29udHJvbFNldHRpbmdzPXt1aVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sU2V0dGluZ3N9XG4gICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcykgJiYgPERyb3BwYWJsZSBjb250YWluZXJJZD17Y29udGFpbmVySWR9IC8+fVxuXG4gICAgICAgICAge2RlY2t9XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgPEVkaXRvclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGZpbHRlcnM9e3RoaXMucG9seWdvbkZpbHRlcnNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgb25EZWxldGVGZWF0dXJlPXt2aXNTdGF0ZUFjdGlvbnMuZGVsZXRlRmVhdHVyZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgb25Ub2dnbGVQb2x5Z29uRmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckxheWVyfVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAge21hcFN0eWxlLnRvcE1hcFN0eWxlID8gKFxuICAgICAgICAgICAgPE1hcENvbXBvbmVudFxuICAgICAgICAgICAgICBrZXk9e2B0b3AtJHtiYXNlTWFwTGlicmFyeU5hbWV9YH1cbiAgICAgICAgICAgICAgdmlld1N0YXRlPXtpbnRlcm5hbFZpZXdTdGF0ZX1cbiAgICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlLnRvcE1hcFN0eWxlfVxuICAgICAgICAgICAgICBzdHlsZT17TUFQX1NUWUxFLnRvcH1cbiAgICAgICAgICAgICAgbWFwYm94QWNjZXNzVG9rZW49e21hcFByb3BzLm1hcGJveEFjY2Vzc1Rva2VufVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PXttYXBQcm9wcy50cmFuc2Zvcm1SZXF1ZXN0fVxuICAgICAgICAgICAgICBtYXBMaWI9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLmdldE1hcExpYigpfVxuICAgICAgICAgICAgICB7Li4udG9wTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAge2hhc0dlb2NvZGVyTGF5ZXJcbiAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICAgICAgICAgICAge1tHRU9DT0RFUl9MQVlFUl9JRF06IGhhc0dlb2NvZGVyTGF5ZXJ9LFxuICAgICAgICAgICAgICAgIHtwcmltYXJ5TWFwOiBmYWxzZSwgaXNJbnRlcmFjdGl2ZTogZmFsc2V9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcigpfVxuICAgICAgICAgIHtwcmltYXJ5ICE9PSBpc1NwbGl0ID8gKFxuICAgICAgICAgICAgPExvYWRpbmdJbmRpY2F0b3JcbiAgICAgICAgICAgICAgaXNWaXNpYmxlPXtCb29sZWFuKGlzTG9hZGluZ0luZGljYXRvclZpc2libGUgfHwgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uXG4gICAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbz17dGhpcy5zdGF0ZS5zaG93QmFzZU1hcEF0dHJpYnV0aW9ufVxuICAgICAgICAgICAgICBzaG93T3NtQmFzZW1hcEF0dHJpYnV0aW9uPXt0cnVlfVxuICAgICAgICAgICAgICBkYXRhc2V0QXR0cmlidXRpb25zPXtkYXRhc2V0QXR0cmlidXRpb25zfVxuICAgICAgICAgICAgICBiYXNlTWFwTGlicmFyeUNvbmZpZz17YmFzZU1hcExpYnJhcnlDb25maWd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9XG4gICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWc/LltiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwXG4gICAgICAgICAgcmVmPXt0aGlzLl9yZWZ9XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGVTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICBvbkNvbnRleHRNZW51PXtldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICRtaXhCbGVuZE1vZGU9e3Zpc1N0YXRlLm92ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICAkbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAge21hcENvbnRlbnR9XG4gICAgICAgIDwvU3R5bGVkTWFwPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRoZW1lKE1hcENvbnRhaW5lcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE1B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
965
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZWFjdE1hcEdsIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZSIsIl9kZWJvdW5jZSIsIl9tYXBQb3BvdmVyIiwiX21hcENvbnRyb2wiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfZWRpdG9yIiwiX2xheWVycyIsIl91dGlscyIsIl9zdHlsZXMiLCJfY29uc3RhbnRzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9jb3JlMiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUiLCJERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIkxPQ0FMRV9DT0RFU19BUlJBWSIsIkxPQ0FMRV9DT0RFUyIsIlN0eWxlZE1hcCIsInN0eWxlZCIsIlN0eWxlZE1hcENvbnRhaW5lciIsIl9yZWYiLCJfcmVmJCRtaXhCbGVuZE1vZGUiLCIkbWl4QmxlbmRNb2RlIiwiJG1hcExpYkNzc0NsYXNzIiwiY29uY2F0IiwiTUFQQk9YR0xfU1RZTEVfVVBEQVRFIiwiTUFQQk9YR0xfUkVOREVSIiwibm9wIiwiTWFwTGliTG9nbyIsIl9yZWYyIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFwTGliQ3NzQ2xhc3MiLCJ0YXJnZXQiLCJyZWwiLCJocmVmIiwibWFwTGliVXJsIiwibWFwTGliTmFtZSIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMyIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsInNldE5vZGVSZWYiLCJyZWYiLCJTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyIiwiaXNQYWxtIiwibGFiZWxDb2xvciIsIkRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfcmVmNCIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJGcmFnbWVudCIsIm1hcCIsImRzIiwiaWR4IiwiX2V4dGVuZHMyIiwidXJsIiwia2V5IiwidGl0bGUiLCJBdHRyaWJ1dGlvbiIsIl9yZWY1IiwiX3JlZjUkc2hvd0Jhc2VNYXBMaWJMIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiX3JlZjUkc2hvd09zbUJhc2VtYXBBIiwic2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbiIsImhhc01vYmlsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsIm1lbW9pemVkQ29tcG9uZW50cyIsInVzZU1lbW8iLCJTdHlsZWRBdHRyaWJ1dGlvbiIsIm1hcExpYkF0dHJpYnV0aW9uQ3NzQ2xhc3MiLCJFbmRIb3Jpem9udGFsRmxleGJveCIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJzaG93QmFzZU1hcEF0dHJpYnV0aW9uIiwiY3JlYXRlUmVmIiwiZGltZW5zaW9ucyIsIl90aGlzJHByb3BzIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsImNyZWF0ZVNlbGVjdG9yIiwic3BsaXRNYXBTZWxlY3RvciIsInNwbGl0TWFwSW5kZXhTZWxlY3RvciIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJsYXllck9yZGVyIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJmaWx0ZXJzIiwiZmlsdGVyc1NlbGVjdG9yIiwiZiIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsIk5PX01BUF9JRCIsInJnYlRvSGV4IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsImNvbG9yRG9tYWluIiwiZG9tYWluIiwiYWdncmVnYXRlZEJpbnMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMiIsIl90aGlzJHByb3BzMiRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJzZXRTdGF0ZSIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwiaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzIiwib25NYXBTdHlsZUxvYWRlZCIsIl9tYXAiLCJtYXBSZWYiLCJnZXRNYXAiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcDIiLCJvZmYiLCJvbiIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwib25NYXBSZW5kZXIiLCJnZXRNYXBib3hSZWYiLCJfcmVmNiIsImdsIiwic2V0TGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJlcnJvciIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJsYXllck1lc3NhZ2UiLCJlcnJvck1lc3NhZ2VGdWxsIiwibGFzdFNob3duIiwiX2RlY2tHTEVycm9yc0VsYXBzZWQiLCJEYXRlIiwibm93IiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJleHRyYUxheWVyTWVzc2FnZSIsIl90b3BNb3N0TGF5ZXIkcHJvcHMiLCJ0b3BNb3N0TGF5ZXIiLCJwYXJlbnQiLCJsYXllclNldElzVmFsaWQiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGVib3VuY2UiLCJfdGhpcyRjb250ZXh0Iiwidmlld1N0YXRlIiwiY29udGV4dCIsImdldEludGVybmFsVmlld1N0YXRlIiwib25WaWV3UG9ydENoYW5nZSIsIm9uVmlld1N0YXRlQ2hhbmdlIiwidmlld3BvcnQiLCJpc0V4cG9ydCIsInNldEludGVybmFsVmlld1N0YXRlIiwiX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQiLCJvbk1vdXNlTW92ZSIsIm5vcm1hbGl6ZUV2ZW50Iiwic2V0TG9hZGluZ0luZGljYXRvciIsImNoYW5nZSIsInBhbmVsSWQiLCJfdGhpcyRwcm9wczMiLCJ0b2dnbGVNYXBDb250cm9sIiwiTnVtYmVyIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIl90aGlzJF9tYXAzIiwiX3RoaXMkX21hcDQiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwiX29uRGVja0luaXRpYWxpemVkIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJfZGVjayIsIl9pc09LVG9SZW5kZXJFZmZlY3RzIiwidmlld0luZGV4IiwiX3RoaXMkX2RlY2siLCJ2aWV3TWFuYWdlciIsIl92aWV3cG9ydHMiLCJfcmVuZGVyTWFwUG9wb3ZlciIsIl90aGlzJHByb3BzJHZpc1N0YXRlJCIsImhvdmVySW5mbyIsIl90aGlzJHByb3BzNCIsIm1hcFN0YXRlIiwiX3RoaXMkcHJvcHM0JHZpc1N0YXRlIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJhbmltYXRpb25Db25maWciLCJfdGhpcyRwcm9wczQkdmlzU3RhdGUyIiwibW91c2VQb3MiLCJtb3VzZVBvc2l0aW9uIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsImNvbmZpZyIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsImxuZ0xhdCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJjb21wYXJlVHlwZSIsImNvbW1vblByb3AiLCJvbkNsb3NlIiwiX29uQ2xvc2VNYXBQb3BvdmVyIiwiem9vbSIsImNhbnZhcyIsInVuZGVmaW5lZCIsImZyb3plbiIsImlzQmFzZSIsIm9uU2V0RmVhdHVyZXMiLCJzZXRGZWF0dXJlcyIsInNldFNlbGVjdGVkRmVhdHVyZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwiX3JlbmRlckRlY2tPdmVybGF5IiwibGF5ZXJzRm9yRGVjayIsIl90aGlzJGNvbnRleHQyIiwiX3RoaXMyIiwib3B0aW9ucyIsInByaW1hcnlNYXAiLCJfdGhpcyRwcm9wczUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbFByb3BzIiwibWFwQ29udHJvbHMiLCJkZWNrUmVuZGVyQ2FsbGJhY2tzIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnMiLCJpc0ludGVyYWN0aXZlIiwiY2hpbGRyZW4iLCJtYXBEcmF3IiwiX3JlZjciLCJfcmVmNyRhY3RpdmUiLCJhY3RpdmUiLCJlZGl0b3JNZW51QWN0aXZlIiwiaXNFZGl0b3JEcmF3aW5nTW9kZSIsIkVkaXRvckxheWVyVXRpbHMiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxWaWV3U3RhdGUiLCJpbnRlcm5hbE1hcFN0YXRlIiwiZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXgiLCJzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QiLCJjb21wdXRlRGVja0xheWVycyIsImRlY2tHbExheWVycyIsImVkaXRvckluZm8iLCJzZWxlY3RlZEZlYXR1cmVJbmRleGVzIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yIiwiX29uTGF5ZXJIb3ZlciIsIm9uU2V0TGF5ZXJEb21haW4iLCJfb25MYXllclNldERvbWFpbiIsIm9uRmlsdGVyZWRJdGVtc0NoYW5nZSIsIl9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIm9uV01TRmVhdHVyZUluZm8iLCJfb25XTVNGZWF0dXJlSW5mbyIsImV4dHJhRGVja1BhcmFtcyIsImdldFRvb2x0aXAiLCJnZXRDdXJzb3IiLCJfcmVmOCIsImlzRHJhZ2dpbmciLCJlZGl0b3JDdXJzb3IiLCJlZmZlY3RzIiwiY29tcHV0ZURlY2tFZmZlY3RzIiwidmlld3MiLCJNYXBWaWV3IiwibGVnYWN5TWV0ZXJTaXplcyIsImFsbERlY2tHbFByb3BzIiwicGlja2luZ1JhZGl1cyIsIkRFRkFVTFRfUElDS0lOR19SQURJVVMiLCJvbkRlY2tSZW5kZXIiLCJfb25Nb3VzZU1vdmVEZWJvdW5jZWQiLCJvbkxvYWQiLCJvbkRlY2tMb2FkIiwiY29udHJvbGxlciIsImRvdWJsZUNsaWNrWm9vbSIsImRyYWdSb3RhdGUiLCJpbml0aWFsVmlld1N0YXRlIiwib25CZWZvcmVSZW5kZXIiLCJfb25CZWZvcmVSZW5kZXIiLCJfb25WaWV3cG9ydENoYW5nZSIsIm9uSG92ZXIiLCJyZXMiLCJfb25MYXllckhvdmVyRGVib3VuY2VkIiwib25DbGljayIsInNyY0V2ZW50Iiwib25FcnJvciIsIl9vbkRlY2tFcnJvciIsImNvbXAiLCJkZWNrIiwib25XZWJHTEluaXRpYWxpemVkIiwib25BZnRlclJlbmRlciIsIm9uRGVja0FmdGVyUmVuZGVyIiwiYW55QWN0aXZlTGF5ZXJMb2FkaW5nIiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSIsIm1hcGJveExheWVycyIsIm1hcGJveExheWVyc1NlbGVjdG9yIiwidXBkYXRlTWFwYm94TGF5ZXJzIiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwiaXNTdHlsZUxvYWRlZCIsIl9yZW5kZXJNYXAiLCJfbWFwU3R5bGUkbWFwU3R5bGVzIiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiX3RoaXMkY29udGV4dDMiLCJfbWFwU3R5bGUkYm90dG9tTWFwU3QiLCJfdGhpcyRwcm9wczYiLCJfdGhpcyRwcm9wczYkTWFwQ29tcG8iLCJNYXBDb21wb25lbnQiLCJNYXAiLCJsb2NhbGUiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRvcE1hcENvbnRhaW5lclByb3BzIiwiX3RoaXMkcHJvcHM2JGRhdGFzZXRBIiwiX3RoaXMkcHJvcHM2JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiY3VycmVudFN0eWxlIiwibWFwU3R5bGVzIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsIm1hcExpYiIsImdldE1hcExpYiIsInRyYW5zZm9ybVJlcXVlc3QiLCJoYXNHZW9jb2RlckxheWVyIiwiZmluZCIsImwiLCJHRU9DT0RFUl9MQVlFUl9JRCIsImlzU3BsaXQiLCJib3R0b21NYXBTdHlsZSIsIkVNUFRZX01BUEJPWF9TVFlMRSIsIl9zZXRNYXBSZWYiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblRvZ2dsZVNwbGl0TWFwIiwidG9nZ2xlU3BsaXRNYXAiLCJvbk1hcFRvZ2dsZUxheWVyIiwiX2hhbmRsZU1hcFRvZ2dsZUxheWVyIiwib25Ub2dnbGVNYXBDb250cm9sIiwiX3RvZ2dsZU1hcENvbnRyb2wiLCJvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJ0b2dnbGVTcGxpdE1hcFZpZXdwb3J0Iiwib25TZXRFZGl0b3JNb2RlIiwic2V0RWRpdG9yTW9kZSIsIm9uU2V0TG9jYWxlIiwic2V0TG9jYWxlIiwib25Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5IiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm1hcEhlaWdodCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIm9uRGVsZXRlRmVhdHVyZSIsImRlbGV0ZUZlYXR1cmUiLCJvblNlbGVjdCIsIm9uVG9nZ2xlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJMYXllciIsInZpc2libGUiLCJ0b3BNYXBTdHlsZSIsImlzVmlzaWJsZSIsInN0YXRlIiwicmVuZGVyIiwiX21hcFN0eWxlJG1hcFN0eWxlczIiLCJfZ2V0QXBwbGljYXRpb25Db25maWcyIiwiX3RoaXMkcHJvcHM3IiwibWFwQ29udGVudCIsInN0eWxlU2VsZWN0b3IiLCJvbkNvbnRleHRNZW51IiwicHJldmVudERlZmF1bHQiLCJvdmVybGF5QmxlbmRpbmciLCJDb21wb25lbnQiLCJNYXBWaWV3U3RhdGVDb250ZXh0Iiwid2l0aFRoZW1lIl0sInNvdXJjZXMiOlsiLi4vc3JjL21hcC1jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwLCBNYXBSZWZ9IGZyb20gJ3JlYWN0LW1hcC1nbCc7XG5pbXBvcnQge1BpY2tJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL2xpYi9kZWNrJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7dXNlRHJvcHBhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuXG5pbXBvcnQge1Zpc1N0YXRlQWN0aW9ucywgTWFwU3RhdGVBY3Rpb25zLCBVSVN0YXRlQWN0aW9uc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IE1hcFBvcG92ZXJGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1wb3BvdmVyJztcbmltcG9ydCBNYXBDb250cm9sRmFjdG9yeSBmcm9tICcuL21hcC9tYXAtY29udHJvbCc7XG5pbXBvcnQge1xuICBTdHlsZWRNYXBDb250YWluZXIsXG4gIFN0eWxlZEF0dHJpYnV0aW9uLFxuICBFbmRIb3Jpem9udGFsRmxleGJveFxufSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCBFZGl0b3JGYWN0b3J5IGZyb20gJy4vZWRpdG9yL2VkaXRvcic7XG5cbi8vIHV0aWxzXG5pbXBvcnQge1xuICBnZW5lcmF0ZU1hcGJveExheWVycyxcbiAgdXBkYXRlTWFwYm94TGF5ZXJzLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIEVkaXRvckxheWVyVXRpbHMsXG4gIEFnZ3JlZ2F0ZWRCaW5cbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgRGF0YXNldEF0dHJpYnV0aW9uLFxuICBNYXBTdGF0ZSxcbiAgTWFwQ29udHJvbHMsXG4gIFZpZXdwb3J0LFxuICBTcGxpdE1hcCxcbiAgU3BsaXRNYXBMYXllcnNcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgc2V0TGF5ZXJCbGVuZGluZyxcbiAgaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMsXG4gIGlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyxcbiAgZ2V0QmFzZU1hcExpYnJhcnksXG4gIEJhc2VNYXBMaWJyYXJ5Q29uZmlnLFxuICB0cmFuc2Zvcm1SZXF1ZXN0LFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgaGFzTW9iaWxlV2lkdGgsXG4gIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsXG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlLFxuICBub3JtYWxpemVFdmVudCxcbiAgcmdiVG9IZXgsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIEdldE1hcFJlZlxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7YnJlYWtQb2ludFZhbHVlc30gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuXG4vLyBkZWZhdWx0LXNldHRpbmdzXG5pbXBvcnQge1xuICBGSUxURVJfVFlQRVMsXG4gIEdFT0NPREVSX0xBWUVSX0lELFxuICBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSxcbiAgREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgTk9fTUFQX0lELFxuICBFTVBUWV9NQVBCT1hfU1RZTEVcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge0RST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEV9IGZyb20gJy4vY29tbW9uL2RuZC1sYXllci1pdGVtcyc7XG4vLyBDb250ZXh0c1xuaW1wb3J0IHtNYXBWaWV3U3RhdGVDb250ZXh0fSBmcm9tICcuL21hcC12aWV3LXN0YXRlLWNvbnRleHQnO1xuXG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL2NvbW1vbi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtNYXBWaWV3fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7XG4gIE1hcFN0eWxlLFxuICBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyxcbiAgY29tcHV0ZURlY2tMYXllcnMsXG4gIGdldExheWVySG92ZXJQcm9wLFxuICBMYXllckhvdmVyUHJvcCxcbiAgcHJlcGFyZUxheWVyc0ZvckRlY2ssXG4gIHByZXBhcmVMYXllcnNUb1JlbmRlcixcbiAgTGF5ZXJzVG9SZW5kZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQgTG9hZGluZ0luZGljYXRvciBmcm9tICcuL2xvYWRpbmctaW5kaWNhdG9yJztcblxuLy8gRGVib3VuY2UgdGhlIHByb3BhZ2F0aW9uIG9mIHZpZXdwb3J0IGNoYW5nZSBhbmQgbW91c2UgbW92ZXMgdG8gcmVkdXggc3RvcmUuXG4vLyBUaGlzIGlzIHRvIGF2b2lkIHRvbyBtYW55IHJlbmRlcnMgb2Ygb3RoZXIgY29tcG9uZW50cyB3aGVuIHRoZSBtYXAgaXNcbi8vIGJlaW5nIHBhbm5lZC96b29tZWQgKGxlYWRpbmcgdG8gbGFnZ3kgYmFzZW1hcC9kZWNrIHN5bmNpbmcpLlxuY29uc3QgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFID0gMTA7XG5jb25zdCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSA9IDEwO1xuXG4vLyBIb3cgbG9uZyBzaG91bGQgd2Ugd2FpdCBiZXR3ZWVuIGxheWVyIGxvYWRpbmcgc3RhdGUgY2hhbmdlcyBiZWZvcmUgdHJpZ2dlcmluZyBhIFVJIHVwZGF0ZVxuY29uc3QgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUgPSAxMDA7XG5cbmNvbnN0IE1BUF9TVFlMRToge1trZXk6IHN0cmluZ106IFJlYWN0LkNTU1Byb3BlcnRpZXN9ID0ge1xuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH0sXG4gIHRvcDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9XG59O1xuXG5jb25zdCBMT0NBTEVfQ09ERVNfQVJSQVkgPSBPYmplY3Qua2V5cyhMT0NBTEVfQ09ERVMpO1xuXG5pbnRlcmZhY2UgU3R5bGVkTWFwQ29udGFpbmVyUHJvcHMge1xuICAkbWl4QmxlbmRNb2RlPzogc3RyaW5nO1xuICAkbWFwTGliQ3NzQ2xhc3M6IHN0cmluZztcbn1cblxuY29uc3QgU3R5bGVkTWFwID0gc3R5bGVkKFN0eWxlZE1hcENvbnRhaW5lcik8U3R5bGVkTWFwQ29udGFpbmVyUHJvcHM+KFxuICAoeyRtaXhCbGVuZE1vZGUgPSAnbm9ybWFsJywgJG1hcExpYkNzc0NsYXNzfSkgPT4gYFxuICAjZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheSB7XG4gICAgbWl4LWJsZW5kLW1vZGU6ICR7JG1peEJsZW5kTW9kZX07XG4gIH07XG4gICpbJHskbWFwTGliQ3NzQ2xhc3N9LWNoaWxkcmVuXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG5gXG4pO1xuXG5jb25zdCBNQVBCT1hHTF9TVFlMRV9VUERBVEUgPSAnc3R5bGUubG9hZCc7XG5jb25zdCBNQVBCT1hHTF9SRU5ERVIgPSAncmVuZGVyJztcbmNvbnN0IG5vcCA9ICgpID0+IHtcbiAgcmV0dXJuO1xufTtcblxudHlwZSBNYXBMaWJMb2dvUHJvcHMgPSB7XG4gIGJhc2VNYXBMaWJyYXJ5Q29uZmlnOiBCYXNlTWFwTGlicmFyeUNvbmZpZztcbn07XG5cbmNvbnN0IE1hcExpYkxvZ28gPSAoe2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfTogTWFwTGliTG9nb1Byb3BzKSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxvZ29cIj5cbiAgICBCYXNlbWFwIGJ5OlxuICAgIDxhXG4gICAgICBzdHlsZT17e21hcmdpbkxlZnQ6ICc1cHgnfX1cbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQ3NzQ2xhc3N9LWN0cmwtbG9nb2B9XG4gICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBocmVmPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJVcmx9XG4gICAgICBhcmlhLWxhYmVsPXtgJHtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJOYW1lfSBsb2dvYH1cbiAgICAvPlxuICA8L2Rpdj5cbik7XG5cbmludGVyZmFjZSBTdHlsZWREcm9wcGFibGVQcm9wcyB7XG4gIGlzT3ZlcjogYm9vbGVhbjtcbn1cblxuY29uc3QgU3R5bGVkRHJvcHBhYmxlID0gc3R5bGVkLmRpdjxTdHlsZWREcm9wcGFibGVQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmlzT3ZlciA/IHByb3BzLnRoZW1lLmRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IgOiAnbm9uZScpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSBwcm9wcyA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBEcm9wcGFibGUgPSAoe2NvbnRhaW5lcklkfSkgPT4ge1xuICBjb25zdCB7aXNPdmVyLCBzZXROb2RlUmVmfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGNvbnRhaW5lcklkLFxuICAgIGRhdGE6IHt0eXBlOiBEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFLCBpbmRleDogY29udGFpbmVySWR9LFxuICAgIGRpc2FibGVkOiAhY29udGFpbmVySWRcbiAgfSk7XG5cbiAgcmV0dXJuIDxTdHlsZWREcm9wcGFibGUgcmVmPXtzZXROb2RlUmVmfSBpc092ZXI9e2lzT3Zlcn0gLz47XG59O1xuXG5pbnRlcmZhY2UgU3R5bGVkRGF0YXNldEF0dHJpYnV0aW9uc0NvbnRhaW5lclByb3BzIHtcbiAgaXNQYWxtOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyID0gc3R5bGVkLmRpdjxTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyUHJvcHM+YFxuICBtYXgtd2lkdGg6ICR7cHJvcHMgPT4gKHByb3BzLmlzUGFsbSA/ICcyMDBweCcgOiAnMzAwcHgnKX07XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDFweDtcbiAgbGluZS1oZWlnaHQ6ICR7cHJvcHMgPT4gKHByb3BzLmlzUGFsbSA/ICcxZW0nIDogJzEuNGVtJyl9O1xuXG4gICY6aG92ZXIge1xuICAgIHdoaXRlLXNwYWNlOiBpbmhlcml0O1xuICB9XG5gO1xuXG5jb25zdCBEYXRhc2V0QXR0cmlidXRpb25zID0gKHtcbiAgZGF0YXNldEF0dHJpYnV0aW9ucyxcbiAgaXNQYWxtXG59OiB7XG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM6IERhdGFzZXRBdHRyaWJ1dGlvbltdO1xuICBpc1BhbG06IGJvb2xlYW47XG59KSA9PiAoXG4gIDw+XG4gICAge2RhdGFzZXRBdHRyaWJ1dGlvbnM/Lmxlbmd0aCA/IChcbiAgICAgIDxTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyIGlzUGFsbT17aXNQYWxtfT5cbiAgICAgICAge2RhdGFzZXRBdHRyaWJ1dGlvbnMubWFwKChkcywgaWR4KSA9PiAoXG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIHsuLi4oZHMudXJsID8ge2hyZWY6IGRzLnVybH0gOiBudWxsKX1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGtleT17YCR7ZHMudGl0bGV9XyR7aWR4fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2RzLnRpdGxlfVxuICAgICAgICAgICAge2lkeCAhPT0gZGF0YXNldEF0dHJpYnV0aW9ucy5sZW5ndGggLSAxID8gJywgJyA6IG51bGx9XG4gICAgICAgICAgPC9hPlxuICAgICAgICApKX1cbiAgICAgIDwvU3R5bGVkRGF0YXNldEF0dHJpYnV0aW9uc0NvbnRhaW5lcj5cbiAgICApIDogbnVsbH1cbiAgPC8+XG4pO1xuXG50eXBlIEF0dHJpYnV0aW9uUHJvcHMgPSB7XG4gIHNob3dCYXNlTWFwTGliTG9nbzogYm9vbGVhbjtcbiAgc2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbjogYm9vbGVhbjtcbiAgZGF0YXNldEF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGJhc2VNYXBMaWJyYXJ5Q29uZmlnOiBCYXNlTWFwTGlicmFyeUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGlvbjogUmVhY3QuRkM8QXR0cmlidXRpb25Qcm9wcz4gPSAoe1xuICBzaG93QmFzZU1hcExpYkxvZ28gPSB0cnVlLFxuICBzaG93T3NtQmFzZW1hcEF0dHJpYnV0aW9uID0gZmFsc2UsXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnMsXG4gIGJhc2VNYXBMaWJyYXJ5Q29uZmlnXG59OiBBdHRyaWJ1dGlvblByb3BzKSA9PiB7XG4gIGNvbnN0IGlzUGFsbSA9IGhhc01vYmlsZVdpZHRoKGJyZWFrUG9pbnRWYWx1ZXMpO1xuXG4gIGNvbnN0IG1lbW9pemVkQ29tcG9uZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2hvd0Jhc2VNYXBMaWJMb2dvKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkQXR0cmlidXRpb25cbiAgICAgICAgICBtYXBMaWJDc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQ3NzQ2xhc3N9XG4gICAgICAgICAgbWFwTGliQXR0cmlidXRpb25Dc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQXR0cmlidXRpb25Dc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIDxFbmRIb3Jpem9udGFsRmxleGJveD5cbiAgICAgICAgICAgIDxEYXRhc2V0QXR0cmlidXRpb25zIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9IGlzUGFsbT17aXNQYWxtfSAvPlxuICAgICAgICAgICAge3Nob3dPc21CYXNlbWFwQXR0cmlidXRpb24gPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxpbmtcIj5cbiAgICAgICAgICAgICAgICB7ZGF0YXNldEF0dHJpYnV0aW9ucz8ubGVuZ3RoID8gPHNwYW4gY2xhc3NOYW1lPVwicGlwZS1zZXBhcmF0b3JcIj58PC9zcGFuPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgwqkgT3BlblN0cmVldE1hcFxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L0VuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgICA8L1N0eWxlZEF0dHJpYnV0aW9uPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEF0dHJpYnV0aW9uXG4gICAgICAgIG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgbWFwTGliQXR0cmlidXRpb25Dc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQXR0cmlidXRpb25Dc3NDbGFzc31cbiAgICAgID5cbiAgICAgICAgPEVuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgICAgIDxEYXRhc2V0QXR0cmlidXRpb25zIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9IGlzUGFsbT17aXNQYWxtfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxpbmtcIj5cbiAgICAgICAgICAgIHtkYXRhc2V0QXR0cmlidXRpb25zPy5sZW5ndGggPyA8c3BhbiBjbGFzc05hbWU9XCJwaXBlLXNlcGFyYXRvclwiPnw8L3NwYW4+IDogbnVsbH1cbiAgICAgICAgICAgIHtpc1BhbG0gPyA8TWFwTGliTG9nbyBiYXNlTWFwTGlicmFyeUNvbmZpZz17YmFzZU1hcExpYnJhcnlDb25maWd9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2tlcGxlci5nbC9wb2xpY3kvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgICDCqSBrZXBsZXIuZ2wgfHsnICd9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICB7IWlzUGFsbSA/IDxNYXBMaWJMb2dvIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ30gLz4gOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0VuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgPC9TdHlsZWRBdHRyaWJ1dGlvbj5cbiAgICApO1xuICB9LCBbXG4gICAgc2hvd0Jhc2VNYXBMaWJMb2dvLFxuICAgIHNob3dPc21CYXNlbWFwQXR0cmlidXRpb24sXG4gICAgZGF0YXNldEF0dHJpYnV0aW9ucyxcbiAgICBpc1BhbG0sXG4gICAgYmFzZU1hcExpYnJhcnlDb25maWdcbiAgXSk7XG5cbiAgcmV0dXJuIG1lbW9pemVkQ29tcG9uZW50cztcbn07XG5cbk1hcENvbnRhaW5lckZhY3RvcnkuZGVwcyA9IFtNYXBQb3BvdmVyRmFjdG9yeSwgTWFwQ29udHJvbEZhY3RvcnksIEVkaXRvckZhY3RvcnldO1xuXG50eXBlIE1hcGJveFN0eWxlID0gc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xudHlwZSBQcm9wU2VsZWN0b3I8Uj4gPSBTZWxlY3RvcjxNYXBDb250YWluZXJQcm9wcywgUj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQ29udGFpbmVyUHJvcHMge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdHlsZToge2JvdHRvbU1hcFN0eWxlPzogTWFwYm94U3R5bGU7IHRvcE1hcFN0eWxlPzogTWFwYm94U3R5bGV9ICYgTWFwU3R5bGU7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybDogc3RyaW5nO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcblxuICAvLyBvcHRpb25hbFxuICBwcmltYXJ5PzogYm9vbGVhbjsgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpc0V4cG9ydD86IGJvb2xlYW47XG4gIC8vIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBtYXBsaWJyZWdsLk1hcCB8IFJldHVyblR5cGU8TWFwUmVmWydnZXRNYXAnXT4gfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBSZW5kZXI/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAobWFwYm94PzogTWFwUmVmIHwgbnVsbCwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGluZGV4PzogbnVtYmVyO1xuICBkZWxldGVNYXBMYWJlbHM/OiAoY29udGFpbmVySWQ6IHN0cmluZywgbGF5ZXJJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBjb250YWluZXJJZD86IG51bWJlcjtcblxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmcgfCBudWxsO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcblxuICBsb2NhbGU/OiBhbnk7XG4gIHRoZW1lPzogYW55O1xuICBlZGl0b3I/OiBhbnk7XG4gIE1hcENvbXBvbmVudD86IHR5cGVvZiBNYXA7XG4gIGRlY2tHbFByb3BzPzogYW55O1xuICBvbkRlY2tJbml0aWFsaXplZD86IChhOiBhbnksIGI6IGFueSkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld3BvcnQ6IFZpZXdwb3J0KSA9PiB2b2lkO1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICBkYXRhc2V0QXR0cmlidXRpb25zPzogRGF0YXNldEF0dHJpYnV0aW9uW107XG5cbiAgZ2VuZXJhdGVNYXBib3hMYXllcnM/OiB0eXBlb2YgZ2VuZXJhdGVNYXBib3hMYXllcnM7XG4gIGdlbmVyYXRlRGVja0dMTGF5ZXJzPzogdHlwZW9mIGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gIG9uTW91c2VNb3ZlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50ICYge2xuZ0xhdD86IFtudW1iZXIsIG51bWJlcl19KSA9PiB2b2lkO1xuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWNrUmVuZGVyQ2FsbGJhY2tzPzoge1xuICAgIG9uRGVja0xvYWQ/OiAoKSA9PiB2b2lkO1xuICAgIG9uRGVja1JlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gICAgb25EZWNrQWZ0ZXJSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYW55O1xuICB9O1xuXG4gIC8vIE9wdGlvbmFsOiBvdmVycmlkZSBsZWdlbmQgaGVhZGVyIGxvZ28gaW4gbWFwIGNvbnRyb2xzICh1c2VkIGJ5IGltYWdlIGV4cG9ydClcbiAgbG9nb0NvbXBvbmVudD86IFJlYWN0LkZDIHwgUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBDb250YWluZXJGYWN0b3J5KFxuICBNYXBQb3BvdmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBQb3BvdmVyRmFjdG9yeT4sXG4gIE1hcENvbnRyb2w6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xGYWN0b3J5PixcbiAgRWRpdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZGl0b3JGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxNYXBDb250YWluZXJQcm9wcz4ge1xuICBjbGFzcyBNYXBDb250YWluZXIgZXh0ZW5kcyBDb21wb25lbnQ8TWFwQ29udGFpbmVyUHJvcHM+IHtcbiAgICBkaXNwbGF5TmFtZSA9ICdNYXBDb250YWluZXInO1xuXG4gICAgcHJpdmF0ZSBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hcFZpZXdTdGF0ZUNvbnRleHQ7XG5cbiAgICBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXBWaWV3U3RhdGVDb250ZXh0PjtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBNYXBDb21wb25lbnQ6IE1hcCxcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGF0dHJpYnV0aW9uIHNob3VsZCBiZSB2aXNpYmxlIGJhc2VkIHRoZSByZXN1bHQgb2YgbG9hZGluZyB0aGUgbWFwIHN0eWxlXG4gICAgICBzaG93QmFzZU1hcEF0dHJpYnV0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCwgdGhpcy5faGFuZGxlUmVzaXplKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIC8vIHVuYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXA/Lm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIG5vcCk7XG4gICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1JFTkRFUiwgbm9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCk7XG4gICAgfVxuXG4gICAgX2RlY2s6IGFueSA9IG51bGw7XG4gICAgX21hcDogR2V0TWFwUmVmIHwgbnVsbCA9IG51bGw7XG4gICAgX3JlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBfZGVja0dMRXJyb3JzRWxhcHNlZDoge1tpZDogc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuXG4gICAgcHJldmlvdXNMYXllcnMgPSB7XG4gICAgICAvLyBbbGF5ZXJzLmlkXTogbWFwYm94TGF5ZXJDb25maWdcbiAgICB9O1xuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgY29uc3Qge3ByaW1hcnksIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAocHJpbWFyeSkge1xuICAgICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMud2lkdGggPiAwICYmIGRpbWVuc2lvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoZGltZW5zaW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVycztcbiAgICBsYXllckRhdGFTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllckRhdGE7XG4gICAgc3BsaXRNYXBTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwW10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzO1xuICAgIHNwbGl0TWFwSW5kZXhTZWxlY3RvcjogUHJvcFNlbGVjdG9yPG51bWJlciB8IHVuZGVmaW5lZD4gPSBwcm9wcyA9PiBwcm9wcy5pbmRleDtcbiAgICBtYXBMYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwTGF5ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuc3BsaXRNYXBTZWxlY3RvcixcbiAgICAgIHRoaXMuc3BsaXRNYXBJbmRleFNlbGVjdG9yLFxuICAgICAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwc1xuICAgICk7XG4gICAgbGF5ZXJPcmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVyT3JkZXInXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyO1xuICAgIGxheWVyc1RvUmVuZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxMYXllcnNUb1JlbmRlcj4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5tYXBMYXllcnNTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNUb1JlbmRlclxuICAgICk7XG4gICAgbGF5ZXJzRm9yRGVja1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNGb3JEZWNrXG4gICAgKTtcbiAgICBmaWx0ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzO1xuICAgIHBvbHlnb25GaWx0ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmZpbHRlcnNTZWxlY3RvciwgZmlsdGVycyA9PlxuICAgICAgZmlsdGVycy5maWx0ZXIoZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2UpXG4gICAgKTtcbiAgICBmZWF0dXJlc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICAgIHNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmZlYXR1cmVzU2VsZWN0b3IsXG4gICAgICAocG9seWdvbkZpbHRlcnMsIGZlYXR1cmVzKSA9PiAoe1xuICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMuY29uY2F0KHBvbHlnb25GaWx0ZXJzLm1hcChmID0+IGYudmFsdWUpKVxuICAgICAgfSlcbiAgICApO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBObyBvdmVybG9hZCBtYXRjaGVzIHRoaXMgY2FsbFxuICAgIHNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvcixcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IsXG4gICAgICAoY29sbGVjdGlvbiwgc2VsZWN0ZWRGZWF0dXJlKSA9PlxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZT8uaWQpXG4gICAgKTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgICh2YWx1ZTogbnVtYmVyKSA9PiB2YWx1ZSxcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IFtdIDogW3ZhbHVlXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZ2VuZXJhdGVNYXBib3hMYXllcnMgPz8gZ2VuZXJhdGVNYXBib3hMYXllcnM7XG5cbiAgICBtYXBib3hMYXllcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyT3JkZXJTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yLFxuICAgICAgKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyLCBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKSA9PlxuICAgICAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyKVxuICAgICk7XG5cbiAgICAvLyBtZXJnZSBpbiBhIGJhY2tncm91bmQtY29sb3Igc3R5bGUgaWYgdGhlIGJhc2VtYXAgY2hvaWNlIGlzIE5PX01BUF9JRFxuICAgIC8vIHVzZWQgYnkgPFN0eWxlZE1hcD4gaW5saW5lIHN0eWxlIHByb3BcbiAgICBtYXBTdHlsZVR5cGVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZTtcbiAgICBtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAgIHN0eWxlU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubWFwU3R5bGVUeXBlU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICAoc3R5bGVUeXBlLCBiYWNrZ3JvdW5kQ29sb3IpID0+ICh7XG4gICAgICAgIC4uLk1BUF9TVFlMRS5jb250YWluZXIsXG4gICAgICAgIC4uLihzdHlsZVR5cGUgPT09IE5PX01BUF9JRCA/IHtiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KGJhY2tncm91bmRDb2xvcil9IDoge30pXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXIgPSAoX2lkeDogbnVtYmVyLCBpbmZvOiBQaWNrSW5mbzxhbnk+IHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8sIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgdmFsdWU6IHtkb21haW46IFZpc3VhbENoYW5uZWxEb21haW47IGFnZ3JlZ2F0ZWRCaW5zOiBBZ2dyZWdhdGVkQmluW119XG4gICAgKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLCB7XG4gICAgICAgIGNvbG9yRG9tYWluOiB2YWx1ZS5kb21haW4sXG4gICAgICAgIGFnZ3JlZ2F0ZWRCaW5zOiB2YWx1ZS5hZ2dyZWdhdGVkQmluc1xuICAgICAgfSBhcyBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz4pO1xuICAgIH07XG5cbiAgICBfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UgPSAoaWR4LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX29uV01TRmVhdHVyZUluZm8gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmVhdHVyZUluZm86IEFycmF5PHtuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGNvb3JkaW5hdGU/OiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbDtcbiAgICAgIH1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLndtc0ZlYXR1cmVJbmZvKFxuICAgICAgICB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLFxuICAgICAgICBkYXRhLmZlYXR1cmVJbmZvLFxuICAgICAgICBkYXRhLmNvb3JkaW5hdGVcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVNYXBUb2dnbGVMYXllciA9IGxheWVySWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4OiBtYXBJbmRleCA9IDAsIHZpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgX29uTWFwYm94U3R5bGVVcGRhdGUgPSB1cGRhdGUgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICBpZiAodXBkYXRlICYmIHVwZGF0ZS5zdHlsZSkge1xuICAgICAgICAvLyBObyBhdHRyaWJ1dGlvbnMgYXJlIG5lZWRlZCBpZiB0aGUgc3R5bGUgZG9lc24ndCByZWZlcmVuY2UgTWFwYm94IHNvdXJjZXNcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2hvd0Jhc2VNYXBBdHRyaWJ1dGlvbjpcbiAgICAgICAgICAgIGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKHVwZGF0ZS5zdHlsZSkgfHwgIWlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyh1cGRhdGUuc3R5bGUpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3NldE1hcFJlZiA9IG1hcFJlZiA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2hhbmdlIG9mIHRoZSBtYXAgbGlicmFyeVxuICAgICAgaWYgKHRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgY29uc3QgbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICBpZiAobWFwICYmIHRoaXMuX21hcCAhPT0gbWFwKSB7XG4gICAgICAgICAgdGhpcy5fbWFwPy5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCBub3ApO1xuICAgICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1JFTkRFUiwgbm9wKTtcbiAgICAgICAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIC8vIGkgbm90aWNlZCBpbiBjZXJ0YWluIGNvbnRleHQgd2UgZG9uJ3QgYWNjZXNzIHRoZSBhY3R1YWwgbWFwIGVsZW1lbnRcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfUkVOREVSLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uTWFwUmVuZGVyKHRoaXMuX21hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKSB7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IGNhbiBnYWluIGFjY2VzcyB0byBvdXIgTWFwYm94R2xNYXAgYnlcbiAgICAgICAgLy8gcHJvdmlkaW5nIHRoaXMgY2FsbGJhY2suIE5vdGUgdGhhdCAnbWFwYm94JyB3aWxsIGJlIG51bGwgd2hlbiB0aGVcbiAgICAgICAgLy8gcmVmIGlzIHVuc2V0IChlLmcuIHdoZW4gYSBzcGxpdCBtYXAgaXMgY2xvc2VkKS5cbiAgICAgICAgdGhpcy5wcm9wcy5nZXRNYXBib3hSZWYobWFwUmVmLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uRGVja0luaXRpYWxpemVkKGdsKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKHRoaXMuX2RlY2ssIGdsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxKSBBbGxvdyBlZmZlY3RzIG9ubHkgZm9yIHRoZSBmaXJzdCB2aWV3LlxuICAgICAqIDIpIFByZXZlbnQgZWZmZWN0OnByZVJlbmRlciBjYWxsIHdpdGhvdXQgdmFsaWQgZ2VuZXJhdGVkIHZpZXdwb3J0cy5cbiAgICAgKiBAcGFyYW0gdmlld0luZGV4IFZpZXcgaW5kZXguXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGVmZmVjdHMgY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgX2lzT0tUb1JlbmRlckVmZmVjdHModmlld0luZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZpZXdJbmRleCAmJiBCb29sZWFuKHRoaXMuX2RlY2s/LnZpZXdNYW5hZ2VyPy5fdmlld3BvcnRzPy5sZW5ndGgpO1xuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICh7Z2x9KSA9PiB7XG4gICAgICBzZXRMYXllckJsZW5kaW5nKGdsLCB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyQmxlbmRpbmcpO1xuICAgIH07XG5cbiAgICBfb25EZWNrRXJyb3IgPSAoZXJyb3IsIGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ubWVzc2FnZSB8fCAndW5rbm93bi1lcnJvcic7XG4gICAgICBjb25zdCBsYXllck1lc3NhZ2UgPSBsYXllcj8uaWQgPyBgIGluICR7bGF5ZXIuaWR9IGxheWVyYCA6ICcnO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlRnVsbCA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ1dlYkdMIGNvbnRleHQgaXMgbG9zdCdcbiAgICAgICAgICA/ICdZb3VyIEdQVSB3YXMgZGlzY29ubmVjdGVkLiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91ciBjb21wdXRlciBnb2VzIHRvIHNsZWVwLiBJdCBjYW4gYWxzbyBvY2N1ciBmb3Igb3RoZXIgcmVhc29ucywgc3VjaCBhcyBpZiB5b3UgYXJlIHJ1bm5pbmcgdG9vIG1hbnkgR1BVIGFwcGxpY2F0aW9ucy4nXG4gICAgICAgICAgOiBgQW4gZXJyb3IgaW4gZGVjay5nbDogJHtlcnJvck1lc3NhZ2V9JHtsYXllck1lc3NhZ2V9LmA7XG5cbiAgICAgIC8vIFRocm90dGxlIGVycm9yIG5vdGlmaWNhdGlvbnMsIGFzIFJlYWN0IGRvZXNuJ3QgbGlrZSB0b28gbWFueSBzdGF0ZSBjaGFuZ2VzIGZyb20gaGVyZS5cbiAgICAgIGNvbnN0IGxhc3RTaG93biA9IHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF07XG4gICAgICBpZiAoIWxhc3RTaG93biB8fCBsYXN0U2hvd24gPCBEYXRlLm5vdygpIC0gVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUpIHtcbiAgICAgICAgdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gTWFyayBsYXllciBhcyBpbnZhbGlkXG4gICAgICAgIGxldCBleHRyYUxheWVyTWVzc2FnZSA9ICcnO1xuICAgICAgICBjb25zdCB7dmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChsYXllcikge1xuICAgICAgICAgIGxldCB0b3BNb3N0TGF5ZXIgPSBsYXllcjtcbiAgICAgICAgICB3aGlsZSAodG9wTW9zdExheWVyLnBhcmVudCkge1xuICAgICAgICAgICAgdG9wTW9zdExheWVyID0gdG9wTW9zdExheWVyLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvcE1vc3RMYXllci5wcm9wcz8uaWQpIHtcbiAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllclNldElzVmFsaWQodG9wTW9zdExheWVyLCBmYWxzZSk7XG4gICAgICAgICAgICBleHRyYUxheWVyTWVzc2FnZSA9ICdUaGUgbGF5ZXIgaGFzIGJlZW4gZGlzYWJsZWQgYW5kIGhpZ2hsaWdodGVkLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBlcnJvciBub3RpZmljYXRpb24gb3IgdXBkYXRlIGV4aXN0aW5nIG9uZSB3aXRoIHNhbWUgaWQuXG4gICAgICAgIC8vIFVwZGF0ZSBpcyByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygbm90aWZpY2F0aW9ucyBhcyB0aGV5IHByb2JhYmx5IGFyZSBnb2luZyB0byBcImp1bXBcIiBiYXNlZCBvbiBvcmRlciBvZiBlcnJvcnMuXG4gICAgICAgIGNvbnN0IHt1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICB1aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyb3JNZXNzYWdlRnVsbH0gJHtleHRyYUxheWVyTWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6IGVycm9yTWVzc2FnZUZ1bGwgLy8gdHJlYXQgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9ucyAqL1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXBQb3BvdmVyKCkge1xuICAgICAgLy8gdGhpcyBjaGVjayBpcyBmb3IgbGltaXRpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGA8TWFwUG9wb3Zlcj5gIHRvIHRoZSBgPE1hcENvbnRhaW5lcj5gIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGhcbiAgICAgIC8vIHRoZSBEZWNrR0wgb25Ib3ZlciBldmVudCBoYW5kbGVyIGFkZHMgYSBgbWFwSW5kZXhgIHByb3BlcnR5IHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGhvdmVySW5mb2Agb2JqZWN0IG9mIGB2aXNTdGF0ZWBcbiAgICAgIGlmICh0aGlzLnByb3BzLmluZGV4ICE9PSB0aGlzLnByb3BzLnZpc1N0YXRlLmhvdmVySW5mbz8ubWFwSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHJlZHVjZXIgc28gaXQgY2FuIGJlIHRlc3RlZFxuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGU6IHtcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIG1vdXNlUG9zOiB7bW91c2VQb3NpdGlvbiwgY29vcmRpbmF0ZSwgcGlubmVkfVxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBpZiAoIW1vdXNlUG9zaXRpb24gfHwgIWludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheWVySG92ZXJQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICBob3ZlckluZm8sXG4gICAgICAgIGxheWVycyxcbiAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGFyZU1vZGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZ1xuICAgICAgICA/IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVNb2RlXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICAgIGxldCBwaW5uZWRQb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcbiAgICAgIGxldCBsYXllclBpbm5lZFByb3A6IExheWVySG92ZXJQcm9wIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAocGlubmVkIHx8IGNsaWNrZWQpIHtcbiAgICAgICAgLy8gcHJvamVjdCBsbmdsYXQgdG8gc2NyZWVuIHNvIHRoYXQgdG9vbHRpcCBmb2xsb3dzIHRoZSBvYmplY3Qgb24gem9vbVxuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKG1hcFN0YXRlKTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gY2xpY2tlZCA/IGNsaWNrZWQuY29vcmRpbmF0ZSA6IHBpbm5lZC5jb29yZGluYXRlO1xuICAgICAgICBwaW5uZWRQb3NpdGlvbiA9IHRoaXMuX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCk7XG4gICAgICAgIGxheWVyUGlubmVkUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgaG92ZXJJbmZvOiBjbGlja2VkLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgICBkYXRhc2V0c1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxheWVySG92ZXJQcm9wICYmIGxheWVyUGlubmVkUHJvcCkge1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLnByaW1hcnlEYXRhID0gbGF5ZXJQaW5uZWRQcm9wLmRhdGE7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AuY29tcGFyZVR5cGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tb25Qcm9wID0ge1xuICAgICAgICBvbkNsb3NlOiB0aGlzLl9vbkNsb3NlTWFwUG9wb3ZlcixcbiAgICAgICAgem9vbTogbWFwU3RhdGUuem9vbSxcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLl9kZWNrID8gdGhpcy5fZGVjay5jYW52YXMgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIHtsYXllclBpbm5lZFByb3AgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgey4uLnBpbm5lZFBvc2l0aW9ufVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVyUGlubmVkUHJvcH1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIChwaW5uZWQgfHwge30pLmNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIGZyb3plbj17dHJ1ZX1cbiAgICAgICAgICAgICAgaXNCYXNlPXtjb21wYXJlTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtsYXllckhvdmVyUHJvcCAmJiAoIWxheWVyUGlubmVkUHJvcCB8fCBjb21wYXJlTW9kZSkgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgeD17bW91c2VQb3NpdGlvblswXX1cbiAgICAgICAgICAgICAgeT17bW91c2VQb3NpdGlvblsxXX1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllckhvdmVyUHJvcH1cbiAgICAgICAgICAgICAgZnJvemVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIGNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIF9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpIHtcbiAgICAgIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICAgICAgcmV0dXJuIHNjcmVlbkNvb3JkICYmIHt4OiBzY3JlZW5Db29yZFswXSwgeTogc2NyZWVuQ29vcmRbMV19O1xuICAgIH1cblxuICAgIF9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgIGxheWVyc0ZvckRlY2ssXG4gICAgICBvcHRpb25zOiB7cHJpbWFyeU1hcDogYm9vbGVhbjsgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlfSA9IHtcbiAgICAgICAgcHJpbWFyeU1hcDogZmFsc2VcbiAgICAgIH1cbiAgICApIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICBkZWNrR2xQcm9wcyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZ2VuZXJhdGVEZWNrR0xMYXllcnMsXG4gICAgICAgIG9uTW91c2VNb3ZlXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2hvdmVySW5mbywgZWRpdG9yfSA9IHZpc1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnlNYXAsIGlzSW50ZXJhY3RpdmUsIGNoaWxkcmVufSA9IG9wdGlvbnM7XG5cbiAgICAgIC8vIGRpc2FibGUgZG91YmxlIGNsaWNrIHpvb20gd2hlbiBlZGl0b3IgaXMgaW4gYW55IGRyYXcgbW9kZVxuICAgICAgY29uc3Qge21hcERyYXd9ID0gbWFwQ29udHJvbHM7XG4gICAgICBjb25zdCB7YWN0aXZlOiBlZGl0b3JNZW51QWN0aXZlID0gZmFsc2V9ID0gbWFwRHJhdyB8fCB7fTtcbiAgICAgIGNvbnN0IGlzRWRpdG9yRHJhd2luZ01vZGUgPSBFZGl0b3JMYXllclV0aWxzLmlzRHJhd2luZ0FjdGl2ZShlZGl0b3JNZW51QWN0aXZlLCBlZGl0b3IubW9kZSk7XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBpbnRlcm5hbE1hcFN0YXRlID0gey4uLm1hcFN0YXRlLCAuLi5pbnRlcm5hbFZpZXdTdGF0ZX07XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKGludGVybmFsTWFwU3RhdGUpO1xuXG4gICAgICBjb25zdCBlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3Qge3NldEZlYXR1cmVzLCBvbkxheWVyQ2xpY2ssIHNldFNlbGVjdGVkRmVhdHVyZX0gPSB2aXNTdGF0ZUFjdGlvbnM7XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kID0gZ2VuZXJhdGVEZWNrR0xMYXllcnMgPz8gY29tcHV0ZURlY2tMYXllcnM7XG4gICAgICBjb25zdCBkZWNrR2xMYXllcnMgPSBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZChcbiAgICAgICAge1xuICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgIG1hcFN0YXRlOiBpbnRlcm5hbE1hcFN0YXRlLFxuICAgICAgICAgIG1hcFN0eWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXBJbmRleDogaW5kZXgsXG4gICAgICAgICAgcHJpbWFyeU1hcCxcbiAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICBlZGl0b3JJbmZvOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBvblNldEZlYXR1cmVzOiBzZXRGZWF0dXJlcyxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbjogdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICd1bmtub3duJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICAgICAgICAgICAgICAgIGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25MYXllckhvdmVyOiB0aGlzLl9vbkxheWVySG92ZXIsXG4gICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdGhpcy5fb25MYXllclNldERvbWFpbixcbiAgICAgICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IHRoaXMuX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlLFxuICAgICAgICAgIG9uV01TRmVhdHVyZUluZm86IHRoaXMuX29uV01TRmVhdHVyZUluZm9cbiAgICAgICAgfSxcbiAgICAgICAgZGVja0dsUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV4dHJhRGVja1BhcmFtczoge1xuICAgICAgICBnZXRUb29sdGlwPzogKGluZm86IGFueSkgPT4gb2JqZWN0IHwgbnVsbDtcbiAgICAgICAgZ2V0Q3Vyc29yPzogKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiBzdHJpbmc7XG4gICAgICB9ID0ge307XG4gICAgICBpZiAocHJpbWFyeU1hcCkge1xuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0VG9vbHRpcCA9IGluZm8gPT5cbiAgICAgICAgICBFZGl0b3JMYXllclV0aWxzLmdldFRvb2x0aXAoaW5mbywge1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldEN1cnNvciA9ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvckN1cnNvciA9IEVkaXRvckxheWVyVXRpbHMuZ2V0Q3Vyc29yKHtcbiAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICBob3ZlckluZm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZWRpdG9yQ3Vyc29yKSByZXR1cm4gZWRpdG9yQ3Vyc29yO1xuXG4gICAgICAgICAgaWYgKGlzRHJhZ2dpbmcpIHJldHVybiAnZ3JhYmJpbmcnO1xuICAgICAgICAgIGlmIChob3ZlckluZm8/LmxheWVyKSByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgICAgIHJldHVybiAnZ3JhYic7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVmZmVjdHMgPSB0aGlzLl9pc09LVG9SZW5kZXJFZmZlY3RzKGluZGV4KVxuICAgICAgICA/IGNvbXB1dGVEZWNrRWZmZWN0cyh7dmlzU3RhdGUsIG1hcFN0YXRlfSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3Qgdmlld3MgPSBkZWNrR2xQcm9wcz8udmlld3NcbiAgICAgICAgPyBkZWNrR2xQcm9wcz8udmlld3MoKVxuICAgICAgICA6IG5ldyBNYXBWaWV3KHtsZWdhY3lNZXRlclNpemVzOiB0cnVlfSk7XG5cbiAgICAgIGxldCBhbGxEZWNrR2xQcm9wcyA9IHtcbiAgICAgICAgLi4uZGVja0dsUHJvcHMsXG4gICAgICAgIHBpY2tpbmdSYWRpdXM6IERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gICAgICAgIHZpZXdzLFxuICAgICAgICBsYXllcnM6IGRlY2tHbExheWVycyxcbiAgICAgICAgZWZmZWN0c1xuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWxsRGVja0dsUHJvcHMgPSBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja1JlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgIGlmICghYWxsRGVja0dsUHJvcHMpIHtcbiAgICAgICAgICAvLyBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsLCBkbyBub3QgcmVuZGVyIGRlY2suZ2xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgey4uLihpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZTogcHJpbWFyeU1hcFxuICAgICAgICAgICAgICAgICAgPyBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU/LihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Nb3VzZU1vdmVEZWJvdW5jZWQoZXZlbnQsIHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7c3R5bGU6IHtwb2ludGVyRXZlbnRzOiAnbm9uZSd9fSl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGVja0dMXG4gICAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgICAgb25Mb2FkPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrTG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrTG9hZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLmFsbERlY2tHbFByb3BzfVxuICAgICAgICAgICAgY29udHJvbGxlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZG91YmxlQ2xpY2tab29tOiAhaXNFZGl0b3JEcmF3aW5nTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1JvdGF0ZTogdGhpcy5wcm9wcy5tYXBTdGF0ZS5kcmFnUm90YXRlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5pdGlhbFZpZXdTdGF0ZT17aW50ZXJuYWxWaWV3U3RhdGV9XG4gICAgICAgICAgICBvbkJlZm9yZVJlbmRlcj17dGhpcy5fb25CZWZvcmVSZW5kZXJ9XG4gICAgICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZT17aXNJbnRlcmFjdGl2ZSA/IHRoaXMuX29uVmlld3BvcnRDaGFuZ2UgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICB7Li4uZXh0cmFEZWNrUGFyYW1zfVxuICAgICAgICAgICAgb25Ib3Zlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uSG92ZXIoZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJIb3ZlckRlYm91bmNlZChkYXRhLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBub3JtYWxpemVFdmVudChldmVudC5zcmNFdmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uQ2xpY2soZGF0YSwgZXZlbnQsIHtcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBvbkxheWVyQ2xpY2ssXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAgIG1hcEluZGV4OiBpbmRleFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2soZGF0YSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25FcnJvcj17dGhpcy5fb25EZWNrRXJyb3J9XG4gICAgICAgICAgICByZWY9e2NvbXAgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIGlmIChjb21wICYmIGNvbXAuZGVjayAmJiAhdGhpcy5fZGVjaykge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWNrID0gY29tcC5kZWNrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25XZWJHTEluaXRpYWxpemVkPXtnbCA9PiB0aGlzLl9vbkRlY2tJbml0aWFsaXplZChnbCl9XG4gICAgICAgICAgICBvbkFmdGVyUmVuZGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrQWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0FmdGVyUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFyZUFueURlY2tMYXllcnNMb2FkaW5nKGFsbERlY2tHbFByb3BzLmxheWVycyk7XG4gICAgICAgICAgICAgIGlmIChhbnlBY3RpdmVMYXllckxvYWRpbmcgIT09IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYW55QWN0aXZlTGF5ZXJMb2FkaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L0RlY2tHTD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXBib3hMYXllcnMoKSB7XG4gICAgICBjb25zdCBtYXBib3hMYXllcnMgPSB0aGlzLm1hcGJveExheWVyc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKCFPYmplY3Qua2V5cyhtYXBib3hMYXllcnMpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXModGhpcy5wcmV2aW91c0xheWVycykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlTWFwYm94TGF5ZXJzKHRoaXMuX21hcCwgbWFwYm94TGF5ZXJzLCB0aGlzLnByZXZpb3VzTGF5ZXJzKTtcblxuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IG1hcGJveExheWVycztcbiAgICB9XG5cbiAgICBfcmVuZGVyTWFwYm94T3ZlcmxheXMoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwICYmIHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkKCkpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZSh0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIG9uVmlld1BvcnRDaGFuZ2UoXG4gICAgICAgIHZpZXdTdGF0ZSxcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICAgICAgICB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnksXG4gICAgICAgIHRoaXMucHJvcHMuaW5kZXhcbiAgICAgICk7XG4gICAgfSwgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFKTtcblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld3BvcnQgPT4ge1xuICAgICAgY29uc3Qge3ZpZXdTdGF0ZX0gPSB2aWV3cG9ydDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzRXhwb3J0KSB7XG4gICAgICAgIC8vIEltYWdlIGV4cG9ydCBtYXAgc2hvdWxkbid0IGJlIGludGVyYWN0aXZlIChvdGhlcndpc2UgdGhpcyBjYWxsYmFjayBjYW5cbiAgICAgICAgLy8gbGVhZCB0byBpbmFkdmVydGVudCBjaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgbWFpbiBtYXApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtzZXRJbnRlcm5hbFZpZXdTdGF0ZX0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCgpO1xuICAgIH07XG5cbiAgICBfb25MYXllckhvdmVyRGVib3VuY2VkID0gZGVib3VuY2UoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoZGF0YSwgaW5kZXgpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbk1vdXNlTW92ZURlYm91bmNlZCA9IGRlYm91bmNlKChldmVudCwgdmlld3BvcnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTW91c2VNb3ZlKG5vcm1hbGl6ZUV2ZW50KGV2ZW50LCB2aWV3cG9ydCkpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgLy8gdHJpZ2dlciBsb2FkaW5nIGluZGljYXRvciB1cGRhdGUgd2l0aG91dCBhbnkgY2hhbmdlIHRvIHVwZGF0ZSBVSVxuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAwfSk7XG4gICAgfSwgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUpO1xuXG4gICAgX3RvZ2dsZU1hcENvbnRyb2wgPSBwYW5lbElkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleCwgdWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdWlTdGF0ZUFjdGlvbnMudG9nZ2xlTWFwQ29udHJvbChwYW5lbElkLCBOdW1iZXIoaW5kZXgpKTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgICAgTWFwQ29tcG9uZW50ID0gTWFwLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPSBbXSxcbiAgICAgICAgY29udGFpbmVySWQgPSAwLFxuICAgICAgICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWwsXG4gICAgICAgIHNpZGVQYW5lbFdpZHRoXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2xheWVycywgZGF0YXNldHMsIGVkaXRvciwgaW50ZXJhY3Rpb25Db25maWd9ID0gdmlzU3RhdGU7XG5cbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJzRm9yRGVjayA9IHRoaXMubGF5ZXJzRm9yRGVja1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICAvLyBDdXJyZW50IHN0eWxlIGNhbiBiZSBhIGN1c3RvbSBzdHlsZSwgZnJvbSB3aGljaCB3ZSBwdWxsIHRoZSBtYXBib3ggQVBJIGFjY2Nlc3MgdG9rZW5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IG1hcFN0eWxlLm1hcFN0eWxlcz8uW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeU5hbWUgPSBnZXRCYXNlTWFwTGlicmFyeShjdXJyZW50U3R5bGUpO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlDb25maWcgPVxuICAgICAgICBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnPy5bYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IG1hcFByb3BzID0ge1xuICAgICAgICAuLi5pbnRlcm5hbFZpZXdTdGF0ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlLFxuICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbjogY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gYmFzZUFwaVVybDogbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBMaWI6IGJhc2VNYXBMaWJyYXJ5Q29uZmlnLmdldE1hcExpYigpLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0OlxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNmb3JtUmVxdWVzdCB8fFxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3QoY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbilcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBCb29sZWFuKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICBjb25zdCBkZWNrID0gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaywge1xuICAgICAgICBwcmltYXJ5TWFwOiB0cnVlLFxuICAgICAgICBpc0ludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogKFxuICAgICAgICAgIDxNYXBDb21wb25lbnRcbiAgICAgICAgICAgIGtleT17YGJvdHRvbS0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgey4uLm1hcFByb3BzfVxuICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlLmJvdHRvbU1hcFN0eWxlID8/IEVNUFRZX01BUEJPWF9TVFlMRX1cbiAgICAgICAgICAgIHsuLi5ib3R0b21NYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIHJlZj17dGhpcy5fc2V0TWFwUmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkZWNrKSB7XG4gICAgICAgIC8vIGRlY2tPdmVybGF5IGNhbiBiZSBudWxsIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIHRoZSBtYXBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzPXtMT0NBTEVfQ09ERVNfQVJSQVl9XG4gICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgIHByaW1hcnk9e0Jvb2xlYW4ocHJpbWFyeSl9XG4gICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgbWFwQ29udHJvbHM9e21hcENvbnRyb2xzfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3RoaXMucHJvcHMucmVhZE9ubHl9XG4gICAgICAgICAgICBzY2FsZT17bWFwU3RhdGUuc2NhbGUgfHwgMX1cbiAgICAgICAgICAgIGxvZ29Db21wb25lbnQ9e3RoaXMucHJvcHMubG9nb0NvbXBvbmVudH1cbiAgICAgICAgICAgIHRvcD17XG4gICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IHRoZW1lLm1hcENvbnRyb2xUb3BcbiAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICBvblRvZ2dsZVBlcnNwZWN0aXZlPXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlUGVyc3BlY3RpdmV9XG4gICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwPXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXB9XG4gICAgICAgICAgICBvbk1hcFRvZ2dsZUxheWVyPXt0aGlzLl9oYW5kbGVNYXBUb2dnbGVMYXllcn1cbiAgICAgICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbD17dGhpcy5fdG9nZ2xlTWFwQ29udHJvbH1cbiAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXt2aXNTdGF0ZUFjdGlvbnMubGF5ZXJWaXNDb25maWdDaGFuZ2V9XG4gICAgICAgICAgICBtYXBIZWlnaHQ9e21hcFN0YXRlLmhlaWdodH1cbiAgICAgICAgICAgIHNldE1hcENvbnRyb2xTZXR0aW5ncz17dWlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzfVxuICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXthY3RpdmVTaWRlUGFuZWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7aXNTcGxpdFNlbGVjdG9yKHRoaXMucHJvcHMpICYmIDxEcm9wcGFibGUgY29udGFpbmVySWQ9e2NvbnRhaW5lcklkfSAvPn1cblxuICAgICAgICAgIHtkZWNrfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBib3hPdmVybGF5cygpfVxuICAgICAgICAgIDxFZGl0b3JcbiAgICAgICAgICAgIGluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICBmaWx0ZXJzPXt0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIG9uRGVsZXRlRmVhdHVyZT17dmlzU3RhdGVBY3Rpb25zLmRlbGV0ZUZlYXR1cmV9XG4gICAgICAgICAgICBvblNlbGVjdD17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlUG9seWdvbkZpbHRlcj17dmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJMYXllcn1cbiAgICAgICAgICAgIG9uU2V0RWRpdG9yTW9kZT17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvck1vZGV9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnYWxsJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGVkaXRvci52aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIHttYXBTdHlsZS50b3BNYXBTdHlsZSA/IChcbiAgICAgICAgICAgIDxNYXBDb21wb25lbnRcbiAgICAgICAgICAgICAga2V5PXtgdG9wLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICAgIHZpZXdTdGF0ZT17aW50ZXJuYWxWaWV3U3RhdGV9XG4gICAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS50b3BNYXBTdHlsZX1cbiAgICAgICAgICAgICAgc3R5bGU9e01BUF9TVFlMRS50b3B9XG4gICAgICAgICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuPXttYXBQcm9wcy5tYXBib3hBY2Nlc3NUb2tlbn1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17bWFwUHJvcHMudHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICAgICAgbWFwTGliPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5nZXRNYXBMaWIoKX1cbiAgICAgICAgICAgICAgey4uLnRvcE1hcENvbnRhaW5lclByb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHtoYXNHZW9jb2RlckxheWVyXG4gICAgICAgICAgICA/IHRoaXMuX3JlbmRlckRlY2tPdmVybGF5KFxuICAgICAgICAgICAgICAgIHtbR0VPQ09ERVJfTEFZRVJfSURdOiBoYXNHZW9jb2RlckxheWVyfSxcbiAgICAgICAgICAgICAgICB7cHJpbWFyeU1hcDogZmFsc2UsIGlzSW50ZXJhY3RpdmU6IGZhbHNlfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcFBvcG92ZXIoKX1cbiAgICAgICAgICB7cHJpbWFyeSAhPT0gaXNTcGxpdCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzVmlzaWJsZT17Qm9vbGVhbihpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIHx8IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKX1cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXtCb29sZWFuKGFjdGl2ZVNpZGVQYW5lbCl9XG4gICAgICAgICAgICAgIHNpZGVQYW5lbFdpZHRoPXtzaWRlUGFuZWxXaWR0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvblxuICAgICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ289e3RoaXMuc3RhdGUuc2hvd0Jhc2VNYXBBdHRyaWJ1dGlvbn1cbiAgICAgICAgICAgICAgc2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbj17dHJ1ZX1cbiAgICAgICAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlDb25maWc9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHt2aXNTdGF0ZSwgbWFwU3R5bGV9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IG1hcENvbnRlbnQgPSB0aGlzLl9yZW5kZXJNYXAoKTtcbiAgICAgIGlmICghbWFwQ29udGVudCkge1xuICAgICAgICAvLyBtYXBDb250ZW50IGNhbiBiZSBudWxsIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIHRoZSBtYXBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IG1hcFN0eWxlLm1hcFN0eWxlcz8uW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeU5hbWUgPSBnZXRCYXNlTWFwTGlicmFyeShjdXJyZW50U3R5bGUpO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlDb25maWcgPVxuICAgICAgICBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnPy5bYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcFxuICAgICAgICAgIHJlZj17dGhpcy5fcmVmfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgb25Db250ZXh0TWVudT17ZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAkbWl4QmxlbmRNb2RlPXt2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgJG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBDb250ZW50fVxuICAgICAgICA8L1N0eWxlZE1hcD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBDb250YWluZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsT0FBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBSCxzQkFBQSxDQUFBSixPQUFBO0FBS0EsSUFBQVEsV0FBQSxHQUFBSixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVMsV0FBQSxHQUFBTCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVUsa0JBQUEsR0FBQVYsT0FBQTtBQU1BLElBQUFXLE9BQUEsR0FBQVAsc0JBQUEsQ0FBQUosT0FBQTtBQUdBLElBQUFZLE9BQUEsR0FBQVosT0FBQTtBQWdCQSxJQUFBYSxNQUFBLEdBQUFiLE9BQUE7QUFvQkEsSUFBQWMsT0FBQSxHQUFBZCxPQUFBO0FBR0EsSUFBQWUsVUFBQSxHQUFBZixPQUFBO0FBU0EsSUFBQWdCLGNBQUEsR0FBQWhCLE9BQUE7QUFFQSxJQUFBaUIsb0JBQUEsR0FBQWpCLE9BQUE7QUFFQSxJQUFBa0IsY0FBQSxHQUFBZCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQW1CLGFBQUEsR0FBQW5CLE9BQUE7QUFDQSxJQUFBb0IsTUFBQSxHQUFBcEIsT0FBQTtBQUNBLElBQUFxQixTQUFBLEdBQUFyQixPQUFBO0FBWUEsSUFBQXNCLGlCQUFBLEdBQUFsQixzQkFBQSxDQUFBSixPQUFBO0FBQW1ELElBQUF1QixlQUFBLEVBQUFDLGdCQUFBLEVBOUZuRDtBQUNBO0FBRUE7QUFZQTtBQVdBO0FBdUNBO0FBV0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQTNCLHdCQUFBMkIsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxjQUFBUixDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFXLFFBQUFuQixDQUFBLEVBQUFFLENBQUEsUUFBQUMsQ0FBQSxHQUFBUSxNQUFBLENBQUFTLElBQUEsQ0FBQXBCLENBQUEsT0FBQVcsTUFBQSxDQUFBVSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFYLE1BQUEsQ0FBQVUscUJBQUEsQ0FBQXJCLENBQUEsR0FBQUUsQ0FBQSxLQUFBb0IsQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQXJCLENBQUEsV0FBQVMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFFLENBQUEsRUFBQXNCLFVBQUEsT0FBQXJCLENBQUEsQ0FBQXNCLElBQUEsQ0FBQUMsS0FBQSxDQUFBdkIsQ0FBQSxFQUFBbUIsQ0FBQSxZQUFBbkIsQ0FBQTtBQUFBLFNBQUF3QixjQUFBM0IsQ0FBQSxhQUFBRSxDQUFBLE1BQUFBLENBQUEsR0FBQTBCLFNBQUEsQ0FBQUMsTUFBQSxFQUFBM0IsQ0FBQSxVQUFBQyxDQUFBLFdBQUF5QixTQUFBLENBQUExQixDQUFBLElBQUEwQixTQUFBLENBQUExQixDQUFBLFFBQUFBLENBQUEsT0FBQWlCLE9BQUEsQ0FBQVIsTUFBQSxDQUFBUixDQUFBLE9BQUEyQixPQUFBLFdBQUE1QixDQUFBLFFBQUE2QixnQkFBQSxhQUFBL0IsQ0FBQSxFQUFBRSxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBUyxNQUFBLENBQUFxQix5QkFBQSxHQUFBckIsTUFBQSxDQUFBc0IsZ0JBQUEsQ0FBQWpDLENBQUEsRUFBQVcsTUFBQSxDQUFBcUIseUJBQUEsQ0FBQTdCLENBQUEsS0FBQWdCLE9BQUEsQ0FBQVIsTUFBQSxDQUFBUixDQUFBLEdBQUEyQixPQUFBLFdBQUE1QixDQUFBLElBQUFTLE1BQUEsQ0FBQUMsY0FBQSxDQUFBWixDQUFBLEVBQUFFLENBQUEsRUFBQVMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixDQUFBLEVBQUFELENBQUEsaUJBQUFGLENBQUE7QUFBQSxTQUFBa0MsV0FBQS9CLENBQUEsRUFBQW1CLENBQUEsRUFBQXRCLENBQUEsV0FBQXNCLENBQUEsT0FBQWEsZ0JBQUEsYUFBQWIsQ0FBQSxPQUFBYywyQkFBQSxhQUFBakMsQ0FBQSxFQUFBa0MseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFqQixDQUFBLEVBQUF0QixDQUFBLFlBQUFtQyxnQkFBQSxhQUFBaEMsQ0FBQSxFQUFBcUMsV0FBQSxJQUFBbEIsQ0FBQSxDQUFBSSxLQUFBLENBQUF2QixDQUFBLEVBQUFILENBQUE7QUFBQSxTQUFBcUMsMEJBQUEsY0FBQWxDLENBQUEsSUFBQXNDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBQyxPQUFBLENBQUEzQixJQUFBLENBQUFzQixPQUFBLENBQUFDLFNBQUEsQ0FBQUUsT0FBQSxpQ0FBQXRDLENBQUEsYUFBQWtDLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFsQyxDQUFBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBLElBQU15QywyQkFBMkIsR0FBRyxFQUFFO0FBQ3RDLElBQU1DLDZCQUE2QixHQUFHLEVBQUU7O0FBRXhDO0FBQ0EsSUFBTUMsZ0NBQWdDLEdBQUcsR0FBRztBQUU1QyxJQUFNQyxTQUErQyxHQUFHO0VBQ3REQyxTQUFTLEVBQUU7SUFDVEMsT0FBTyxFQUFFLGNBQWM7SUFDdkJDLFFBQVEsRUFBRSxVQUFVO0lBQ3BCQyxLQUFLLEVBQUUsTUFBTTtJQUNiQyxNQUFNLEVBQUU7RUFDVixDQUFDO0VBQ0RDLEdBQUcsRUFBRTtJQUNISCxRQUFRLEVBQUUsVUFBVTtJQUNwQkcsR0FBRyxFQUFFLENBQUM7SUFDTkYsS0FBSyxFQUFFLE1BQU07SUFDYkMsTUFBTSxFQUFFLE1BQU07SUFDZEUsYUFBYSxFQUFFO0VBQ2pCO0FBQ0YsQ0FBQztBQUVELElBQU1DLGtCQUFrQixHQUFHNUMsTUFBTSxDQUFDUyxJQUFJLENBQUNvQywwQkFBWSxDQUFDO0FBT3BELElBQU1DLFNBQVMsR0FBRyxJQUFBQyw0QkFBTSxFQUFDQyxxQ0FBa0IsQ0FBQyxDQUMxQyxVQUFBQyxJQUFBO0VBQUEsSUFBQUMsa0JBQUEsR0FBQUQsSUFBQSxDQUFFRSxhQUFhO0lBQWJBLGFBQWEsR0FBQUQsa0JBQUEsY0FBRyxRQUFRLEdBQUFBLGtCQUFBO0lBQUVFLGVBQWUsR0FBQUgsSUFBQSxDQUFmRyxlQUFlO0VBQUEsNkRBQUFDLE1BQUEsQ0FFdkJGLGFBQWEsbUJBQUFFLE1BQUEsQ0FFN0JELGVBQWU7QUFBQSxDQUlyQixDQUFDO0FBRUQsSUFBTUUscUJBQXFCLEdBQUcsWUFBWTtBQUMxQyxJQUFNQyxlQUFlLEdBQUcsUUFBUTtBQUNoQyxJQUFNQyxHQUFHLEdBQUcsU0FBTkEsR0FBR0EsQ0FBQSxFQUFTO0VBQ2hCO0FBQ0YsQ0FBQztBQU1ELElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFBQyxLQUFBO0VBQUEsSUFBS0Msb0JBQW9CLEdBQUFELEtBQUEsQ0FBcEJDLG9CQUFvQjtFQUFBLG9CQUN2Q2xHLE1BQUEsWUFBQW1HLGFBQUE7SUFBS0MsU0FBUyxFQUFDO0VBQWdCLEdBQUMsYUFFOUIsZUFBQXBHLE1BQUEsWUFBQW1HLGFBQUE7SUFDRUUsS0FBSyxFQUFFO01BQUNDLFVBQVUsRUFBRTtJQUFLLENBQUU7SUFDM0JGLFNBQVMsS0FBQVIsTUFBQSxDQUFLTSxvQkFBb0IsQ0FBQ0ssY0FBYyxlQUFhO0lBQzlEQyxNQUFNLEVBQUMsUUFBUTtJQUNmQyxHQUFHLEVBQUMscUJBQXFCO0lBQ3pCQyxJQUFJLEVBQUVSLG9CQUFvQixDQUFDUyxTQUFVO0lBQ3JDLGlCQUFBZixNQUFBLENBQWVNLG9CQUFvQixDQUFDVSxVQUFVO0VBQVEsQ0FDdkQsQ0FDRSxDQUFDO0FBQUEsQ0FDUDtBQU1ELElBQU1DLGVBQWUsR0FBR3ZCLDRCQUFNLENBQUN3QixHQUFHLENBQUFyRixlQUFBLEtBQUFBLGVBQUEsT0FBQXNGLHVCQUFBLGtKQUNaLFVBQUFDLEtBQUs7RUFBQSxPQUFLQSxLQUFLLENBQUNDLE1BQU0sR0FBR0QsS0FBSyxDQUFDRSxLQUFLLENBQUNDLHNCQUFzQixHQUFHLE1BQU07QUFBQSxDQUFDLENBTTFGO0FBRU0sSUFBTUMsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBR0osS0FBSztFQUFBLE9BQ2xDQSxLQUFLLENBQUNNLFFBQVEsQ0FBQ0MsU0FBUyxJQUFJUCxLQUFLLENBQUNNLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDOUQsTUFBTSxHQUFHLENBQUM7QUFBQTtBQUUxRCxJQUFNK0QsU0FBUyxHQUFBSCxPQUFBLENBQUFHLFNBQUEsR0FBRyxTQUFaQSxTQUFTQSxDQUFBQyxLQUFBLEVBQXNCO0VBQUEsSUFBakJDLFdBQVcsR0FBQUQsS0FBQSxDQUFYQyxXQUFXO0VBQ3BDLElBQUFDLGFBQUEsR0FBNkIsSUFBQUMsa0JBQVksRUFBQztNQUN4Q0MsRUFBRSxFQUFFSCxXQUFXO01BQ2ZJLElBQUksRUFBRTtRQUFDQyxJQUFJLEVBQUVDLDJDQUE0QjtRQUFFQyxLQUFLLEVBQUVQO01BQVcsQ0FBQztNQUM5RFEsUUFBUSxFQUFFLENBQUNSO0lBQ2IsQ0FBQyxDQUFDO0lBSktULE1BQU0sR0FBQVUsYUFBQSxDQUFOVixNQUFNO0lBQUVrQixVQUFVLEdBQUFSLGFBQUEsQ0FBVlEsVUFBVTtFQU16QixvQkFBT25JLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ1UsZUFBZTtJQUFDdUIsR0FBRyxFQUFFRCxVQUFXO0lBQUNsQixNQUFNLEVBQUVBO0VBQU8sQ0FBRSxDQUFDO0FBQzdELENBQUM7QUFNRCxJQUFNb0Isa0NBQWtDLEdBQUcvQyw0QkFBTSxDQUFDd0IsR0FBRyxDQUFBcEYsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXFGLHVCQUFBLHNQQUN0QyxVQUFBQyxLQUFLO0VBQUEsT0FBS0EsS0FBSyxDQUFDc0IsTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPO0FBQUEsQ0FBQyxFQUkvQyxVQUFBdEIsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0UsS0FBSyxDQUFDcUIsVUFBVTtBQUFBLEdBR3pCLFVBQUF2QixLQUFLO0VBQUEsT0FBS0EsS0FBSyxDQUFDc0IsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPO0FBQUEsQ0FBQyxDQUt6RDtBQUVELElBQU1FLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUFDLEtBQUE7RUFBQSxJQUN2QkMsbUJBQW1CLEdBQUFELEtBQUEsQ0FBbkJDLG1CQUFtQjtJQUNuQkosTUFBTSxHQUFBRyxLQUFBLENBQU5ILE1BQU07RUFBQSxvQkFLTnRJLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQW5HLE1BQUEsWUFBQTJJLFFBQUEsUUFDR0QsbUJBQW1CLGFBQW5CQSxtQkFBbUIsZUFBbkJBLG1CQUFtQixDQUFFakYsTUFBTSxnQkFDMUJ6RCxNQUFBLFlBQUFtRyxhQUFBLENBQUNrQyxrQ0FBa0M7SUFBQ0MsTUFBTSxFQUFFQTtFQUFPLEdBQ2hESSxtQkFBbUIsQ0FBQ0UsR0FBRyxDQUFDLFVBQUNDLEVBQUUsRUFBRUMsR0FBRztJQUFBLG9CQUMvQjlJLE1BQUEsWUFBQW1HLGFBQUEsVUFBQTRDLFNBQUEsaUJBQ09GLEVBQUUsQ0FBQ0csR0FBRyxHQUFHO01BQUN0QyxJQUFJLEVBQUVtQyxFQUFFLENBQUNHO0lBQUcsQ0FBQyxHQUFHLElBQUk7TUFDbkN4QyxNQUFNLEVBQUMsUUFBUTtNQUNmQyxHQUFHLEVBQUMscUJBQXFCO01BQ3pCd0MsR0FBRyxLQUFBckQsTUFBQSxDQUFLaUQsRUFBRSxDQUFDSyxLQUFLLE9BQUF0RCxNQUFBLENBQUlrRCxHQUFHO0lBQUcsSUFFekJELEVBQUUsQ0FBQ0ssS0FBSyxFQUNSSixHQUFHLEtBQUtKLG1CQUFtQixDQUFDakYsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFDaEQsQ0FBQztFQUFBLENBQ0wsQ0FDaUMsQ0FBQyxHQUNuQyxJQUNKLENBQUM7QUFBQSxDQUNKO0FBU00sSUFBTTBGLFdBQXVDLEdBQUE5QixPQUFBLENBQUE4QixXQUFBLEdBQUcsU0FBMUNBLFdBQXVDQSxDQUFBQyxLQUFBLEVBSzVCO0VBQUEsSUFBQUMscUJBQUEsR0FBQUQsS0FBQSxDQUp0QkUsa0JBQWtCO0lBQWxCQSxrQkFBa0IsR0FBQUQscUJBQUEsY0FBRyxJQUFJLEdBQUFBLHFCQUFBO0lBQUFFLHFCQUFBLEdBQUFILEtBQUEsQ0FDekJJLHlCQUF5QjtJQUF6QkEseUJBQXlCLEdBQUFELHFCQUFBLGNBQUcsS0FBSyxHQUFBQSxxQkFBQTtJQUNqQ2IsbUJBQW1CLEdBQUFVLEtBQUEsQ0FBbkJWLG1CQUFtQjtJQUNuQnhDLG9CQUFvQixHQUFBa0QsS0FBQSxDQUFwQmxELG9CQUFvQjtFQUVwQixJQUFNb0MsTUFBTSxHQUFHLElBQUFtQixxQkFBYyxFQUFDQyx3QkFBZ0IsQ0FBQztFQUUvQyxJQUFNQyxrQkFBa0IsR0FBRyxJQUFBQyxjQUFPLEVBQUMsWUFBTTtJQUN2QyxJQUFJLENBQUNOLGtCQUFrQixFQUFFO01BQ3ZCLG9CQUNFdEosTUFBQSxZQUFBbUcsYUFBQSxDQUFDdkYsa0JBQUEsQ0FBQWlKLGlCQUFpQjtRQUNoQnRELGNBQWMsRUFBRUwsb0JBQW9CLENBQUNLLGNBQWU7UUFDcER1RCx5QkFBeUIsRUFBRTVELG9CQUFvQixDQUFDNEQ7TUFBMEIsZ0JBRTFFOUosTUFBQSxZQUFBbUcsYUFBQSxDQUFDdkYsa0JBQUEsQ0FBQW1KLG9CQUFvQixxQkFDbkIvSixNQUFBLFlBQUFtRyxhQUFBLENBQUNxQyxtQkFBbUI7UUFBQ0UsbUJBQW1CLEVBQUVBLG1CQUFvQjtRQUFDSixNQUFNLEVBQUVBO01BQU8sQ0FBRSxDQUFDLEVBQ2hGa0IseUJBQXlCLGdCQUN4QnhKLE1BQUEsWUFBQW1HLGFBQUE7UUFBS0MsU0FBUyxFQUFDO01BQWdCLEdBQzVCc0MsbUJBQW1CLGFBQW5CQSxtQkFBbUIsZUFBbkJBLG1CQUFtQixDQUFFakYsTUFBTSxnQkFBR3pELE1BQUEsWUFBQW1HLGFBQUE7UUFBTUMsU0FBUyxFQUFDO01BQWdCLEdBQUMsR0FBTyxDQUFDLEdBQUcsSUFBSSxlQUMvRXBHLE1BQUEsWUFBQW1HLGFBQUE7UUFDRU8sSUFBSSxFQUFDLHdDQUF3QztRQUM3Q0YsTUFBTSxFQUFDLFFBQVE7UUFDZkMsR0FBRyxFQUFDO01BQXFCLEdBQzFCLG9CQUVFLENBQ0EsQ0FBQyxHQUNKLElBQ2dCLENBQ0wsQ0FBQztJQUV4QjtJQUVBLG9CQUNFekcsTUFBQSxZQUFBbUcsYUFBQSxDQUFDdkYsa0JBQUEsQ0FBQWlKLGlCQUFpQjtNQUNoQnRELGNBQWMsRUFBRUwsb0JBQW9CLENBQUNLLGNBQWU7TUFDcER1RCx5QkFBeUIsRUFBRTVELG9CQUFvQixDQUFDNEQ7SUFBMEIsZ0JBRTFFOUosTUFBQSxZQUFBbUcsYUFBQSxDQUFDdkYsa0JBQUEsQ0FBQW1KLG9CQUFvQixxQkFDbkIvSixNQUFBLFlBQUFtRyxhQUFBLENBQUNxQyxtQkFBbUI7TUFBQ0UsbUJBQW1CLEVBQUVBLG1CQUFvQjtNQUFDSixNQUFNLEVBQUVBO0lBQU8sQ0FBRSxDQUFDLGVBQ2pGdEksTUFBQSxZQUFBbUcsYUFBQTtNQUFLQyxTQUFTLEVBQUM7SUFBZ0IsR0FDNUJzQyxtQkFBbUIsYUFBbkJBLG1CQUFtQixlQUFuQkEsbUJBQW1CLENBQUVqRixNQUFNLGdCQUFHekQsTUFBQSxZQUFBbUcsYUFBQTtNQUFNQyxTQUFTLEVBQUM7SUFBZ0IsR0FBQyxHQUFPLENBQUMsR0FBRyxJQUFJLEVBQzlFa0MsTUFBTSxnQkFBR3RJLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ0gsVUFBVTtNQUFDRSxvQkFBb0IsRUFBRUE7SUFBcUIsQ0FBRSxDQUFDLEdBQUcsSUFBSSxlQUMzRWxHLE1BQUEsWUFBQW1HLGFBQUE7TUFBR08sSUFBSSxFQUFDLDJCQUEyQjtNQUFDRixNQUFNLEVBQUMsUUFBUTtNQUFDQyxHQUFHLEVBQUM7SUFBcUIsR0FBQyxrQkFDL0QsRUFBQyxHQUNiLENBQUMsRUFDSCxDQUFDNkIsTUFBTSxnQkFBR3RJLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ0gsVUFBVTtNQUFDRSxvQkFBb0IsRUFBRUE7SUFBcUIsQ0FBRSxDQUFDLEdBQUcsSUFDckUsQ0FDZSxDQUNMLENBQUM7RUFFeEIsQ0FBQyxFQUFFLENBQ0RvRCxrQkFBa0IsRUFDbEJFLHlCQUF5QixFQUN6QmQsbUJBQW1CLEVBQ25CSixNQUFNLEVBQ05wQyxvQkFBb0IsQ0FDckIsQ0FBQztFQUVGLE9BQU95RCxrQkFBa0I7QUFDM0IsQ0FBQztBQUVESyxtQkFBbUIsQ0FBQ0MsSUFBSSxHQUFHLENBQUNDLHNCQUFpQixFQUFFQyxzQkFBaUIsRUFBRUMsa0JBQWEsQ0FBQztBQThEakUsU0FBU0osbUJBQW1CQSxDQUN6Q0ssVUFBZ0QsRUFDaERDLFVBQWdELEVBQ2hEQyxNQUF3QyxFQUNBO0VBQUEsSUFDbENDLFlBQVksMEJBQUFDLFVBQUE7SUFnQmhCLFNBQUFELGFBQVl4RCxNQUFLLEVBQUU7TUFBQSxJQUFBMEQsS0FBQTtNQUFBLElBQUFDLGdCQUFBLG1CQUFBSCxZQUFBO01BQ2pCRSxLQUFBLEdBQUE1RyxVQUFBLE9BQUEwRyxZQUFBLEdBQU14RCxNQUFLO01BQUUsSUFBQXJELGdCQUFBLGFBQUErRyxLQUFBLGlCQWhCRCxjQUFjO01BQUEsSUFBQS9HLGdCQUFBLGFBQUErRyxLQUFBLDJCQUVJLEtBQUs7TUFBQSxJQUFBL0csZ0JBQUEsYUFBQStHLEtBQUEsV0FpQjdCO1FBQ047UUFDQUUsc0JBQXNCLEVBQUU7TUFDMUIsQ0FBQztNQUFBLElBQUFqSCxnQkFBQSxhQUFBK0csS0FBQSxXQXFCWSxJQUFJO01BQUEsSUFBQS9HLGdCQUFBLGFBQUErRyxLQUFBLFVBQ1EsSUFBSTtNQUFBLElBQUEvRyxnQkFBQSxhQUFBK0csS0FBQSx1QkFDdEIsSUFBQUcsZ0JBQVMsRUFBaUIsQ0FBQztNQUFBLElBQUFsSCxnQkFBQSxhQUFBK0csS0FBQSwwQkFDYSxDQUFDLENBQUM7TUFBQSxJQUFBL0csZ0JBQUEsYUFBQStHLEtBQUEsb0JBRWhDO1FBQ2Y7TUFBQSxDQUNEO01BQUEsSUFBQS9HLGdCQUFBLGFBQUErRyxLQUFBLG1CQUVlLFVBQUFJLFVBQVUsRUFBSTtRQUM1QixJQUFBQyxXQUFBLEdBQXlCTCxLQUFBLENBQUsxRCxLQUFLO1VBQTVCZ0UsT0FBTyxHQUFBRCxXQUFBLENBQVBDLE9BQU87VUFBRS9DLEtBQUssR0FBQThDLFdBQUEsQ0FBTDlDLEtBQUs7UUFDckIsSUFBSStDLE9BQU8sRUFBRTtVQUNYLElBQU9DLGVBQWUsR0FBSVAsS0FBQSxDQUFLMUQsS0FBSyxDQUE3QmlFLGVBQWU7VUFDdEIsSUFBSUgsVUFBVSxJQUFJQSxVQUFVLENBQUMvRixLQUFLLEdBQUcsQ0FBQyxJQUFJK0YsVUFBVSxDQUFDOUYsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvRGlHLGVBQWUsQ0FBQ0MsU0FBUyxDQUFDSixVQUFVLEVBQUU3QyxLQUFLLENBQUM7VUFDOUM7UUFDRjtNQUNGLENBQUM7TUFBQSxJQUFBdEUsZ0JBQUEsYUFBQStHLEtBQUEsb0JBRWtELFVBQUExRCxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDTSxRQUFRLENBQUM2RCxNQUFNO01BQUE7TUFBQSxJQUFBeEgsZ0JBQUEsYUFBQStHLEtBQUEsdUJBQzNCLFVBQUExRCxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDTSxRQUFRLENBQUM4RCxTQUFTO01BQUE7TUFBQSxJQUFBekgsZ0JBQUEsYUFBQStHLEtBQUEsc0JBQzFDLFVBQUExRCxLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDTSxRQUFRLENBQUNDLFNBQVM7TUFBQTtNQUFBLElBQUE1RCxnQkFBQSxhQUFBK0csS0FBQSwyQkFDcEIsVUFBQTFELEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNpQixLQUFLO01BQUE7TUFBQSxJQUFBdEUsZ0JBQUEsYUFBQStHLEtBQUEsdUJBQ1QsSUFBQVcsd0JBQWMsRUFDakZYLEtBQUEsQ0FBS1ksZ0JBQWdCLEVBQ3JCWixLQUFBLENBQUthLHFCQUFxQixFQUMxQkMsZ0NBQ0YsQ0FBQztNQUFBLElBQUE3SCxnQkFBQSxhQUFBK0csS0FBQSx3QkFDMEQsVUFBQTFELEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNNLFFBQVEsQ0FBQ21FLFVBQVU7TUFBQTtNQUFBLElBQUE5SCxnQkFBQSxhQUFBK0csS0FBQSw0QkFDdEMsSUFBQVcsd0JBQWMsRUFDbkVYLEtBQUEsQ0FBS2dCLGNBQWMsRUFDbkJoQixLQUFBLENBQUtpQixpQkFBaUIsRUFDdEJqQixLQUFBLENBQUtrQixpQkFBaUIsRUFDdEJDLCtCQUNGLENBQUM7TUFBQSxJQUFBbEksZ0JBQUEsYUFBQStHLEtBQUEsMkJBQ3VCLElBQUFXLHdCQUFjLEVBQ3BDWCxLQUFBLENBQUtnQixjQUFjLEVBQ25CaEIsS0FBQSxDQUFLaUIsaUJBQWlCLEVBQ3RCRyw4QkFDRixDQUFDO01BQUEsSUFBQW5JLGdCQUFBLGFBQUErRyxLQUFBLHFCQUNpQixVQUFBMUQsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ00sUUFBUSxDQUFDeUUsT0FBTztNQUFBO01BQUEsSUFBQXBJLGdCQUFBLGFBQUErRyxLQUFBLDRCQUN4QixJQUFBVyx3QkFBYyxFQUFDWCxLQUFBLENBQUtzQixlQUFlLEVBQUUsVUFBQUQsT0FBTztRQUFBLE9BQ25FQSxPQUFPLENBQUM1SSxNQUFNLENBQUMsVUFBQThJLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNsRSxJQUFJLEtBQUttRSx1QkFBWSxDQUFDQyxPQUFPLElBQUlGLENBQUMsQ0FBQ0csT0FBTyxLQUFLLEtBQUs7UUFBQSxFQUFDO01BQUEsQ0FDN0UsQ0FBQztNQUFBLElBQUF6SSxnQkFBQSxhQUFBK0csS0FBQSxzQkFDa0IsVUFBQTFELEtBQUs7UUFBQSxPQUFJQSxLQUFLLENBQUNNLFFBQVEsQ0FBQytFLE1BQU0sQ0FBQ0MsUUFBUTtNQUFBO01BQUEsSUFBQTNJLGdCQUFBLGFBQUErRyxLQUFBLDZCQUNoQyxVQUFBMUQsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ00sUUFBUSxDQUFDK0UsTUFBTSxDQUFDRSxlQUFlO01BQUE7TUFBQSxJQUFBNUksZ0JBQUEsYUFBQStHLEtBQUEsK0JBQzVDLElBQUFXLHdCQUFjLEVBQ3hDWCxLQUFBLENBQUs4QixzQkFBc0IsRUFDM0I5QixLQUFBLENBQUsrQixnQkFBZ0IsRUFDckIsVUFBQ0MsY0FBYyxFQUFFSixRQUFRO1FBQUEsT0FBTTtVQUM3QnZFLElBQUksRUFBRSxtQkFBbUI7VUFDekJ1RSxRQUFRLEVBQUVBLFFBQVEsQ0FBQzFHLE1BQU0sQ0FBQzhHLGNBQWMsQ0FBQzlELEdBQUcsQ0FBQyxVQUFBcUQsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQ1UsS0FBSztVQUFBLEVBQUM7UUFDNUQsQ0FBQztNQUFBLENBQ0gsQ0FBQztNQUNEO01BQUEsSUFBQWhKLGdCQUFBLGFBQUErRyxLQUFBLGtDQUMrQixJQUFBVyx3QkFBYyxFQUMzQ1gsS0FBQSxDQUFLa0MseUJBQXlCLEVBQzlCbEMsS0FBQSxDQUFLbUMsdUJBQXVCLEVBQzVCLFVBQUNDLFVBQVUsRUFBRVAsZUFBZTtRQUFBLE9BQzFCTyxVQUFVLENBQUNSLFFBQVEsQ0FBQ1MsU0FBUyxDQUFDLFVBQUFkLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNwRSxFQUFFLE1BQUswRSxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRTFFLEVBQUU7UUFBQSxFQUFDO01BQUEsQ0FDcEUsQ0FBQztNQUFBLElBQUFsRSxnQkFBQSxhQUFBK0csS0FBQSx1Q0FDbUMsSUFBQVcsd0JBQWMsRUFDaEQsVUFBQ3NCLEtBQWE7UUFBQSxPQUFLQSxLQUFLO01BQUEsR0FDeEIsVUFBQUEsS0FBSyxFQUFJO1FBQ1AsT0FBT0EsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDO01BQ2pDLENBQ0YsQ0FBQztNQUFBLElBQUFoSixnQkFBQSxhQUFBK0csS0FBQSx1Q0FFbUMsVUFBQTFELEtBQUs7UUFBQSxJQUFBZ0cscUJBQUE7UUFBQSxRQUFBQSxxQkFBQSxHQUFJaEcsS0FBSyxDQUFDaUcsb0JBQW9CLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUlDLDRCQUFvQjtNQUFBO01BQUEsSUFBQXRKLGdCQUFBLGFBQUErRyxLQUFBLDBCQUV4RSxJQUFBVyx3QkFBYyxFQUNuQ1gsS0FBQSxDQUFLZ0IsY0FBYyxFQUNuQmhCLEtBQUEsQ0FBS2lCLGlCQUFpQixFQUN0QmpCLEtBQUEsQ0FBS3dDLGtCQUFrQixFQUN2QnhDLEtBQUEsQ0FBS3lDLHNCQUFzQixFQUMzQnpDLEtBQUEsQ0FBSzBDLGlDQUFpQyxFQUN0QyxVQUFDQyxLQUFLLEVBQUVqQyxTQUFTLEVBQUVLLFVBQVUsRUFBRTZCLGNBQWMsRUFBRUMseUJBQXlCO1FBQUEsT0FDdEVBLHlCQUF5QixDQUFDRixLQUFLLEVBQUVqQyxTQUFTLEVBQUVLLFVBQVUsRUFBRTZCLGNBQWMsQ0FBQztNQUFBLENBQzNFLENBQUM7TUFFRDtNQUNBO01BQUEsSUFBQTNKLGdCQUFBLGFBQUErRyxLQUFBLDBCQUN1QixVQUFBMUQsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ3dHLFFBQVEsQ0FBQ0MsU0FBUztNQUFBO01BQUEsSUFBQTlKLGdCQUFBLGFBQUErRyxLQUFBLHFDQUN0QixVQUFBMUQsS0FBSztRQUFBLE9BQUlBLEtBQUssQ0FBQ3dHLFFBQVEsQ0FBQ0UsZUFBZTtNQUFBO01BQUEsSUFBQS9KLGdCQUFBLGFBQUErRyxLQUFBLG1CQUN6RCxJQUFBVyx3QkFBYyxFQUM1QlgsS0FBQSxDQUFLaUQsb0JBQW9CLEVBQ3pCakQsS0FBQSxDQUFLa0QsK0JBQStCLEVBQ3BDLFVBQUNILFNBQVMsRUFBRUMsZUFBZTtRQUFBLE9BQUFuSyxhQUFBLENBQUFBLGFBQUEsS0FDdEJvQixTQUFTLENBQUNDLFNBQVMsR0FDbEI2SSxTQUFTLEtBQUtJLG9CQUFTLEdBQUc7VUFBQ0gsZUFBZSxFQUFFLElBQUFJLGVBQVEsRUFBQ0osZUFBZTtRQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFBQSxDQUVuRixDQUFDO01BRUQ7TUFBQSxJQUFBL0osZ0JBQUEsYUFBQStHLEtBQUEsd0JBQ3FCLFlBQU07UUFDekJBLEtBQUEsQ0FBSzFELEtBQUssQ0FBQytHLGVBQWUsQ0FBQ0MsWUFBWSxDQUFDLElBQUksQ0FBQztNQUMvQyxDQUFDO01BQUEsSUFBQXJLLGdCQUFBLGFBQUErRyxLQUFBLG1CQUVlLFVBQUN1RCxJQUFZLEVBQUVDLElBQTBCLEVBQUs7UUFDNUR4RCxLQUFBLENBQUsxRCxLQUFLLENBQUMrRyxlQUFlLENBQUNJLFlBQVksQ0FBQ0QsSUFBSSxFQUFFeEQsS0FBQSxDQUFLMUQsS0FBSyxDQUFDaUIsS0FBSyxDQUFDO01BQ2pFLENBQUM7TUFBQSxJQUFBdEUsZ0JBQUEsYUFBQStHLEtBQUEsdUJBRW1CLFVBQ2xCNUIsR0FBVyxFQUNYNkQsS0FBcUUsRUFDbEU7UUFDSGpDLEtBQUEsQ0FBSzFELEtBQUssQ0FBQytHLGVBQWUsQ0FBQ0ssaUJBQWlCLENBQUMxRCxLQUFBLENBQUsxRCxLQUFLLENBQUNNLFFBQVEsQ0FBQzZELE1BQU0sQ0FBQ3JDLEdBQUcsQ0FBQyxFQUFFO1VBQzVFdUYsV0FBVyxFQUFFMUIsS0FBSyxDQUFDMkIsTUFBTTtVQUN6QkMsY0FBYyxFQUFFNUIsS0FBSyxDQUFDNEI7UUFDeEIsQ0FBNkIsQ0FBQztNQUNoQyxDQUFDO01BQUEsSUFBQTVLLGdCQUFBLGFBQUErRyxLQUFBLGlDQUU2QixVQUFDNUIsR0FBRyxFQUFFMEYsS0FBSyxFQUFLO1FBQzVDOUQsS0FBQSxDQUFLMUQsS0FBSyxDQUFDK0csZUFBZSxDQUFDVSx3QkFBd0IsQ0FBQy9ELEtBQUEsQ0FBSzFELEtBQUssQ0FBQ00sUUFBUSxDQUFDNkQsTUFBTSxDQUFDckMsR0FBRyxDQUFDLEVBQUUwRixLQUFLLENBQUM7TUFDN0YsQ0FBQztNQUFBLElBQUE3SyxnQkFBQSxhQUFBK0csS0FBQSx1QkFFbUIsVUFDbEI1QixHQUFXLEVBQ1hoQixJQUdDLEVBQ0U7UUFDSDRDLEtBQUEsQ0FBSzFELEtBQUssQ0FBQytHLGVBQWUsQ0FBQ1csY0FBYyxDQUN2Q2hFLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ00sUUFBUSxDQUFDNkQsTUFBTSxDQUFDckMsR0FBRyxDQUFDLEVBQy9CaEIsSUFBSSxDQUFDNkcsV0FBVyxFQUNoQjdHLElBQUksQ0FBQzhHLFVBQ1AsQ0FBQztNQUNILENBQUM7TUFBQSxJQUFBakwsZ0JBQUEsYUFBQStHLEtBQUEsMkJBRXVCLFVBQUFtRSxPQUFPLEVBQUk7UUFDakMsSUFBQUMsWUFBQSxHQUErQ3BFLEtBQUEsQ0FBSzFELEtBQUs7VUFBQStILGtCQUFBLEdBQUFELFlBQUEsQ0FBbEQ3RyxLQUFLO1VBQUUrRyxRQUFRLEdBQUFELGtCQUFBLGNBQUcsQ0FBQyxHQUFBQSxrQkFBQTtVQUFFaEIsZUFBZSxHQUFBZSxZQUFBLENBQWZmLGVBQWU7UUFDM0NBLGVBQWUsQ0FBQ2tCLGlCQUFpQixDQUFDRCxRQUFRLEVBQUVILE9BQU8sQ0FBQztNQUN0RCxDQUFDO01BQUEsSUFBQWxMLGdCQUFBLGFBQUErRyxLQUFBLDBCQUVzQixVQUFBd0UsTUFBTSxFQUFJO1FBQy9CO1FBQ0F4RSxLQUFBLENBQUt5RSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCekUsS0FBQSxDQUFLMEUsbUJBQW1CLENBQUMsQ0FBQztRQUUxQixJQUFJRixNQUFNLElBQUlBLE1BQU0sQ0FBQzdJLEtBQUssRUFBRTtVQUMxQjtVQUNBcUUsS0FBQSxDQUFLMkUsUUFBUSxDQUFDO1lBQ1p6RSxzQkFBc0IsRUFDcEIsSUFBQTBFLDhCQUF1QixFQUFDSixNQUFNLENBQUM3SSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUFrSixxQ0FBOEIsRUFBQ0wsTUFBTSxDQUFDN0ksS0FBSztVQUN6RixDQUFDLENBQUM7UUFDSjtRQUVBLElBQUksT0FBT3FFLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ3dJLGdCQUFnQixLQUFLLFVBQVUsRUFBRTtVQUNyRDlFLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ3dJLGdCQUFnQixDQUFDOUUsS0FBQSxDQUFLK0UsSUFBSSxDQUFDO1FBQ3hDO01BQ0YsQ0FBQztNQUFBLElBQUE5TCxnQkFBQSxhQUFBK0csS0FBQSxnQkFFWSxVQUFBZ0YsTUFBTSxFQUFJO1FBQ3JCO1FBQ0EsSUFBSWhGLEtBQUEsQ0FBSytFLElBQUksSUFBSUMsTUFBTSxFQUFFO1VBQ3ZCLElBQU05RyxHQUFHLEdBQUc4RyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDO1VBQzNCLElBQUkvRyxHQUFHLElBQUk4QixLQUFBLENBQUsrRSxJQUFJLEtBQUs3RyxHQUFHLEVBQUU7WUFBQSxJQUFBZ0gsVUFBQSxFQUFBQyxXQUFBO1lBQzVCLENBQUFELFVBQUEsR0FBQWxGLEtBQUEsQ0FBSytFLElBQUksY0FBQUcsVUFBQSxlQUFUQSxVQUFBLENBQVdFLEdBQUcsQ0FBQ2pLLHFCQUFxQixFQUFFRSxHQUFHLENBQUM7WUFDMUMsQ0FBQThKLFdBQUEsR0FBQW5GLEtBQUEsQ0FBSytFLElBQUksY0FBQUksV0FBQSxlQUFUQSxXQUFBLENBQVdDLEdBQUcsQ0FBQ2hLLGVBQWUsRUFBRUMsR0FBRyxDQUFDO1lBQ3BDMkUsS0FBQSxDQUFLK0UsSUFBSSxHQUFHLElBQUk7VUFDbEI7UUFDRjtRQUVBLElBQUksQ0FBQy9FLEtBQUEsQ0FBSytFLElBQUksSUFBSUMsTUFBTSxFQUFFO1VBQ3hCaEYsS0FBQSxDQUFLK0UsSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDO1VBQzNCO1VBQ0EsSUFBSSxDQUFDakYsS0FBQSxDQUFLK0UsSUFBSSxFQUFFO1lBQ2Q7VUFDRjtVQUNBO1VBQ0EvRSxLQUFBLENBQUsrRSxJQUFJLENBQUNNLEVBQUUsQ0FBQ2xLLHFCQUFxQixFQUFFNkUsS0FBQSxDQUFLc0Ysb0JBQW9CLENBQUM7VUFFOUR0RixLQUFBLENBQUsrRSxJQUFJLENBQUNNLEVBQUUsQ0FBQ2pLLGVBQWUsRUFBRSxZQUFNO1lBQ2xDLElBQUksT0FBTzRFLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ2lKLFdBQVcsS0FBSyxVQUFVLEVBQUU7Y0FDaER2RixLQUFBLENBQUsxRCxLQUFLLENBQUNpSixXQUFXLENBQUN2RixLQUFBLENBQUsrRSxJQUFJLENBQUM7WUFDbkM7VUFDRixDQUFDLENBQUM7UUFDSjtRQUVBLElBQUkvRSxLQUFBLENBQUsxRCxLQUFLLENBQUNrSixZQUFZLEVBQUU7VUFDM0I7VUFDQTtVQUNBO1VBQ0F4RixLQUFBLENBQUsxRCxLQUFLLENBQUNrSixZQUFZLENBQUNSLE1BQU0sRUFBRWhGLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ2lCLEtBQUssQ0FBQztRQUNuRDtNQUNGLENBQUM7TUFBQSxJQUFBdEUsZ0JBQUEsYUFBQStHLEtBQUEscUJBa0JpQixVQUFBeUYsS0FBQSxFQUFVO1FBQUEsSUFBUkMsRUFBRSxHQUFBRCxLQUFBLENBQUZDLEVBQUU7UUFDcEIsSUFBQUMsdUJBQWdCLEVBQUNELEVBQUUsRUFBRTFGLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ00sUUFBUSxDQUFDZ0osYUFBYSxDQUFDO01BQ3pELENBQUM7TUFBQSxJQUFBM00sZ0JBQUEsYUFBQStHLEtBQUEsa0JBRWMsVUFBQzZGLEtBQUssRUFBRWxELEtBQUssRUFBSztRQUMvQixJQUFNbUQsWUFBWSxHQUFHLENBQUFELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxPQUFPLEtBQUksZUFBZTtRQUN0RCxJQUFNQyxZQUFZLEdBQUdyRCxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFeEYsRUFBRSxVQUFBakMsTUFBQSxDQUFVeUgsS0FBSyxDQUFDeEYsRUFBRSxjQUFXLEVBQUU7UUFDN0QsSUFBTThJLGdCQUFnQixHQUNwQkgsWUFBWSxLQUFLLHVCQUF1QixHQUNwQyx1S0FBdUssMkJBQUE1SyxNQUFBLENBQy9JNEssWUFBWSxFQUFBNUssTUFBQSxDQUFHOEssWUFBWSxNQUFHOztRQUU1RDtRQUNBLElBQU1FLFNBQVMsR0FBR2xHLEtBQUEsQ0FBS21HLG9CQUFvQixDQUFDRixnQkFBZ0IsQ0FBQztRQUM3RCxJQUFJLENBQUNDLFNBQVMsSUFBSUEsU0FBUyxHQUFHRSxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUdDLHFDQUEwQixFQUFFO1VBQ3JFdEcsS0FBQSxDQUFLbUcsb0JBQW9CLENBQUNGLGdCQUFnQixDQUFDLEdBQUdHLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7O1VBRXhEO1VBQ0EsSUFBSUUsaUJBQWlCLEdBQUcsRUFBRTtVQUMxQixJQUFPbEQsZUFBZSxHQUFJckQsS0FBQSxDQUFLMUQsS0FBSyxDQUE3QitHLGVBQWU7VUFDdEIsSUFBSVYsS0FBSyxFQUFFO1lBQUEsSUFBQTZELG1CQUFBO1lBQ1QsSUFBSUMsWUFBWSxHQUFHOUQsS0FBSztZQUN4QixPQUFPOEQsWUFBWSxDQUFDQyxNQUFNLEVBQUU7Y0FDMUJELFlBQVksR0FBR0EsWUFBWSxDQUFDQyxNQUFNO1lBQ3BDO1lBQ0EsS0FBQUYsbUJBQUEsR0FBSUMsWUFBWSxDQUFDbkssS0FBSyxjQUFBa0ssbUJBQUEsZUFBbEJBLG1CQUFBLENBQW9CckosRUFBRSxFQUFFO2NBQzFCa0csZUFBZSxDQUFDc0QsZUFBZSxDQUFDRixZQUFZLEVBQUUsS0FBSyxDQUFDO2NBQ3BERixpQkFBaUIsR0FBRyw4Q0FBOEM7WUFDcEU7VUFDRjs7VUFFQTtVQUNBO1VBQ0EsSUFBT0ssY0FBYyxHQUFJNUcsS0FBQSxDQUFLMUQsS0FBSyxDQUE1QnNLLGNBQWM7VUFDckJBLGNBQWMsQ0FBQ0MsZUFBZSxDQUM1QixJQUFBQyx3QkFBaUIsRUFBQztZQUNoQmYsT0FBTyxLQUFBN0ssTUFBQSxDQUFLK0ssZ0JBQWdCLE9BQUEvSyxNQUFBLENBQUlxTCxpQkFBaUIsQ0FBRTtZQUNuRHBKLEVBQUUsRUFBRThJLGdCQUFnQixDQUFDO1VBQ3ZCLENBQUMsQ0FDSCxDQUFDO1FBQ0g7TUFDRixDQUFDO01BQUEsSUFBQWhOLGdCQUFBLGFBQUErRyxLQUFBLHlDQXNWcUMsSUFBQStHLG9CQUFRLEVBQUMsWUFBTTtRQUFBLElBQUFDLGFBQUE7UUFDbkQsSUFBTUMsU0FBUyxJQUFBRCxhQUFBLEdBQUdoSCxLQUFBLENBQUtrSCxPQUFPLGNBQUFGLGFBQUEsdUJBQVpBLGFBQUEsQ0FBY0csb0JBQW9CLENBQUNuSCxLQUFBLENBQUsxRCxLQUFLLENBQUNpQixLQUFLLENBQUM7UUFDdEUsSUFBQTZKLHVCQUFnQixFQUNkSCxTQUFTLEVBQ1RqSCxLQUFBLENBQUsxRCxLQUFLLENBQUNpRSxlQUFlLENBQUNDLFNBQVMsRUFDcENSLEtBQUEsQ0FBSzFELEtBQUssQ0FBQytLLGlCQUFpQixFQUM1QnJILEtBQUEsQ0FBSzFELEtBQUssQ0FBQ2dFLE9BQU8sRUFDbEJOLEtBQUEsQ0FBSzFELEtBQUssQ0FBQ2lCLEtBQ2IsQ0FBQztNQUNILENBQUMsRUFBRXpELDJCQUEyQixDQUFDO01BQUEsSUFBQWIsZ0JBQUEsYUFBQStHLEtBQUEsdUJBRVgsVUFBQXNILFFBQVEsRUFBSTtRQUM5QixJQUFPTCxTQUFTLEdBQUlLLFFBQVEsQ0FBckJMLFNBQVM7UUFDaEIsSUFBSWpILEtBQUEsQ0FBSzFELEtBQUssQ0FBQ2lMLFFBQVEsRUFBRTtVQUN2QjtVQUNBO1VBQ0E7UUFDRjtRQUNBLElBQU9DLG9CQUFvQixHQUFJeEgsS0FBQSxDQUFLa0gsT0FBTyxDQUFwQ00sb0JBQW9CO1FBQzNCQSxvQkFBb0IsQ0FBQ1AsU0FBUyxFQUFFakgsS0FBQSxDQUFLMUQsS0FBSyxDQUFDaUIsS0FBSyxDQUFDO1FBQ2pEeUMsS0FBQSxDQUFLeUgsbUNBQW1DLENBQUMsQ0FBQztNQUM1QyxDQUFDO01BQUEsSUFBQXhPLGdCQUFBLGFBQUErRyxLQUFBLDRCQUV3QixJQUFBK0csb0JBQVEsRUFBQyxVQUFDM0osSUFBSSxFQUFFRyxLQUFLLEVBQUs7UUFDakR5QyxLQUFBLENBQUsxRCxLQUFLLENBQUMrRyxlQUFlLENBQUNJLFlBQVksQ0FBQ3JHLElBQUksRUFBRUcsS0FBSyxDQUFDO01BQ3RELENBQUMsRUFBRXhELDZCQUE2QixDQUFDO01BQUEsSUFBQWQsZ0JBQUEsYUFBQStHLEtBQUEsMkJBRVQsSUFBQStHLG9CQUFRLEVBQUMsVUFBQ2pELEtBQUssRUFBRXdELFFBQVEsRUFBSztRQUNwRHRILEtBQUEsQ0FBSzFELEtBQUssQ0FBQytHLGVBQWUsQ0FBQ3FFLFdBQVcsQ0FBQyxJQUFBQyxxQkFBYyxFQUFDN0QsS0FBSyxFQUFFd0QsUUFBUSxDQUFDLENBQUM7TUFDekUsQ0FBQyxFQUFFdk4sNkJBQTZCLENBQUM7TUFBQSxJQUFBZCxnQkFBQSxhQUFBK0csS0FBQSxnQ0FFSixJQUFBK0csb0JBQVEsRUFBQyxZQUFNO1FBQzFDO1FBQ0EvRyxLQUFBLENBQUsxRCxLQUFLLENBQUMrRyxlQUFlLENBQUN1RSxtQkFBbUIsQ0FBQztVQUFDQyxNQUFNLEVBQUU7UUFBQyxDQUFDLENBQUM7TUFDN0QsQ0FBQyxFQUFFN04sZ0NBQWdDLENBQUM7TUFBQSxJQUFBZixnQkFBQSxhQUFBK0csS0FBQSx1QkFFaEIsVUFBQThILE9BQU8sRUFBSTtRQUM3QixJQUFBQyxZQUFBLEdBQWdDL0gsS0FBQSxDQUFLMUQsS0FBSztVQUFuQ2lCLEtBQUssR0FBQXdLLFlBQUEsQ0FBTHhLLEtBQUs7VUFBRXFKLGNBQWMsR0FBQW1CLFlBQUEsQ0FBZG5CLGNBQWM7UUFFNUJBLGNBQWMsQ0FBQ29CLGdCQUFnQixDQUFDRixPQUFPLEVBQUVHLE1BQU0sQ0FBQzFLLEtBQUssQ0FBQyxDQUFDO01BQ3pELENBQUM7TUFBQSxPQUFBeUMsS0FBQTtJQTdvQkQ7SUFBQyxJQUFBa0ksVUFBQSxhQUFBcEksWUFBQSxFQUFBQyxVQUFBO0lBQUEsV0FBQW9JLGFBQUEsYUFBQXJJLFlBQUE7TUFBQXZCLEdBQUE7TUFBQTBELEtBQUEsRUFPRCxTQUFBbUcsaUJBQWlCQSxDQUFBLEVBQUc7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQ3ROLElBQUksQ0FBQ3VOLE9BQU8sRUFBRTtVQUN0QjtRQUNGO1FBQ0EsSUFBQUMsd0JBQWlCLEVBQUMsSUFBSSxDQUFDeE4sSUFBSSxDQUFDdU4sT0FBTyxFQUFFLElBQUksQ0FBQ0UsYUFBYSxDQUFDO01BQzFEO0lBQUM7TUFBQWhLLEdBQUE7TUFBQTBELEtBQUEsRUFFRCxTQUFBdUcsb0JBQW9CQSxDQUFBLEVBQUc7UUFDckI7UUFDQSxJQUFJLElBQUksQ0FBQ3pELElBQUksRUFBRTtVQUFBLElBQUEwRCxXQUFBLEVBQUFDLFdBQUE7VUFDYixDQUFBRCxXQUFBLE9BQUksQ0FBQzFELElBQUksY0FBQTBELFdBQUEsZUFBVEEsV0FBQSxDQUFXckQsR0FBRyxDQUFDaksscUJBQXFCLEVBQUVFLEdBQUcsQ0FBQztVQUMxQyxDQUFBcU4sV0FBQSxPQUFJLENBQUMzRCxJQUFJLGNBQUEyRCxXQUFBLGVBQVRBLFdBQUEsQ0FBV3RELEdBQUcsQ0FBQ2hLLGVBQWUsRUFBRUMsR0FBRyxDQUFDO1FBQ3RDO1FBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQ1AsSUFBSSxDQUFDdU4sT0FBTyxFQUFFO1VBQ3RCO1FBQ0Y7UUFDQSxJQUFBTSwwQkFBbUIsRUFBQyxJQUFJLENBQUM3TixJQUFJLENBQUN1TixPQUFPLENBQUM7TUFDeEM7SUFBQztNQUFBOUosR0FBQTtNQUFBMEQsS0FBQSxFQThMRCxTQUFBMkcsa0JBQWtCQSxDQUFDbEQsRUFBRSxFQUFFO1FBQ3JCLElBQUksSUFBSSxDQUFDcEosS0FBSyxDQUFDdU0saUJBQWlCLEVBQUU7VUFDaEMsSUFBSSxDQUFDdk0sS0FBSyxDQUFDdU0saUJBQWlCLENBQUMsSUFBSSxDQUFDQyxLQUFLLEVBQUVwRCxFQUFFLENBQUM7UUFDOUM7TUFDRjs7TUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMSTtNQUFBbkgsR0FBQTtNQUFBMEQsS0FBQSxFQU1BLFNBQUE4RyxvQkFBb0JBLENBQUNDLFNBQWtCLEVBQVc7UUFBQSxJQUFBQyxXQUFBO1FBQ2hELE9BQU8sQ0FBQ0QsU0FBUyxJQUFJclAsT0FBTyxFQUFBc1AsV0FBQSxHQUFDLElBQUksQ0FBQ0gsS0FBSyxjQUFBRyxXQUFBLGdCQUFBQSxXQUFBLEdBQVZBLFdBQUEsQ0FBWUMsV0FBVyxjQUFBRCxXQUFBLGdCQUFBQSxXQUFBLEdBQXZCQSxXQUFBLENBQXlCRSxVQUFVLGNBQUFGLFdBQUEsdUJBQW5DQSxXQUFBLENBQXFDbFEsTUFBTSxDQUFDO01BQzNFO0lBQUM7TUFBQXdGLEdBQUE7TUFBQTBELEtBQUEsRUE2Q0Q7O01BRUE7TUFDQSxTQUFBbUgsaUJBQWlCQSxDQUFBLEVBQUc7UUFBQSxJQUFBQyxxQkFBQTtRQUNsQjtRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUMvTSxLQUFLLENBQUNpQixLQUFLLE9BQUE4TCxxQkFBQSxHQUFLLElBQUksQ0FBQy9NLEtBQUssQ0FBQ00sUUFBUSxDQUFDME0sU0FBUyxjQUFBRCxxQkFBQSx1QkFBN0JBLHFCQUFBLENBQStCL0UsUUFBUSxHQUFFO1VBQ2hFLE9BQU8sSUFBSTtRQUNiOztRQUVBO1FBQ0EsSUFBQWlGLFlBQUEsR0FXSSxJQUFJLENBQUNqTixLQUFLO1VBVlprTixRQUFRLEdBQUFELFlBQUEsQ0FBUkMsUUFBUTtVQUFBQyxxQkFBQSxHQUFBRixZQUFBLENBQ1IzTSxRQUFRO1VBQ04wTSxTQUFTLEdBQUFHLHFCQUFBLENBQVRILFNBQVM7VUFDVEksT0FBTyxHQUFBRCxxQkFBQSxDQUFQQyxPQUFPO1VBQ1BDLFFBQVEsR0FBQUYscUJBQUEsQ0FBUkUsUUFBUTtVQUNSQyxpQkFBaUIsR0FBQUgscUJBQUEsQ0FBakJHLGlCQUFpQjtVQUNqQkMsZUFBZSxHQUFBSixxQkFBQSxDQUFmSSxlQUFlO1VBQ2ZwSixNQUFNLEdBQUFnSixxQkFBQSxDQUFOaEosTUFBTTtVQUFBcUosc0JBQUEsR0FBQUwscUJBQUEsQ0FDTk0sUUFBUTtVQUFHQyxhQUFhLEdBQUFGLHNCQUFBLENBQWJFLGFBQWE7VUFBRTlGLFVBQVUsR0FBQTRGLHNCQUFBLENBQVY1RixVQUFVO1VBQUUrRixNQUFNLEdBQUFILHNCQUFBLENBQU5HLE1BQU07UUFHaEQsSUFBTXJILGNBQWMsR0FBRyxJQUFJLENBQUNILHNCQUFzQixDQUFDLElBQUksQ0FBQ25HLEtBQUssQ0FBQztRQUU5RCxJQUFJLENBQUMwTixhQUFhLElBQUksQ0FBQ0osaUJBQWlCLENBQUNNLE9BQU8sRUFBRTtVQUNoRCxPQUFPLElBQUk7UUFDYjtRQUVBLElBQU1DLGNBQWMsR0FBRyxJQUFBQywyQkFBaUIsRUFBQztVQUN2Q1AsZUFBZSxFQUFmQSxlQUFlO1VBQ2ZELGlCQUFpQixFQUFqQkEsaUJBQWlCO1VBQ2pCTixTQUFTLEVBQVRBLFNBQVM7VUFDVDdJLE1BQU0sRUFBTkEsTUFBTTtVQUNObUMsY0FBYyxFQUFkQSxjQUFjO1VBQ2QrRyxRQUFRLEVBQVJBO1FBQ0YsQ0FBQyxDQUFDO1FBRUYsSUFBTVUsV0FBVyxHQUFHVCxpQkFBaUIsQ0FBQ00sT0FBTyxDQUFDSSxNQUFNLEdBQ2hEVixpQkFBaUIsQ0FBQ00sT0FBTyxDQUFDSSxNQUFNLENBQUNELFdBQVcsR0FDNUMsS0FBSztRQUVULElBQUlFLGNBQWMsR0FBRztVQUFDQyxDQUFDLEVBQUUsQ0FBQztVQUFFQyxDQUFDLEVBQUU7UUFBQyxDQUFDO1FBQ2pDLElBQUlDLGVBQXNDLEdBQUcsSUFBSTtRQUNqRCxJQUFJVCxNQUFNLElBQUlQLE9BQU8sRUFBRTtVQUNyQjtVQUNBLElBQU1wQyxRQUFRLEdBQUcsSUFBQXFELDhCQUF1QixFQUFDbkIsUUFBUSxDQUFDO1VBQ2xELElBQU1vQixNQUFNLEdBQUdsQixPQUFPLEdBQUdBLE9BQU8sQ0FBQ3hGLFVBQVUsR0FBRytGLE1BQU0sQ0FBQy9GLFVBQVU7VUFDL0RxRyxjQUFjLEdBQUcsSUFBSSxDQUFDTSxXQUFXLENBQUN2RCxRQUFRLEVBQUVzRCxNQUFNLENBQUM7VUFDbkRGLGVBQWUsR0FBRyxJQUFBTiwyQkFBaUIsRUFBQztZQUNsQ1AsZUFBZSxFQUFmQSxlQUFlO1lBQ2ZELGlCQUFpQixFQUFqQkEsaUJBQWlCO1lBQ2pCTixTQUFTLEVBQUVJLE9BQU87WUFDbEJqSixNQUFNLEVBQU5BLE1BQU07WUFDTm1DLGNBQWMsRUFBZEEsY0FBYztZQUNkK0csUUFBUSxFQUFSQTtVQUNGLENBQUMsQ0FBQztVQUNGLElBQUlRLGNBQWMsSUFBSU8sZUFBZSxFQUFFO1lBQ3JDUCxjQUFjLENBQUNXLFdBQVcsR0FBR0osZUFBZSxDQUFDdE4sSUFBSTtZQUNqRCtNLGNBQWMsQ0FBQ1ksV0FBVyxHQUFHbkIsaUJBQWlCLENBQUNNLE9BQU8sQ0FBQ0ksTUFBTSxDQUFDUyxXQUFXO1VBQzNFO1FBQ0Y7UUFFQSxJQUFNQyxVQUFVLEdBQUc7VUFDakJDLE9BQU8sRUFBRSxJQUFJLENBQUNDLGtCQUFrQjtVQUNoQ0MsSUFBSSxFQUFFM0IsUUFBUSxDQUFDMkIsSUFBSTtVQUNuQmpSLFNBQVMsRUFBRSxJQUFJLENBQUM0TyxLQUFLLEdBQUcsSUFBSSxDQUFDQSxLQUFLLENBQUNzQyxNQUFNLEdBQUdDO1FBQzlDLENBQUM7UUFFRCxvQkFDRS9WLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQy9FLGNBQUEsV0FBYSxRQUNYZ1UsZUFBZSxpQkFDZHBWLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ2tFLFVBQVUsTUFBQXRCLFNBQUEsaUJBQ0xrTSxjQUFjLEVBQ2RTLFVBQVU7VUFDZGIsY0FBYyxFQUFFTyxlQUFnQjtVQUNoQ3hHLFVBQVUsRUFBRTBGLGlCQUFpQixDQUFDMUYsVUFBVSxDQUFDeEMsT0FBTyxJQUFJLENBQUN1SSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUvRixVQUFXO1VBQzlFb0gsTUFBTSxFQUFFLElBQUs7VUFDYkMsTUFBTSxFQUFFbEIsV0FBWTtVQUNwQm1CLGFBQWEsRUFBRSxJQUFJLENBQUNsUCxLQUFLLENBQUMrRyxlQUFlLENBQUNvSSxXQUFZO1VBQ3REQyxrQkFBa0IsRUFBRSxJQUFJLENBQUNwUCxLQUFLLENBQUMrRyxlQUFlLENBQUNxSTtVQUMvQztVQUFBO1VBQ0FDLGlCQUFpQixFQUFFLElBQUksQ0FBQ3pKLHlCQUF5QixDQUFDLElBQUksQ0FBQzVGLEtBQUs7UUFBRSxFQUMvRCxDQUNGLEVBQ0E2TixjQUFjLEtBQUssQ0FBQ08sZUFBZSxJQUFJTCxXQUFXLENBQUMsaUJBQ2xEL1UsTUFBQSxZQUFBbUcsYUFBQSxDQUFDa0UsVUFBVSxNQUFBdEIsU0FBQTtVQUNUbU0sQ0FBQyxFQUFFUixhQUFhLENBQUMsQ0FBQyxDQUFFO1VBQ3BCUyxDQUFDLEVBQUVULGFBQWEsQ0FBQyxDQUFDO1FBQUUsR0FDaEJnQixVQUFVO1VBQ2RiLGNBQWMsRUFBRUEsY0FBZTtVQUMvQm1CLE1BQU0sRUFBRSxLQUFNO1VBQ2RwSCxVQUFVLEVBQUUwRixpQkFBaUIsQ0FBQzFGLFVBQVUsQ0FBQ3hDLE9BQU8sSUFBSXdDLFVBQVc7VUFDL0RzSCxhQUFhLEVBQUUsSUFBSSxDQUFDbFAsS0FBSyxDQUFDK0csZUFBZSxDQUFDb0ksV0FBWTtVQUN0REMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDcFAsS0FBSyxDQUFDK0csZUFBZSxDQUFDcUk7VUFDL0M7VUFBQTtVQUNBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUN6Six5QkFBeUIsQ0FBQyxJQUFJLENBQUM1RixLQUFLO1FBQUUsRUFDL0QsQ0FFVSxDQUFDO01BRXBCOztNQUVBO0lBQUE7TUFBQWlDLEdBQUE7TUFBQTBELEtBQUEsRUFFQSxTQUFBNEksV0FBV0EsQ0FBQ3ZELFFBQVEsRUFBRXNELE1BQU0sRUFBRTtRQUM1QixJQUFNZ0IsV0FBVyxHQUFHLENBQUN0RSxRQUFRLElBQUksQ0FBQ3NELE1BQU0sR0FBRyxJQUFJLEdBQUd0RCxRQUFRLENBQUN1RSxPQUFPLENBQUNqQixNQUFNLENBQUM7UUFDMUUsT0FBT2dCLFdBQVcsSUFBSTtVQUFDcEIsQ0FBQyxFQUFFb0IsV0FBVyxDQUFDLENBQUMsQ0FBQztVQUFFbkIsQ0FBQyxFQUFFbUIsV0FBVyxDQUFDLENBQUM7UUFBQyxDQUFDO01BQzlEO0lBQUM7TUFBQXJOLEdBQUE7TUFBQTBELEtBQUEsRUFFRCxTQUFBNkosa0JBQWtCQSxDQUNoQkMsYUFBYSxFQUliO1FBQUEsSUFBQUMsY0FBQTtVQUFBQyxNQUFBO1FBQUEsSUFIQUMsT0FBbUYsR0FBQXBULFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF1UyxTQUFBLEdBQUF2UyxTQUFBLE1BQUc7VUFDcEZxVCxVQUFVLEVBQUU7UUFDZCxDQUFDO1FBRUQsSUFBQUMsWUFBQSxHQWNJLElBQUksQ0FBQzlQLEtBQUs7VUFiWndHLFFBQVEsR0FBQXNKLFlBQUEsQ0FBUnRKLFFBQVE7VUFDUmxHLFFBQVEsR0FBQXdQLFlBQUEsQ0FBUnhQLFFBQVE7VUFDUjRNLFFBQVEsR0FBQTRDLFlBQUEsQ0FBUjVDLFFBQVE7VUFDUm5HLGVBQWUsR0FBQStJLFlBQUEsQ0FBZi9JLGVBQWU7VUFDZmdKLG9CQUFvQixHQUFBRCxZQUFBLENBQXBCQyxvQkFBb0I7VUFDcEJDLFlBQVksR0FBQUYsWUFBQSxDQUFaRSxZQUFZO1VBQ1pDLFdBQVcsR0FBQUgsWUFBQSxDQUFYRyxXQUFXO1VBQ1hoUCxLQUFLLEdBQUE2TyxZQUFBLENBQUw3TyxLQUFLO1VBQ0xpUCxXQUFXLEdBQUFKLFlBQUEsQ0FBWEksV0FBVztVQUNYQyxtQkFBbUIsR0FBQUwsWUFBQSxDQUFuQkssbUJBQW1CO1VBQ25CalEsS0FBSyxHQUFBNFAsWUFBQSxDQUFMNVAsS0FBSztVQUNMa1Esb0JBQW9CLEdBQUFOLFlBQUEsQ0FBcEJNLG9CQUFvQjtVQUNwQmhGLFdBQVcsR0FBQTBFLFlBQUEsQ0FBWDFFLFdBQVc7UUFHYixJQUFPNEIsU0FBUyxHQUFZMU0sUUFBUSxDQUE3QjBNLFNBQVM7VUFBRTNILE1BQU0sR0FBSS9FLFFBQVEsQ0FBbEIrRSxNQUFNO1FBQ3hCLElBQU93SyxVQUFVLEdBQTZCRCxPQUFPLENBQTlDQyxVQUFVO1VBQUVRLGFBQWEsR0FBY1QsT0FBTyxDQUFsQ1MsYUFBYTtVQUFFQyxRQUFRLEdBQUlWLE9BQU8sQ0FBbkJVLFFBQVE7O1FBRTFDO1FBQ0EsSUFBT0MsT0FBTyxHQUFJTCxXQUFXLENBQXRCSyxPQUFPO1FBQ2QsSUFBQUMsS0FBQSxHQUEyQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQztVQUFBRSxZQUFBLEdBQUFELEtBQUEsQ0FBakRFLE1BQU07VUFBRUMsZ0JBQWdCLEdBQUFGLFlBQUEsY0FBRyxLQUFLLEdBQUFBLFlBQUE7UUFDdkMsSUFBTUcsbUJBQW1CLEdBQUdDLHdCQUFnQixDQUFDQyxlQUFlLENBQUNILGdCQUFnQixFQUFFdEwsTUFBTSxDQUFDMEwsSUFBSSxDQUFDO1FBRTNGLElBQU1DLGlCQUFpQixJQUFBdEIsY0FBQSxHQUFHLElBQUksQ0FBQzlFLE9BQU8sY0FBQThFLGNBQUEsdUJBQVpBLGNBQUEsQ0FBYzdFLG9CQUFvQixDQUFDNUosS0FBSyxDQUFDO1FBQ25FLElBQU1nUSxnQkFBZ0IsR0FBQTFVLGFBQUEsQ0FBQUEsYUFBQSxLQUFPMlEsUUFBUSxHQUFLOEQsaUJBQWlCLENBQUM7UUFDNUQsSUFBTWhHLFFBQVEsR0FBRyxJQUFBcUQsOEJBQXVCLEVBQUM0QyxnQkFBZ0IsQ0FBQztRQUUxRCxJQUFNQywwQkFBMEIsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDLElBQUksQ0FBQ25SLEtBQUssQ0FBQztRQUVoRixJQUFPbVAsV0FBVyxHQUFzQ3BJLGVBQWUsQ0FBaEVvSSxXQUFXO1VBQUVuSSxZQUFZLEdBQXdCRCxlQUFlLENBQW5EQyxZQUFZO1VBQUVvSSxrQkFBa0IsR0FBSXJJLGVBQWUsQ0FBckNxSSxrQkFBa0I7UUFFcEQsSUFBTWdDLDBCQUEwQixHQUFHaEIsb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJaUIsMkJBQWlCO1FBQzVFLElBQU1DLFlBQVksR0FBR0YsMEJBQTBCLENBQzdDO1VBQ0U5USxRQUFRLEVBQVJBLFFBQVE7VUFDUjRNLFFBQVEsRUFBRStELGdCQUFnQjtVQUMxQnpLLFFBQVEsRUFBUkE7UUFDRixDQUFDLEVBQ0Q7VUFDRXdCLFFBQVEsRUFBRS9HLEtBQUs7VUFDZjRPLFVBQVUsRUFBVkEsVUFBVTtVQUNWRSxvQkFBb0IsRUFBcEJBLG9CQUFvQjtVQUNwQkMsWUFBWSxFQUFaQSxZQUFZO1VBQ1pQLGFBQWEsRUFBYkEsYUFBYTtVQUNiOEIsVUFBVSxFQUFFMUIsVUFBVSxHQUNsQjtZQUNFeEssTUFBTSxFQUFOQSxNQUFNO1lBQ05zTCxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtZQUNoQnpCLGFBQWEsRUFBRUMsV0FBVztZQUMxQkMsa0JBQWtCLEVBQWxCQSxrQkFBa0I7WUFDbEI7WUFDQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDekoseUJBQXlCLENBQUMsSUFBSSxDQUFDNUYsS0FBSyxDQUFDO1lBQzdEd1Isc0JBQXNCLEVBQUUsSUFBSSxDQUFDQyxpQ0FBaUM7WUFDNUQ7WUFDQVAsMEJBQ0YsQ0FBQztZQUNEbEcsUUFBUSxFQUFSQTtVQUNGLENBQUMsR0FDRCtEO1FBQ04sQ0FBQyxFQUNEO1VBQ0U1SCxZQUFZLEVBQUUsSUFBSSxDQUFDdUssYUFBYTtVQUNoQ0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDQyxpQkFBaUI7VUFDeENDLHFCQUFxQixFQUFFLElBQUksQ0FBQ0MsMkJBQTJCO1VBQ3ZEQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNDO1FBQ3pCLENBQUMsRUFDRC9CLFdBQ0YsQ0FBQztRQUVELElBQU1nQyxlQUdMLEdBQUcsQ0FBQyxDQUFDO1FBQ04sSUFBSXBDLFVBQVUsRUFBRTtVQUNkb0MsZUFBZSxDQUFDQyxVQUFVLEdBQUcsVUFBQWhMLElBQUk7WUFBQSxPQUMvQjJKLHdCQUFnQixDQUFDcUIsVUFBVSxDQUFDaEwsSUFBSSxFQUFFO2NBQ2hDeUosZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7Y0FDaEJ0TCxNQUFNLEVBQU5BLE1BQU07Y0FDTm5GLEtBQUssRUFBTEE7WUFDRixDQUFDLENBQUM7VUFBQTtVQUVKK1IsZUFBZSxDQUFDRSxTQUFTLEdBQUcsVUFBQUMsS0FBQSxFQUF5QztZQUFBLElBQXZDQyxVQUFVLEdBQUFELEtBQUEsQ0FBVkMsVUFBVTtZQUN0QyxJQUFNQyxZQUFZLEdBQUd6Qix3QkFBZ0IsQ0FBQ3NCLFNBQVMsQ0FBQztjQUM5Q3hCLGdCQUFnQixFQUFoQkEsZ0JBQWdCO2NBQ2hCdEwsTUFBTSxFQUFOQSxNQUFNO2NBQ04ySCxTQUFTLEVBQVRBO1lBQ0YsQ0FBQyxDQUFDO1lBQ0YsSUFBSXNGLFlBQVksRUFBRSxPQUFPQSxZQUFZO1lBRXJDLElBQUlELFVBQVUsRUFBRSxPQUFPLFVBQVU7WUFDakMsSUFBSXJGLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUUzRyxLQUFLLEVBQUUsT0FBTyxTQUFTO1lBQ3RDLE9BQU8sTUFBTTtVQUNmLENBQUM7UUFDSDtRQUVBLElBQU1rTSxPQUFPLEdBQUcsSUFBSSxDQUFDOUYsb0JBQW9CLENBQUN4TCxLQUFLLENBQUMsR0FDNUMsSUFBQXVSLHlCQUFrQixFQUFDO1VBQUNsUyxRQUFRLEVBQVJBLFFBQVE7VUFBRTRNLFFBQVEsRUFBUkE7UUFBUSxDQUFDLENBQUMsR0FDeEMsRUFBRTtRQUVOLElBQU11RixLQUFLLEdBQUd4QyxXQUFXLGFBQVhBLFdBQVcsZUFBWEEsV0FBVyxDQUFFd0MsS0FBSyxHQUM1QnhDLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFd0MsS0FBSyxDQUFDLENBQUMsR0FDcEIsSUFBSUMsY0FBTyxDQUFDO1VBQUNDLGdCQUFnQixFQUFFO1FBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUlDLGNBQWMsR0FBQXJXLGFBQUEsQ0FBQUEsYUFBQSxLQUNiMFQsV0FBVztVQUNkNEMsYUFBYSxFQUFFQyxpQ0FBc0I7VUFDckNMLEtBQUssRUFBTEEsS0FBSztVQUNMdE8sTUFBTSxFQUFFbU4sWUFBWTtVQUNwQmlCLE9BQU8sRUFBUEE7UUFBTyxFQUNSO1FBRUQsSUFBSSxRQUFPcEMsbUJBQW1CLGFBQW5CQSxtQkFBbUIsdUJBQW5CQSxtQkFBbUIsQ0FBRTRDLFlBQVksTUFBSyxVQUFVLEVBQUU7VUFDM0RILGNBQWMsR0FBR3pDLG1CQUFtQixDQUFDNEMsWUFBWSxDQUFDSCxjQUFjLENBQUM7VUFDakUsSUFBSSxDQUFDQSxjQUFjLEVBQUU7WUFDbkI7WUFDQSxPQUFPLElBQUk7VUFDYjtRQUNGO1FBRUEsb0JBQ0U1WixNQUFBLFlBQUFtRyxhQUFBLFFBQ09rUixhQUFhLEdBQ2Q7VUFDRWpGLFdBQVcsRUFBRXlFLFVBQVUsR0FDbkIsVUFBQXJJLEtBQUssRUFBSTtZQUNQNEQsV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRzVELEtBQUssQ0FBQztZQUNwQm1JLE1BQUksQ0FBQ3FELHFCQUFxQixDQUFDeEwsS0FBSyxFQUFFd0QsUUFBUSxDQUFDO1VBQzdDLENBQUMsR0FDRCtEO1FBQ04sQ0FBQyxHQUNEO1VBQUMxUCxLQUFLLEVBQUU7WUFBQ25CLGFBQWEsRUFBRTtVQUFNO1FBQUMsQ0FBQyxlQUVwQ2xGLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQzlGLE9BQUEsV0FBTSxNQUFBMEksU0FBQTtVQUNMbEIsRUFBRSxFQUFDLHdCQUF3QjtVQUMzQm9TLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBLEVBQVE7WUFDWixJQUFJLFFBQU85QyxtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFK0MsVUFBVSxNQUFLLFVBQVUsRUFBRTtjQUN6RC9DLG1CQUFtQixDQUFDK0MsVUFBVSxDQUFDLENBQUM7WUFDbEM7VUFDRjtRQUFFLEdBQ0VOLGNBQWM7VUFDbEJPLFVBQVUsRUFDUjlDLGFBQWEsR0FDVDtZQUNFK0MsZUFBZSxFQUFFLENBQUN4QyxtQkFBbUI7WUFDckN5QyxVQUFVLEVBQUUsSUFBSSxDQUFDclQsS0FBSyxDQUFDa04sUUFBUSxDQUFDbUc7VUFDbEMsQ0FBQyxHQUNELEtBQ0w7VUFDREMsZ0JBQWdCLEVBQUV0QyxpQkFBa0I7VUFDcEN1QyxjQUFjLEVBQUUsSUFBSSxDQUFDQyxlQUFnQjtVQUNyQ3pJLGlCQUFpQixFQUFFc0YsYUFBYSxHQUFHLElBQUksQ0FBQ29ELGlCQUFpQixHQUFHMUU7UUFBVSxHQUNsRWtELGVBQWU7VUFDbkJ5QixPQUFPLEVBQ0xyRCxhQUFhLEdBQ1QsVUFBQXZQLElBQUksRUFBSTtZQUNOLElBQU02UyxHQUFHLEdBQUc5Qyx3QkFBZ0IsQ0FBQzZDLE9BQU8sQ0FBQzVTLElBQUksRUFBRTtjQUN6QzZQLGdCQUFnQixFQUFoQkEsZ0JBQWdCO2NBQ2hCdEwsTUFBTSxFQUFOQSxNQUFNO2NBQ04ySCxTQUFTLEVBQVRBO1lBQ0YsQ0FBQyxDQUFDO1lBQ0YsSUFBSTJHLEdBQUcsRUFBRTtZQUVUaEUsTUFBSSxDQUFDaUUsc0JBQXNCLENBQUM5UyxJQUFJLEVBQUVHLEtBQUssQ0FBQztVQUMxQyxDQUFDLEdBQ0QsSUFDTDtVQUNENFMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUcvUyxJQUFJLEVBQUUwRyxLQUFLLEVBQUs7WUFDeEI7WUFDQSxJQUFBNkQscUJBQWMsRUFBQzdELEtBQUssQ0FBQ3NNLFFBQVEsRUFBRTlJLFFBQVEsQ0FBQztZQUN4QyxJQUFNMkksR0FBRyxHQUFHOUMsd0JBQWdCLENBQUNnRCxPQUFPLENBQUMvUyxJQUFJLEVBQUUwRyxLQUFLLEVBQUU7Y0FDaERtSixnQkFBZ0IsRUFBaEJBLGdCQUFnQjtjQUNoQnRMLE1BQU0sRUFBTkEsTUFBTTtjQUNOMkIsWUFBWSxFQUFaQSxZQUFZO2NBQ1pvSSxrQkFBa0IsRUFBbEJBLGtCQUFrQjtjQUNsQnBILFFBQVEsRUFBRS9HO1lBQ1osQ0FBQyxDQUFDO1lBQ0YsSUFBSTBTLEdBQUcsRUFBRTtZQUVUNU0sZUFBZSxDQUFDQyxZQUFZLENBQUNsRyxJQUFJLENBQUM7VUFDcEMsQ0FBRTtVQUNGaVQsT0FBTyxFQUFFLElBQUksQ0FBQ0MsWUFBYTtVQUMzQjVTLEdBQUcsRUFBRSxTQUFMQSxHQUFHQSxDQUFFNlMsSUFBSSxFQUFJO1lBQ1g7WUFDQSxJQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ0MsSUFBSSxJQUFJLENBQUN2RSxNQUFJLENBQUNuRCxLQUFLLEVBQUU7Y0FDcEM7Y0FDQW1ELE1BQUksQ0FBQ25ELEtBQUssR0FBR3lILElBQUksQ0FBQ0MsSUFBSTtZQUN4QjtVQUNGLENBQUU7VUFDRkMsa0JBQWtCLEVBQUUsU0FBcEJBLGtCQUFrQkEsQ0FBRS9LLEVBQUU7WUFBQSxPQUFJdUcsTUFBSSxDQUFDckQsa0JBQWtCLENBQUNsRCxFQUFFLENBQUM7VUFBQSxDQUFDO1VBQ3REZ0wsYUFBYSxFQUFFLFNBQWZBLGFBQWFBLENBQUEsRUFBUTtZQUNuQixJQUFJLFFBQU9qRSxtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFa0UsaUJBQWlCLE1BQUssVUFBVSxFQUFFO2NBQ2hFbEUsbUJBQW1CLENBQUNrRSxpQkFBaUIsQ0FBQ3pCLGNBQWMsQ0FBQztZQUN2RDtZQUVBLElBQU0wQixxQkFBcUIsR0FBRyxJQUFBQyxpQ0FBdUIsRUFBQzNCLGNBQWMsQ0FBQ3pPLE1BQU0sQ0FBQztZQUM1RSxJQUFJbVEscUJBQXFCLEtBQUszRSxNQUFJLENBQUMyRSxxQkFBcUIsRUFBRTtjQUN4RDNFLE1BQUksQ0FBQzZFLDBCQUEwQixDQUFDLENBQUM7Y0FDakM3RSxNQUFJLENBQUMyRSxxQkFBcUIsR0FBR0EscUJBQXFCO1lBQ3BEO1VBQ0Y7UUFBRSxJQUVEaEUsUUFDSyxDQUNMLENBQUM7TUFFVjtJQUFDO01BQUFyTyxHQUFBO01BQUEwRCxLQUFBLEVBRUQsU0FBQXlDLG1CQUFtQkEsQ0FBQSxFQUFHO1FBQ3BCLElBQU1xTSxZQUFZLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMxVSxLQUFLLENBQUM7UUFDMUQsSUFBSSxDQUFDekUsTUFBTSxDQUFDUyxJQUFJLENBQUN5WSxZQUFZLENBQUMsQ0FBQ2hZLE1BQU0sSUFBSSxDQUFDbEIsTUFBTSxDQUFDUyxJQUFJLENBQUMsSUFBSSxDQUFDbU0sY0FBYyxDQUFDLENBQUMxTCxNQUFNLEVBQUU7VUFDakY7UUFDRjtRQUVBLElBQUFrWSwwQkFBa0IsRUFBQyxJQUFJLENBQUNsTSxJQUFJLEVBQUVnTSxZQUFZLEVBQUUsSUFBSSxDQUFDdE0sY0FBYyxDQUFDO1FBRWhFLElBQUksQ0FBQ0EsY0FBYyxHQUFHc00sWUFBWTtNQUNwQztJQUFDO01BQUF4UyxHQUFBO01BQUEwRCxLQUFBLEVBRUQsU0FBQWlQLHFCQUFxQkEsQ0FBQSxFQUFHO1FBQ3RCLElBQUksSUFBSSxDQUFDbk0sSUFBSSxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDb00sYUFBYSxDQUFDLENBQUMsRUFBRTtVQUMxQyxJQUFJLENBQUN6TSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVCO01BQ0Y7SUFBQztNQUFBbkcsR0FBQTtNQUFBMEQsS0FBQSxFQTJDRDtNQUNBLFNBQUFtUCxVQUFVQSxDQUFBLEVBQUc7UUFBQSxJQUFBQyxtQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxjQUFBLEVBQUFDLHFCQUFBO1FBQ1gsSUFBQUMsWUFBQSxHQXVCSSxJQUFJLENBQUNuVixLQUFLO1VBdEJaTSxRQUFRLEdBQUE2VSxZQUFBLENBQVI3VSxRQUFRO1VBQ1I0TSxRQUFRLEdBQUFpSSxZQUFBLENBQVJqSSxRQUFRO1VBQ1IxRyxRQUFRLEdBQUEyTyxZQUFBLENBQVIzTyxRQUFRO1VBQ1J2QyxlQUFlLEdBQUFrUixZQUFBLENBQWZsUixlQUFlO1VBQUFtUixxQkFBQSxHQUFBRCxZQUFBLENBQ2ZFLFlBQVk7VUFBWkEsWUFBWSxHQUFBRCxxQkFBQSxjQUFHRSxlQUFHLEdBQUFGLHFCQUFBO1VBQ2xCckYsb0JBQW9CLEdBQUFvRixZQUFBLENBQXBCcEYsb0JBQW9CO1VBRXBCRyxXQUFXLEdBQUFpRixZQUFBLENBQVhqRixXQUFXO1VBQ1hqRixRQUFRLEdBQUFrSyxZQUFBLENBQVJsSyxRQUFRO1VBQ1JzSyxNQUFNLEdBQUFKLFlBQUEsQ0FBTkksTUFBTTtVQUNOakwsY0FBYyxHQUFBNkssWUFBQSxDQUFkN0ssY0FBYztVQUNkdkQsZUFBZSxHQUFBb08sWUFBQSxDQUFmcE8sZUFBZTtVQUNmOUYsS0FBSyxHQUFBa1UsWUFBQSxDQUFMbFUsS0FBSztVQUNMK0MsT0FBTyxHQUFBbVIsWUFBQSxDQUFQblIsT0FBTztVQUNQd1IsdUJBQXVCLEdBQUFMLFlBQUEsQ0FBdkJLLHVCQUF1QjtVQUN2QkMsb0JBQW9CLEdBQUFOLFlBQUEsQ0FBcEJNLG9CQUFvQjtVQUNwQnZWLEtBQUssR0FBQWlWLFlBQUEsQ0FBTGpWLEtBQUs7VUFBQXdWLHFCQUFBLEdBQUFQLFlBQUEsQ0FDTHpULG1CQUFtQjtVQUFuQkEsbUJBQW1CLEdBQUFnVSxxQkFBQSxjQUFHLEVBQUUsR0FBQUEscUJBQUE7VUFBQUMscUJBQUEsR0FBQVIsWUFBQSxDQUN4QnpVLFdBQVc7VUFBWEEsV0FBVyxHQUFBaVYscUJBQUEsY0FBRyxDQUFDLEdBQUFBLHFCQUFBO1VBQ2ZDLHlCQUF5QixHQUFBVCxZQUFBLENBQXpCUyx5QkFBeUI7VUFDekJDLGVBQWUsR0FBQVYsWUFBQSxDQUFmVSxlQUFlO1VBQ2ZDLGNBQWMsR0FBQVgsWUFBQSxDQUFkVyxjQUFjO1FBR2hCLElBQU8zUixNQUFNLEdBQXlDN0QsUUFBUSxDQUF2RDZELE1BQU07VUFBRWtKLFFBQVEsR0FBK0IvTSxRQUFRLENBQS9DK00sUUFBUTtVQUFFaEksTUFBTSxHQUF1Qi9FLFFBQVEsQ0FBckMrRSxNQUFNO1VBQUVpSSxpQkFBaUIsR0FBSWhOLFFBQVEsQ0FBN0JnTixpQkFBaUI7UUFFbEQsSUFBTWhILGNBQWMsR0FBRyxJQUFJLENBQUNILHNCQUFzQixDQUFDLElBQUksQ0FBQ25HLEtBQUssQ0FBQztRQUM5RCxJQUFNeVAsYUFBYSxHQUFHLElBQUksQ0FBQ3NHLHFCQUFxQixDQUFDLElBQUksQ0FBQy9WLEtBQUssQ0FBQzs7UUFFNUQ7UUFDQSxJQUFNZ1csWUFBWSxJQUFBakIsbUJBQUEsR0FBR3ZPLFFBQVEsQ0FBQ3lQLFNBQVMsY0FBQWxCLG1CQUFBLHVCQUFsQkEsbUJBQUEsQ0FBcUJ2TyxRQUFRLENBQUNDLFNBQVMsQ0FBQztRQUM3RCxJQUFNeVAsa0JBQWtCLEdBQUcsSUFBQUMsd0JBQWlCLEVBQUNILFlBQVksQ0FBQztRQUMxRCxJQUFNOVcsb0JBQW9CLElBQUE4VixxQkFBQSxHQUN4QixJQUFBb0IsMkJBQW9CLEVBQUMsQ0FBQyxDQUFDbFgsb0JBQW9CLGNBQUE4VixxQkFBQSx1QkFBM0NBLHFCQUFBLENBQThDa0Isa0JBQWtCLENBQUM7UUFFbkUsSUFBTWxGLGlCQUFpQixJQUFBaUUsY0FBQSxHQUFHLElBQUksQ0FBQ3JLLE9BQU8sY0FBQXFLLGNBQUEsdUJBQVpBLGNBQUEsQ0FBY3BLLG9CQUFvQixDQUFDNUosS0FBSyxDQUFDO1FBQ25FLElBQU1vVixRQUFRLEdBQUE5WixhQUFBLENBQUFBLGFBQUEsS0FDVHlVLGlCQUFpQjtVQUNwQnNGLHFCQUFxQixFQUFFLElBQUk7VUFDM0JDLGlCQUFpQixFQUFFLENBQUFQLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFUSxXQUFXLEtBQUl6RyxvQkFBb0I7VUFDcEU7VUFDQTBHLE1BQU0sRUFBRXZYLG9CQUFvQixDQUFDd1gsU0FBUyxDQUFDLENBQUM7VUFDeENDLGdCQUFnQixFQUNkLElBQUksQ0FBQzNXLEtBQUssQ0FBQzJXLGdCQUFnQixJQUMzQixJQUFBQSx1QkFBZ0IsRUFBQyxDQUFBWCxZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRVEsV0FBVyxLQUFJekcsb0JBQW9CO1FBQUMsRUFDdEU7UUFFRCxJQUFNNkcsZ0JBQWdCLEdBQUd2WixPQUFPLENBQUM4RyxNQUFNLENBQUMwUyxJQUFJLENBQUMsVUFBQUMsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQ2pXLEVBQUUsS0FBS2tXLDRCQUFpQjtRQUFBLEVBQUMsQ0FBQztRQUM5RSxJQUFNQyxPQUFPLEdBQUczWixPQUFPLENBQUM2UCxRQUFRLENBQUM4SixPQUFPLENBQUM7UUFFekMsSUFBTTlDLElBQUksR0FBRyxJQUFJLENBQUMxRSxrQkFBa0IsQ0FBQ0MsYUFBYSxFQUFFO1VBQ2xESSxVQUFVLEVBQUUsSUFBSTtVQUNoQlEsYUFBYSxFQUFFLElBQUk7VUFDbkJDLFFBQVEsZUFDTnRYLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ2tXLFlBQVksTUFBQXRULFNBQUE7WUFDWEUsR0FBRyxZQUFBckQsTUFBQSxDQUFZc1gsa0JBQWtCO1VBQUcsR0FDaENHLFFBQVE7WUFDWjdQLFFBQVEsR0FBQTBPLHFCQUFBLEdBQUUxTyxRQUFRLENBQUN5USxjQUFjLGNBQUEvQixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJZ0M7VUFBbUIsR0FDcEQxQix1QkFBdUI7WUFDM0JwVSxHQUFHLEVBQUUsSUFBSSxDQUFDK1Y7VUFBVyxFQUN0QjtRQUVMLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQ2pELElBQUksRUFBRTtVQUNUO1VBQ0E7VUFDQSxPQUFPLElBQUk7UUFDYjtRQUNBLG9CQUNFbGIsTUFBQSxZQUFBbUcsYUFBQSxDQUFBbkcsTUFBQSxZQUFBMkksUUFBQSxxQkFDRTNJLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ21FLFVBQVU7VUFDVDRKLFFBQVEsRUFBRUEsUUFBUztVQUNuQkcsUUFBUSxFQUFFQSxRQUFTO1VBQ25CK0osZ0JBQWdCLEVBQUVqWixrQkFBbUI7VUFDckNrVixVQUFVLEVBQUVuRyxRQUFRLENBQUNtRyxVQUFXO1VBQ2hDMkQsT0FBTyxFQUFFQSxPQUFRO1VBQ2pCaFQsT0FBTyxFQUFFM0csT0FBTyxDQUFDMkcsT0FBTyxDQUFFO1VBQzFCaUgsUUFBUSxFQUFFQSxRQUFTO1VBQ25COUcsTUFBTSxFQUFFQSxNQUFPO1VBQ2ZtQyxjQUFjLEVBQUVBLGNBQWU7VUFDL0IwQixRQUFRLEVBQUUvRyxLQUFLLElBQUksQ0FBRTtVQUNyQmlQLFdBQVcsRUFBRUEsV0FBWTtVQUN6Qm1ILFFBQVEsRUFBRSxJQUFJLENBQUNyWCxLQUFLLENBQUNxWCxRQUFTO1VBQzlCQyxLQUFLLEVBQUVwSyxRQUFRLENBQUNvSyxLQUFLLElBQUksQ0FBRTtVQUMzQkMsYUFBYSxFQUFFLElBQUksQ0FBQ3ZYLEtBQUssQ0FBQ3VYLGFBQWM7VUFDeEN0WixHQUFHLEVBQ0RxUCxpQkFBaUIsQ0FBQ2tLLFFBQVEsSUFBSWxLLGlCQUFpQixDQUFDa0ssUUFBUSxDQUFDcFMsT0FBTyxHQUM1RGxGLEtBQUssQ0FBQ3VYLGFBQWEsR0FDbkIsQ0FDTDtVQUNEcFMsTUFBTSxFQUFFQSxNQUFPO1VBQ2ZrUSxNQUFNLEVBQUVBLE1BQU87VUFDZm1DLG1CQUFtQixFQUFFelQsZUFBZSxDQUFDMFQsaUJBQWtCO1VBQ3ZEQyxnQkFBZ0IsRUFBRTNULGVBQWUsQ0FBQzRULGNBQWU7VUFDakRDLGdCQUFnQixFQUFFLElBQUksQ0FBQ0MscUJBQXNCO1VBQzdDQyxrQkFBa0IsRUFBRSxJQUFJLENBQUNDLGlCQUFrQjtVQUMzQ0Msd0JBQXdCLEVBQUVqVSxlQUFlLENBQUNrVSxzQkFBdUI7VUFDakVDLGVBQWUsRUFBRXJSLGVBQWUsQ0FBQ3NSLGFBQWM7VUFDL0NDLFdBQVcsRUFBRWhPLGNBQWMsQ0FBQ2lPLFNBQVU7VUFDdENDLHdCQUF3QixFQUFFelIsZUFBZSxDQUFDMFIsc0JBQXVCO1VBQ2pFQyxzQkFBc0IsRUFBRTNSLGVBQWUsQ0FBQzRSLG9CQUFxQjtVQUM3REMsU0FBUyxFQUFFMUwsUUFBUSxDQUFDbFAsTUFBTztVQUMzQjZhLHFCQUFxQixFQUFFdk8sY0FBYyxDQUFDdU8scUJBQXNCO1VBQzVEaEQsZUFBZSxFQUFFQTtRQUFnQixDQUNsQyxDQUFDLEVBQ0R6VixlQUFlLENBQUMsSUFBSSxDQUFDSixLQUFLLENBQUMsaUJBQUloSCxNQUFBLFlBQUFtRyxhQUFBLENBQUNxQixTQUFTO1VBQUNFLFdBQVcsRUFBRUE7UUFBWSxDQUFFLENBQUMsRUFFdEV3VCxJQUFJLEVBQ0osSUFBSSxDQUFDVSxxQkFBcUIsQ0FBQyxDQUFDLGVBQzdCNWIsTUFBQSxZQUFBbUcsYUFBQSxDQUFDb0UsTUFBTTtVQUNMdEMsS0FBSyxFQUFFQSxLQUFLLElBQUksQ0FBRTtVQUNsQm9NLFFBQVEsRUFBRUEsUUFBUztVQUNuQmhJLE1BQU0sRUFBRUEsTUFBTztVQUNmTixPQUFPLEVBQUUsSUFBSSxDQUFDUyxzQkFBc0IsQ0FBQyxJQUFJLENBQUN4RixLQUFLLENBQUU7VUFDakRtRSxNQUFNLEVBQUVBLE1BQU87VUFDZjJVLGVBQWUsRUFBRS9SLGVBQWUsQ0FBQ2dTLGFBQWM7VUFDL0NDLFFBQVEsRUFBRWpTLGVBQWUsQ0FBQ3FJLGtCQUFtQjtVQUM3QzZKLHFCQUFxQixFQUFFbFMsZUFBZSxDQUFDbVMscUJBQXNCO1VBQzdEZCxlQUFlLEVBQUVyUixlQUFlLENBQUNzUixhQUFjO1VBQy9DaFosS0FBSyxFQUFFO1lBQ0xuQixhQUFhLEVBQUUsS0FBSztZQUNwQkosUUFBUSxFQUFFLFVBQVU7WUFDcEJELE9BQU8sRUFBRXdILE1BQU0sQ0FBQzhULE9BQU8sR0FBRyxPQUFPLEdBQUc7VUFDdEM7UUFBRSxDQUNILENBQUMsRUFDRCxJQUFJLENBQUNuWixLQUFLLENBQUNzUSxRQUFRLEVBQ25COUosUUFBUSxDQUFDNFMsV0FBVyxnQkFDbkJwZ0IsTUFBQSxZQUFBbUcsYUFBQSxDQUFDa1csWUFBWSxNQUFBdFQsU0FBQTtVQUNYRSxHQUFHLFNBQUFyRCxNQUFBLENBQVNzWCxrQkFBa0IsQ0FBRztVQUNqQ3ZMLFNBQVMsRUFBRXFHLGlCQUFrQjtVQUM3QnhLLFFBQVEsRUFBRUEsUUFBUSxDQUFDNFMsV0FBWTtVQUMvQi9aLEtBQUssRUFBRTFCLFNBQVMsQ0FBQ00sR0FBSTtVQUNyQnNZLGlCQUFpQixFQUFFRixRQUFRLENBQUNFLGlCQUFrQjtVQUM5Q0ksZ0JBQWdCLEVBQUVOLFFBQVEsQ0FBQ00sZ0JBQWlCO1VBQzVDRixNQUFNLEVBQUV2WCxvQkFBb0IsQ0FBQ3dYLFNBQVMsQ0FBQztRQUFFLEdBQ3JDakIsb0JBQW9CLENBQ3pCLENBQUMsR0FDQSxJQUFJLEVBRVBtQixnQkFBZ0IsR0FDYixJQUFJLENBQUNwSCxrQkFBa0IsS0FBQTdTLGdCQUFBLGlCQUNuQm9hLDRCQUFpQixFQUFHSCxnQkFBZ0IsR0FDdEM7VUFBQy9HLFVBQVUsRUFBRSxLQUFLO1VBQUVRLGFBQWEsRUFBRTtRQUFLLENBQzFDLENBQUMsR0FDRCxJQUFJLEVBQ1AsSUFBSSxDQUFDdkQsaUJBQWlCLENBQUMsQ0FBQyxFQUN4QjlJLE9BQU8sS0FBS2dULE9BQU8sZ0JBQ2xCaGUsTUFBQSxZQUFBbUcsYUFBQSxDQUFDM0UsaUJBQUEsV0FBZ0I7VUFDZjZlLFNBQVMsRUFBRWhjLE9BQU8sQ0FBQ3VZLHlCQUF5QixJQUFJLElBQUksQ0FBQ3RCLHFCQUFxQixDQUFFO1VBQzVFdUIsZUFBZSxFQUFFeFksT0FBTyxDQUFDd1ksZUFBZSxDQUFFO1VBQzFDQyxjQUFjLEVBQUVBO1FBQWUsQ0FDaEMsQ0FBQyxHQUNBLElBQUksRUFDUCxJQUFJLENBQUM5VixLQUFLLENBQUNnRSxPQUFPLGdCQUNqQmhMLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ2dELFdBQVc7VUFDVkcsa0JBQWtCLEVBQUUsSUFBSSxDQUFDZ1gsS0FBSyxDQUFDMVYsc0JBQXVCO1VBQ3REcEIseUJBQXlCLEVBQUUsSUFBSztVQUNoQ2QsbUJBQW1CLEVBQUVBLG1CQUFvQjtVQUN6Q3hDLG9CQUFvQixFQUFFQTtRQUFxQixDQUM1QyxDQUFDLEdBQ0EsSUFDSixDQUFDO01BRVA7SUFBQztNQUFBK0MsR0FBQTtNQUFBMEQsS0FBQSxFQUVELFNBQUE0VCxNQUFNQSxDQUFBLEVBQUc7UUFBQSxJQUFBQyxvQkFBQSxFQUFBQyxzQkFBQTtRQUNQLElBQUFDLFlBQUEsR0FBNkIsSUFBSSxDQUFDMVosS0FBSztVQUFoQ00sUUFBUSxHQUFBb1osWUFBQSxDQUFScFosUUFBUTtVQUFFa0csUUFBUSxHQUFBa1QsWUFBQSxDQUFSbFQsUUFBUTtRQUN6QixJQUFNbVQsVUFBVSxHQUFHLElBQUksQ0FBQzdFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQzZFLFVBQVUsRUFBRTtVQUNmO1VBQ0E7VUFDQSxPQUFPLElBQUk7UUFDYjtRQUVBLElBQU0zRCxZQUFZLElBQUF3RCxvQkFBQSxHQUFHaFQsUUFBUSxDQUFDeVAsU0FBUyxjQUFBdUQsb0JBQUEsdUJBQWxCQSxvQkFBQSxDQUFxQmhULFFBQVEsQ0FBQ0MsU0FBUyxDQUFDO1FBQzdELElBQU15UCxrQkFBa0IsR0FBRyxJQUFBQyx3QkFBaUIsRUFBQ0gsWUFBWSxDQUFDO1FBQzFELElBQU05VyxvQkFBb0IsSUFBQXVhLHNCQUFBLEdBQ3hCLElBQUFyRCwyQkFBb0IsRUFBQyxDQUFDLENBQUNsWCxvQkFBb0IsY0FBQXVhLHNCQUFBLHVCQUEzQ0Esc0JBQUEsQ0FBOEN2RCxrQkFBa0IsQ0FBQztRQUVuRSxvQkFDRWxkLE1BQUEsWUFBQW1HLGFBQUEsQ0FBQ2QsU0FBUztVQUNSK0MsR0FBRyxFQUFFLElBQUksQ0FBQzVDLElBQUs7VUFDZmEsS0FBSyxFQUFFLElBQUksQ0FBQ3VhLGFBQWEsQ0FBQyxJQUFJLENBQUM1WixLQUFLLENBQUU7VUFDdEM2WixhQUFhLEVBQUUsU0FBZkEsYUFBYUEsQ0FBRXJTLEtBQUs7WUFBQSxPQUFJQSxLQUFLLENBQUNzUyxjQUFjLENBQUMsQ0FBQztVQUFBLENBQUM7VUFDL0NwYixhQUFhLEVBQUU0QixRQUFRLENBQUN5WixlQUFnQjtVQUN4Q3BiLGVBQWUsRUFBRU8sb0JBQW9CLENBQUNLO1FBQWUsR0FFcERvYSxVQUNRLENBQUM7TUFFaEI7SUFBQztFQUFBLEVBbDJCd0JLLGdCQUFTO0VBQUEsSUFBQXJkLGdCQUFBLGFBQTlCNkcsWUFBWSxpQkFLS3lXLHdDQUFtQjtFQUFBLElBQUF0ZCxnQkFBQSxhQUxwQzZHLFlBQVksa0JBU007SUFDcEI2UixZQUFZLEVBQUVDLGVBQUc7SUFDakJyRixXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2ZoUCxLQUFLLEVBQUUsQ0FBQztJQUNSK0MsT0FBTyxFQUFFO0VBQ1gsQ0FBQztFQXUxQkgsT0FBTyxJQUFBa1csMkJBQVMsRUFBQzFXLFlBQVksQ0FBQztBQUNoQyIsImlnbm9yZUxpc3QiOltdfQ==