@fundamental-ngx/core 0.35.0-rc.21 → 0.35.0-rc.22

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 (102) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/date-picker/package.json +1 -1
  16. package/datetime/package.json +1 -1
  17. package/datetime-picker/package.json +1 -1
  18. package/dialog/package.json +1 -1
  19. package/dynamic-page/package.json +1 -1
  20. package/dynamic-side-content/package.json +1 -1
  21. package/esm2020/token/tokenizer.component.mjs +18 -52
  22. package/facets/package.json +1 -1
  23. package/feed-input/package.json +1 -1
  24. package/feed-list-item/package.json +1 -1
  25. package/fesm2015/fundamental-ngx-core-token.mjs +17 -51
  26. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  27. package/fesm2020/fundamental-ngx-core-token.mjs +17 -51
  28. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  29. package/file-uploader/package.json +1 -1
  30. package/fixed-card-layout/package.json +1 -1
  31. package/flexible-column-layout/package.json +1 -1
  32. package/form/package.json +1 -1
  33. package/formatted-text/package.json +1 -1
  34. package/grid-list/package.json +1 -1
  35. package/icon/package.json +1 -1
  36. package/illustrated-message/package.json +1 -1
  37. package/infinite-scroll/package.json +1 -1
  38. package/info-label/package.json +1 -1
  39. package/inline-help/package.json +1 -1
  40. package/input-group/package.json +1 -1
  41. package/layout-grid/package.json +1 -1
  42. package/layout-panel/package.json +1 -1
  43. package/link/package.json +1 -1
  44. package/list/package.json +1 -1
  45. package/menu/package.json +1 -1
  46. package/message-box/package.json +1 -1
  47. package/message-strip/package.json +1 -1
  48. package/message-toast/package.json +1 -1
  49. package/micro-process-flow/package.json +1 -1
  50. package/mobile-mode/package.json +1 -1
  51. package/multi-input/package.json +1 -1
  52. package/nested-list/package.json +1 -1
  53. package/notification/package.json +1 -1
  54. package/object-identifier/package.json +1 -1
  55. package/object-marker/package.json +1 -1
  56. package/object-number/package.json +1 -1
  57. package/object-status/package.json +1 -1
  58. package/package.json +1 -1
  59. package/pagination/package.json +1 -1
  60. package/panel/package.json +1 -1
  61. package/popover/package.json +1 -1
  62. package/product-switch/package.json +1 -1
  63. package/progress-indicator/package.json +1 -1
  64. package/quick-view/package.json +1 -1
  65. package/radio/package.json +1 -1
  66. package/rating-indicator/package.json +1 -1
  67. package/resizable-card-layout/package.json +1 -1
  68. package/scroll-spy/package.json +1 -1
  69. package/scrollbar/package.json +1 -1
  70. package/segmented-button/package.json +1 -1
  71. package/select/package.json +1 -1
  72. package/shared/package.json +1 -1
  73. package/shellbar/package.json +1 -1
  74. package/side-navigation/package.json +1 -1
  75. package/slider/package.json +1 -1
  76. package/split-button/package.json +1 -1
  77. package/splitter/package.json +1 -1
  78. package/status-indicator/package.json +1 -1
  79. package/step-input/package.json +1 -1
  80. package/switch/package.json +1 -1
  81. package/table/package.json +1 -1
  82. package/tabs/package.json +1 -1
  83. package/text/package.json +1 -1
  84. package/theming/package.json +1 -1
  85. package/tile/package.json +1 -1
  86. package/time/package.json +1 -1
  87. package/time-picker/package.json +1 -1
  88. package/timeline/package.json +1 -1
  89. package/title/package.json +1 -1
  90. package/token/esm2020/tokenizer.component.mjs +18 -52
  91. package/token/fesm2015/fundamental-ngx-core-token.mjs +17 -51
  92. package/token/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  93. package/token/fesm2020/fundamental-ngx-core-token.mjs +17 -51
  94. package/token/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  95. package/token/package.json +1 -1
  96. package/token/tokenizer.component.d.ts +1 -1
  97. package/toolbar/package.json +1 -1
  98. package/tree/package.json +1 -1
  99. package/upload-collection/package.json +1 -1
  100. package/utils/package.json +1 -1
  101. package/vertical-navigation/package.json +1 -1
  102. package/wizard/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/action-bar",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/action-sheet",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/alert",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/avatar",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/avatar-group",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/bar/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/bar",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/breadcrumb",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/busy-indicator",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/button",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/calendar",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/card/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/card",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/carousel",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/checkbox",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/combobox",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/date-picker",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/datetime",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/datetime-picker",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dialog",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dynamic-page",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dynamic-side-content",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -90,12 +90,12 @@ export class TokenizerComponent {
90
90
  this.tokenListChangesSubscription.unsubscribe();
91
91
  }
92
92
  this.tokenListChangesSubscription = this.tokenList.changes.subscribe(() => {
93
- this._cdRef.detectChanges();
94
- this.moreTokensLeft = [];
95
- this.moreTokensRight = [];
96
- this.previousTokenCount > this.tokenList.length ? this._expandTokens() : this._collapseTokens();
97
- this.previousTokenCount = this.tokenList.length;
98
- this.handleTokenClickSubscriptions();
93
+ this._resetTokens();
94
+ });
95
+ this.tokenList.forEach((token) => {
96
+ this.tokenListChangesSubscription.add(token.onCloseClick.subscribe(() => {
97
+ this._resetTokens();
98
+ }));
99
99
  });
100
100
  if (!this.compact && !this.compactCollapse) {
101
101
  this._handleInitCozyTokenCount();
@@ -217,13 +217,7 @@ export class TokenizerComponent {
217
217
  onResize() {
218
218
  if (this._elementRef) {
219
219
  const elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
220
- // if the element is geting smaller, try collapsing tokens
221
- if (elementWidth <= this.previousElementWidth) {
222
- this._collapseTokens();
223
- }
224
- else {
225
- this._expandTokens(); // if it's getting bigger, try expanding
226
- }
220
+ this._resetTokens();
227
221
  this.previousElementWidth = elementWidth;
228
222
  }
229
223
  }
@@ -366,49 +360,21 @@ export class TokenizerComponent {
366
360
  }
367
361
  }
368
362
  /** @hidden */
369
- _expandTokens() {
363
+ _resetTokens() {
364
+ this.moreTokensLeft = [];
365
+ this.moreTokensRight = [];
370
366
  if (this.compact || this.compactCollapse) {
371
- let elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
372
- let combinedTokenWidth = this.getCombinedTokenWidth(); // the combined width of all tokens, the "____ more" text, and the input
373
- let breakLoop = false;
374
- let i = this.moreTokensLeft.length - 1 + this.moreTokensRight.length;
375
- while (combinedTokenWidth < elementWidth && i >= 0 && !breakLoop) {
376
- // we want to get the first hidden token and check to see if it can fit in the whole tokenizer
377
- const tokenToCheck = this.tokenList.filter((token) => token.elementRef.nativeElement.style.display === 'none')[i];
378
- /*
379
- set display: 'inline-block' and visibility: 'hidden' - this way, the tokenizer width will
380
- contain the width of the token we might display, without actually making the token visible to the user.
381
- */
382
- tokenToCheck.elementRef.nativeElement.style.display = 'inline-block';
383
- tokenToCheck.elementRef.nativeElement.style.visibility = 'hidden';
384
- elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
385
- combinedTokenWidth = this.getCombinedTokenWidth();
386
- /*
387
- if the width of the inner tokenizer component is still smaller than the whole tokenizer component, we'll
388
- make the token visible and reduce the hidden count
389
- */
390
- if (combinedTokenWidth < elementWidth) {
391
- tokenToCheck.elementRef.nativeElement.style.visibility = 'visible';
392
- tokenToCheck._viewContainer.createEmbeddedView(tokenToCheck._content);
393
- if (this.moreTokensLeft.length) {
394
- this.moreTokensLeft.pop();
395
- }
396
- else if (this.moreTokensRight.length) {
397
- this.moreTokensRight.pop();
398
- }
399
- }
400
- else {
401
- // otherwise, stop looping and set the token's display back to 'none'
402
- tokenToCheck.elementRef.nativeElement.style.display = 'none';
403
- breakLoop = true;
404
- }
405
- i--;
406
- this._cdRef.markForCheck();
407
- }
367
+ this.tokenList.forEach((token) => {
368
+ this._makeElementVisible(token.elementRef);
369
+ });
370
+ this._cdRef.markForCheck();
371
+ this._collapseTokens();
408
372
  }
409
373
  else {
410
374
  this._getHiddenCozyTokenCount();
411
375
  }
376
+ this.handleTokenClickSubscriptions();
377
+ this.previousTokenCount = this.tokenList.length;
412
378
  }
413
379
  /** @hidden */
414
380
  _getHiddenCozyTokenCount() {
@@ -650,4 +616,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
650
616
  type: HostListener,
651
617
  args: ['window:resize', []]
652
618
  }] } });
653
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFJSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxxQkFBcUIsRUFFckIsYUFBYSxFQUNiLFVBQVUsRUFDVixPQUFPLEVBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0FBU25ELE1BQU0sT0FBTyxrQkFBa0I7SUFvTTNCLFlBQ1ksV0FBdUIsRUFDWCxzQkFBNkMs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O2dCQUtOLFNBQVM7c0JBRFIsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUtqRCxLQUFLO3NCQURKLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2dCQUtwRCxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUlVLE9BQU87c0JBQXhDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQU1uQixjQUFjO3NCQUR0QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFhekQsT0FBTztzQkFETixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtHLGdCQUFnQjtzQkFEeEIsTUFBTTs7UUF3SVA7OztXQUdHO1FBQ0gsc0JBQXNCLE1BNkR0QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQStCbkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBLCBCQUNLU1BBQ0UsIERFTEVURSwgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgUnRsU2VydmljZSxcbiAgICBLZXlVdGlsXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBUb2tlbkNvbXBvbmVudCB9IGZyb20gJy4vdG9rZW4uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10b2tlbml6ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rva2VuaXplci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVG9rZW5pemVyQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENzc0NsYXNzQnVpbGRlciwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogdXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIERpc2FibGVzIHBvc3NpYmlsaXR5IHRvIHJlbW92ZSB0b2tlbnMgYnkga2V5Ym9hcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVLZXlib2FyZERlbGV0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogcm9sZSBkZXNjcmlwdGlvbiBmb3IgdG9rZW5pemVyIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVJvbGVEZXNjcmlwdGlvbiA9ICd0b2tlbml6ZXInO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVG9rZW5Db21wb25lbnQpKVxuICAgIHRva2VuTGlzdDogUXVlcnlMaXN0PFRva2VuQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IEZvcm1Db250cm9sQ29tcG9uZW50KSlcbiAgICBpbnB1dDogRm9ybUNvbnRyb2xDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3Rva2VuaXplcklubmVyJylcbiAgICB0b2tlbml6ZXJJbm5lckVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtb3JlRWxlbWVudCcpXG4gICAgbW9yZUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBBZGRPbicpIHNldCBjb250ZW50KGNvbnRlbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwQWRkb25FbCA9IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCd2aWV3Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcmVhZG9ubHkgX3ZpZXdDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9oaWRkZW5Ub2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlucHV0R3JvdXBBZGRvbkVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRva2VuaXplciBpcyBjb21wYWN0ICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0PzogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBjb3p5IHZpc3VhbHMgYnV0IGNvbXBhY3QgY29sbGFwc2luZyBiZWhhdmlvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3RDb2xsYXBzZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG9rZW5pemVyIHNob3VsZCBoYXZlIGZha2UgZm9jdXMgaW5kaWNhdG9yLCB3aGVuIGlucHV0IGlzIGZvY3VzZWQgaW5zaWRlKi9cbiAgICBASW5wdXQoKVxuICAgIHRva2VuaXplckZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogVGhlIHZhbHVlIGZvciB0aGUgdG9rZW5pemVyIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBvZiB0aGUgYnV0dG9uIG9uIHRoZSByaWdodCBvZiB0aGUgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaDogc3RyaW5nO1xuXG4gICAgLyoqIFdvcmQgdG8gdXNlIGZvciB3aGVuIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMuICovXG4gICAgQElucHV0KClcbiAgICBtb3JlVGVybSA9ICdtb3JlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuOiBib29sZWFuO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VhcmNoIHRlcm0gY2hhbmdlcy4gVXNlICokZXZlbnQqIHRvIGFjY2VzcyB0aGUgbmV3IHRlcm0uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9yZUNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNFbGVtZW50V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc0xlZnQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlVG9rZW5zUmlnaHQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcmV2aW91c1Rva2VuQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhpZGRlbkNvenlUb2tlbkNvdW50ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gYWRkIGZvY3VzIHRvIHRva2VuaXplciBlbGVtZW50ICovXG4gICAgX3Rva2VuaXplckhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93T3ZlcmZsb3dQb3BvdmVyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29udGVudERlbnNpdHlTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8qIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplciovXG4gICAgcHJpdmF0ZSBfZmlyc3RFbGVtZW50SW5TZWxlY3Rpb246IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICAvKiBWYXJpYWJsZSB3aGljaCB3aWxsIGtlZXAgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplciovXG4gICAgcHJpdmF0ZSBfbGFzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8qIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhlIGxhc3Qga2V5Ym9hcmQgYW5kIGNsaWNrIG9wZXJhdGlvbiB0aGV5IHVzZWQgd2FzIHVzaW5nIGNvbnRyb2wqL1xuICAgIHByaXZhdGUgX2N0cmxQcmV2aW91czogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgLyogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGV5IGhlbGQgc2hpZnQgYW5kIGNsaWNrZWQgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIGJlZm9yZSBvciovXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uU2hpZnRJc1JpZ2h0OiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZykgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5lbGVtZW50UmVmKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0S2V5ZG93bkV2ZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Db3VudCA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSB0b2tlbkxpc3QgYW5kIGF0dGVtcHQgdG8gZXhwYW5kL2NvbGxhcHNlIHRva2VucyBhcyBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50b2tlbkxpc3QuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5tb3JlVG9rZW5zTGVmdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5tb3JlVG9rZW5zUmlnaHQgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNUb2tlbkNvdW50ID4gdGhpcy50b2tlbkxpc3QubGVuZ3RoID8gdGhpcy5fZXhwYW5kVG9rZW5zKCkgOiB0aGlzLl9jb2xsYXBzZVRva2VucygpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Rva2VuQ291bnQgPSB0aGlzLnRva2VuTGlzdC5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUluaXRDb3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlbkVsZW1lbnRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQ2xpY2tzKCk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2NvbnRlbnREZW5zaXR5U2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGVudERlbnNpdHlTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5U2VydmljZS5faXNDb21wYWN0RGVuc2l0eS5zdWJzY3JpYmUoKGlzQ29tcGFjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBhY3QgPSBpc0NvbXBhY3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29udGVudERlbnNpdHlTZXJ2aWNlOiBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgLyoqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5jbGFzc107XG4gICAgfVxuXG4gICAgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWY7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVUb2tlbkNsaWNrU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVDbGlja3MoKTtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5DbGljay5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ29udHJvbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSB8fCB0aGlzLl9jdHJsUHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2ljU2VsZWN0ZWQodG9rZW4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpcnN0QW5kTGFzdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U2VsZWN0ZWQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXg6IG51bWJlcik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdG9rZW5MaXN0QXJyYXk6IFRva2VuQ29tcG9uZW50W10gPSB0aGlzLnRva2VuTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGlmICh0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdG9rZW5MaXN0QXJyYXlbbmV3SW5kZXhdLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgbmVlZHMgdGFiaW5kZXggaW4gb3JkZXIgdG8gYmUgZm9jdXNlZFxuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMhLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMhLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmFkZEtleWJvYXJkTGlzdGVuZXIoZWxlbWVudFRvRm9jdXMhLCBuZXdJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxlbWVudFRvRm9jdXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhZGRLZXlib2FyZExpc3RlbmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBuZXdJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gYmUgcmVmZXJlbmNlZCBsYXRlciBieSBhZGRFdmVudExpc3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICAgICAgY29uc3QgaGFuZGxlRnVuY3Rpb25SZWZlcmVuY2UgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKG5ld0luZGV4IHx8IG5ld0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGUsIG5ld0luZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRnVuY3Rpb25SZWZlcmVuY2UpO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUZ1bmN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgW0RFTEVURSwgQkFDS1NQQUNFXSkgJiZcbiAgICAgICAgICAgICghdGhpcy5faXNJbnB1dEZvY3VzZWQoKSB8fCB0aGlzLl90b2tlbnNTZWxlY3RlZCgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuZGlzYWJsZUtleWJvYXJkRGVsZXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkVG9rZW5JbmRleCA9IHRoaXMuX2dldEZvY3VzZWRUb2tlbkluZGV4KCk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQub25DbG9zZUNsaWNrLmVtaXQoKSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIERFTEVURSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoZm9jdXNlZFRva2VuSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBCQUNLU1BBQ0UpICYmXG4gICAgICAgICAgICB0aGlzLl9pc0lucHV0Rm9jdXNlZCgpICYmXG4gICAgICAgICAgICAhdGhpcy5fZ2V0SW5wdXRWYWx1ZSgpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQodGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcbiAgICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGlzIGdldGluZyBzbWFsbGVyLCB0cnkgY29sbGFwc2luZyB0b2tlbnNcbiAgICAgICAgICAgIGlmIChlbGVtZW50V2lkdGggPD0gdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZFRva2VucygpOyAvLyBpZiBpdCdzIGdldHRpbmcgYmlnZ2VyLCB0cnkgZXhwYW5kaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gZWxlbWVudFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcnRsID0gdGhpcy5fcnRsU2VydmljZSAmJiB0aGlzLl9ydGxTZXJ2aWNlLnJ0bCA/IHRoaXMuX3J0bFNlcnZpY2UucnRsLmdldFZhbHVlKCkgOiBmYWxzZTtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkgJiYgIXRoaXMuX2lzSW5wdXRGb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbkxpc3QuZmluZCgoXywgaW5kZXgpID0+IGluZGV4ID09PSBmcm9tSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dlZFRva2VuICE9PSB0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBzaGFkb3dlZFRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0b2tlbiAmJiAodG9rZW4uc2VsZWN0ZWQgPSAhdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSAmJiAhcnRsKSB8fCAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSAmJiBydGwpKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd0xlZnQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSAmJiAhcnRsKSB8fCAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpICYmIHJ0bCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQSkgJiYgIXRoaXMuX2dldElucHV0VmFsdWUoKSAmJiB0aGlzLl9pc0NvbnRyb2xLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+ICh0b2tlbi5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXdJbmRleCA9PT0gdGhpcy50b2tlbkxpc3QubGVuZ3RoICYmXG4gICAgICAgICAgICAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgJiYgIXJ0bCkgfHwgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSAmJiBydGwpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCEgPiB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggJiYgdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCEgLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld0luZGV4IHx8IG5ld0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KG5ld0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSAwO1xuICAgICAgICAvLyBnZXQgdGhlIHdpZHRoIG9mIGVhY2ggdG9rZW5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFkZCBpbnB1dCB3aWR0aFxuICAgICAgICBpZiAodGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmVsZW1lbnRSZWYoKSkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5pbnB1dC5lbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIHdpZHRoIG9mIHRoZSBcIl9fX18gbW9yZVwiIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCAmJiB0aGlzLm1vcmVFbGVtZW50ICYmIHRoaXMubW9yZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5tb3JlRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgaW5wdXQgZ3JvdXAgYWRkb25cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgJiYgdGhpcy5pbnB1dEdyb3VwQWRkb25FbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLmlucHV0R3JvdXBBZGRvbkVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9yZUNsaWNrZWRFdmVudC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgYWxsIHNlbGVjdGVkIHRva2VucyAqL1xuICAgIHJlbW92ZVNlbGVjdGVkVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vblJlbW92ZS5lbWl0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dMZWZ0KGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHRoZSBsZWZ0bW9zdCB2aXNpYmxlIHRva2VuIGlzIHNlbGVjdGVkLCBhbmQgdGhlcmUgYXJlIG1vcmVUb2tlbnNMZWZ0LCBuZWVkIHRvIGRpc3BsYXkgYSBtb3JlVG9rZW5MZWZ0XG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWRUb2tlbiA9IHRoaXMubW9yZVRva2Vuc0xlZnQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgdGhhdCBubyBsb25nZXIgZml0XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygncmlnaHQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVBcnJvd1JpZ2h0KGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCAtIDEgJiYgdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWRUb2tlbiA9IHRoaXMubW9yZVRva2Vuc1JpZ2h0LnBvcCgpO1xuICAgICAgICAgICAgaWYgKHBvcHBlZFRva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHBvcHBlZFRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gaGlkZSBhbnkgdG9rZW5zIGZyb20gdGhlIGxlZnQgdGhhdCBubyBsb25nZXIgZml0XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygnbGVmdCcpO1xuXG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxhcHNlVG9rZW5zKHNpZGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdCB8fCB0aGlzLmNvbXBhY3RDb2xsYXBzZSkge1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5mb3JFYWNoKCh2aWV3Q29udGFpbmVyKSA9PiB2aWV3Q29udGFpbmVyLmNsZWFyKCkpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0b2tlbi5fY29udGVudCkpO1xuXG4gICAgICAgICAgICBsZXQgZWxlbWVudFdpZHRoID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgbGV0IGNvbWJpbmVkVG9rZW5XaWR0aCA9IHRoaXMuZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk7IC8vIHRoZSBjb21iaW5lZCB3aWR0aCBvZiBhbGwgdG9rZW5zLCB0aGUgXCJfX19fIG1vcmVcIiB0ZXh0LCBhbmQgdGhlIGlucHV0XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgIFdoZW4gcmVzaXppbmcsIHdlIHdhbnQgdG8gY29sbGFwc2UgdGhlIHRva2VucyBvbiB0aGUgbGVmdCBmaXJzdC4gSG93ZXZlciB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhyb3VnaFxuICAgICAgICAgICAgIGEgZ3JvdXAgb2Ygb3ZlcmZsb3dpbmcgdG9rZW5zIHVzaW5nIHRoZSBhcnJvdyBsZWZ0IGtleSwgd2UgbWF5IG5lZWQgdG8gaGlkZSB0b2tlbnMgb24gdGhlIHJpZ2h0LiBTbyBpZiB0aGlzXG4gICAgICAgICAgICAgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHdpdGggdGhlIHBhcmFtICdyaWdodCcgaXQgd2lsbCBjb2xsYXBzZSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGlzdCByYXRoZXJcbiAgICAgICAgICAgICB0aGFuIHRoZSAoZGVmYXVsdCkgbGVmdCBzaWRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoc2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIGkgPSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNvbWJpbmVkVG9rZW5XaWR0aCA+IGVsZW1lbnRXaWR0aCAmJiAoc2lkZSA9PT0gJ3JpZ2h0JyA/IGkgPj0gMCA6IGkgPCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSB0b2tlbnMgYW5kIGhpZGUgdGhlbSB1bnRpbCB0aGUgY29tYmluZWRUb2tlbldpZHRoIGZpdHMgaW4gdGhlIGVsZW1lbnRXaWR0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbkxpc3QuZmluZCgoaXRlbSwgaW5kZXgpID0+IGluZGV4ID09PSBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3JlVG9rZW5zID0gc2lkZSA9PT0gJ3JpZ2h0JyA/IHRoaXMubW9yZVRva2Vuc1JpZ2h0IDogdGhpcy5tb3JlVG9rZW5zTGVmdDtcblxuICAgICAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9yZVRva2Vucy5pbmRleE9mKHRva2VuKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgbmV3IGVsZW1lbnRXaWR0aCBhbmQgY29tYmluZWRUb2tlbldpZHRoIGFzIHRoZXNlIHdpbGwgaGF2ZSBjaGFuZ2VkIGFmdGVyIHNldHRpbmcgYSB0b2tlbiBkaXNwbGF5IHRvICdub25lJ1xuICAgICAgICAgICAgICAgIGVsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgIHNpZGUgPT09ICdyaWdodCcgPyBpLS0gOiBpKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2hpZGRlblRva2Vucy5mb3JFYWNoKChoaWRkZW5Ub2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Ub2tlbi5fdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGluZGV4KT8uY3JlYXRlRW1iZWRkZWRWaWV3KGhpZGRlblRva2VuLl9jb250ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZXhwYW5kVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21wYWN0IHx8IHRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudFdpZHRoID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgbGV0IGNvbWJpbmVkVG9rZW5XaWR0aCA9IHRoaXMuZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk7IC8vIHRoZSBjb21iaW5lZCB3aWR0aCBvZiBhbGwgdG9rZW5zLCB0aGUgXCJfX19fIG1vcmVcIiB0ZXh0LCBhbmQgdGhlIGlucHV0XG5cbiAgICAgICAgICAgIGxldCBicmVha0xvb3AgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5tb3JlVG9rZW5zTGVmdC5sZW5ndGggLSAxICsgdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGNvbWJpbmVkVG9rZW5XaWR0aCA8IGVsZW1lbnRXaWR0aCAmJiBpID49IDAgJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gZ2V0IHRoZSBmaXJzdCBoaWRkZW4gdG9rZW4gYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBjYW4gZml0IGluIHRoZSB3aG9sZSB0b2tlbml6ZXJcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlblRvQ2hlY2sgPSB0aGlzLnRva2VuTGlzdC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICh0b2tlbikgPT4gdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJ1xuICAgICAgICAgICAgICAgIClbaV07XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgIHNldCBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyBhbmQgdmlzaWJpbGl0eTogJ2hpZGRlbicgLSB0aGlzIHdheSwgdGhlIHRva2VuaXplciB3aWR0aCB3aWxsXG4gICAgICAgICAgICAgICAgICBjb250YWluIHRoZSB3aWR0aCBvZiB0aGUgdG9rZW4gd2UgbWlnaHQgZGlzcGxheSwgd2l0aG91dCBhY3R1YWxseSBtYWtpbmcgdGhlIHRva2VuIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdG9rZW5Ub0NoZWNrLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgICAgICAgICAgdG9rZW5Ub0NoZWNrLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgZWxlbWVudFdpZHRoID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkVG9rZW5XaWR0aCA9IHRoaXMuZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgIGlmIHRoZSB3aWR0aCBvZiB0aGUgaW5uZXIgdG9rZW5pemVyIGNvbXBvbmVudCBpcyBzdGlsbCBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIHRva2VuaXplciBjb21wb25lbnQsIHdlJ2xsXG4gICAgICAgICAgICAgICAgICBtYWtlIHRoZSB0b2tlbiB2aXNpYmxlIGFuZCByZWR1Y2UgdGhlIGhpZGRlbiBjb3VudFxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkVG9rZW5XaWR0aCA8IGVsZW1lbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlblRvQ2hlY2suZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuVG9DaGVjay5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodG9rZW5Ub0NoZWNrLl9jb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVUb2tlbnNMZWZ0LnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JlVG9rZW5zUmlnaHQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHN0b3AgbG9vcGluZyBhbmQgc2V0IHRoZSB0b2tlbidzIGRpc3BsYXkgYmFjayB0byAnbm9uZSdcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5Ub0NoZWNrLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudExlZnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA8IGVsZW1lbnRMZWZ0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUluaXRDb3p5VG9rZW5Db3VudCgpOiB2b2lkIHtcbiAgICAgICAgLy8gYmVjYXVzZSBqdXN0aWZ5LWNvbnRlbnQgYnJlYWtzIHNjcm9sbGJhciwgaXQgY2Fubm90IGJlIHVzZWQgb24gY296eSBzY3JlZW5zLCBzbyB1c2UgSlMgdG8gc2Nyb2xsIHRvIHRoZSBlbmRcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICBpZiAodGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gZG8gdGhpcyBhZ2FpbiBpbiBjYXNlIFwiX19fXyBtb3JlXCIgdGV4dCB3YXMgYWRkZWRcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21ha2VFbGVtZW50VmlzaWJsZShlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQ2xpY2tzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMgJiYgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5wdXRLZXlkb3duRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQuZWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCBubyBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RhcnQgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgZm9yIHNoaWZ0IHNlbGVjdGlvbi4qL1xuICAgIHByaXZhdGUgcmVzZXRGaXJzdEFuZExhc3RFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNldCA9ICF0aGlzLnRva2VuTGlzdC5zb21lKCh0b2tlbikgPT4gdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIHRoZSBzaGlmdCBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfc2hpZnRTZWxlY3RlZChpbmRleCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmICF0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiBpbmRleCA8IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgaW5kZXggPiB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4sIGluZGV4T2ZUb2tlbikgPT4ge1xuICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mVG9rZW4gPj0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mVG9rZW4gPD0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIHRoZSBjb250cm9sIG9yIG1ldGEga2V5IGlzIGJlaW5nIGhlbGQgZG93bi4qL1xuICAgIHByaXZhdGUgX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0b2tlbi5zZWxlY3RlZDtcbiAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChlbGVtZW50LCBpbmRleE9mVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4T2ZUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleE9mVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiEgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24hIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdHJsUHJldmlvdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBHZXQgc2VsZWN0ZWQgYW5kIGZvY3VzZWQgdG9rZW5zICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlVG9rZW5zKCk6IFRva2VuQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkIHx8IHRoaXMuX2lzVG9rZW5Gb2N1c2VkKGl0ZW0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEZvY3VzZWRUb2tlbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC50b0FycmF5KCkuZmluZEluZGV4KCh0b2tlbikgPT4gdGhpcy5faXNUb2tlbkZvY3VzZWQodG9rZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzVG9rZW5Gb2N1c2VkKHRva2VuOiBUb2tlbkNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNJbnB1dEZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0LmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5zb21lKCh0KSA9PiB0LnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldElucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0LmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0NvbnRyb2xLZXkoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5Ym9hcmRFdmVudC5jdHJsS2V5IHx8IGtleWJvYXJkRXZlbnQubWV0YUtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkVsZW1lbnRFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5lbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJywgeyBjYXB0dXJlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAoZXZlbnRbJ3RhcmdldCddIGFzIGFueSk/LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGhpcy50b2tlbml6ZXJGb2N1c2FibGUpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplckhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LCAnYmx1cicsIHsgY2FwdHVyZTogdHJ1ZSB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5pemVySGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtdG9rZW5pemVyIGZkLXRva2VuaXplci0tc2Nyb2xsYWJsZVwiXG4gICAgW2NsYXNzLmlzLWZvY3VzXT1cIl90b2tlbml6ZXJIYXNGb2N1c1wiXG4gICAgW2NsYXNzLmZkLXRva2VuaXplci0tY29tcGFjdF09XCJjb21wYWN0XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdG9rZW5pemVyX19pbm5lclwiICN0b2tlbml6ZXJJbm5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9rZW5cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93T3ZlcmZsb3dQb3BvdmVyICYmIChjb21wYWN0IHx8IGNvbXBhY3RDb2xsYXBzZSk7IGVsc2UgbW9yZUVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2tlbnNPdmVyZmxvd1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtZm9ybS1jb250cm9sXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBmZC1pbnB1dC1ncm91cC1hZGRvbiAqbmdJZj1cImdseXBoXCIgI2lucHV0R3JvdXBBZGRPbiBbY29tcGFjdF09XCJjb21wYWN0XCIgW2J1dHRvbl09XCJ0cnVlXCIgcGxhY2VtZW50PVwiYWZ0ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29tcGFjdCA/ICdmZC10b2tlbml6ZXItYWRkb24tLWNvbXBhY3QnIDogJ2ZkLXRva2VuaXplci1hZGRvbidcIlxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiZ2x5cGhcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b2tlbnNPdmVyZmxvdz5cbiAgICA8ZmQtcG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b20tc3RhcnRcIiB0aXRsZT1cIlwiIFtub0Fycm93XT1cImZhbHNlXCIgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCIgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vcmVFbGVtZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICA8dWwgZmQtbGlzdCBjbGFzcz1cImZkLXRva2VuaXplcl9fb3ZlcmZsb3ctbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3QtaXRlbVwiICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBfaGlkZGVuVG9rZW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI3ZpZXdDb250YWluZXI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRva2VuLnJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdG9rZW5fX2Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRva2VuLmRlbGV0ZUJ1dHRvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2tlbi5jbG9zZUNsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3JlRWxlbWVudD5cbiAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwibW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAobW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCB8fCBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoID4gMCB8fCBoaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApICYmXG4gICAgICAgICAgICAhb3BlbiAmJlxuICAgICAgICAgICAgIV90b2tlbml6ZXJIYXNGb2N1c1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplci1tb3JlXCJcbiAgICAgICAgI21vcmVFbGVtZW50XG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcGFjdCB8fCBjb21wYWN0Q29sbGFwc2VcIlxuICAgICAgICAgICAgPnt7IG1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCArIG1vcmVUb2tlbnNSaWdodC5sZW5ndGggfX0ge3sgbW9yZVRlcm0gfX08L25nLWNvbnRhaW5lclxuICAgICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tcGFjdCAmJiAhY29tcGFjdENvbGxhcHNlXCI+e3sgaGlkZGVuQ296eVRva2VuQ291bnQgfX0ge3sgbW9yZVRlcm0gfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
619
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFJSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxxQkFBcUIsRUFFckIsYUFBYSxFQUNiLFVBQVUsRUFDVixPQUFPLEVBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7O0FBU25ELE1BQU0sT0FBTyxrQkFBa0I7SUFzTTNCLFlBQ1ksV0FBdUIsRUFDWCxzQkFBNkMsRUFDekQsTUFBeUIsRUFDYixXQUF1QixFQUNuQyxTQUFvQjtRQUpwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNYLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDekQsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDYixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBcE1oQyx3REFBd0Q7UUFFeEQsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRWhDLCtDQUErQztRQUUvQyx3QkFBbUIsR0FBRyxXQUFXLENBQUM7UUF1Q2xDLG1FQUFtRTtRQUVuRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV4QixzRkFBc0Y7UUFFdEYsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBVTFCLG1EQUFtRDtRQUVuRCxhQUFRLEdBQUcsTUFBTSxDQUFDO1FBTWxCLHVGQUF1RjtRQUU5RSxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUt2RSxjQUFjO1FBQ2QsbUJBQWMsR0FBMEIsRUFBRSxDQUFDO1FBRTNDLGNBQWM7UUFDZCxvQkFBZSxHQUEwQixFQUFFLENBQUM7UUFRNUMsY0FBYztRQUNkLGdDQUEyQixHQUFtQixFQUFFLENBQUM7UUFFakQsY0FBYztRQUNkLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQUV6QixxREFBcUQ7UUFDckQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLGNBQWM7UUFDZCx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFNUIsY0FBYztRQUNOLGdDQUEyQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsY0FBYztRQUNkLG1GQUFtRjtRQUMzRSw2QkFBd0IsR0FBa0IsSUFBSSxDQUFDO1FBRXZELGNBQWM7UUFDZCxrRkFBa0Y7UUFDMUUsNEJBQXVCLEdBQWtCLElBQUksQ0FBQztRQU10RCxjQUFjO1FBQ2QsdUZBQXVGO1FBQy9FLDJCQUFzQixHQUFtQixJQUFJLENBQUM7UUFFdEQsMkZBQTJGO1FBQzFFLGdCQUFXLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUE4RTlELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzdCLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBckxELGNBQWM7SUFDZCxJQUFrQyxPQUFPLENBQUMsT0FBbUI7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBTUQsY0FBYztJQUNkLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQXNGRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMscUZBQXFGO1FBQ3JGLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ25DLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FDakMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM5QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDekYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ25DLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDM0QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQXVCRCxBQUpBOzs7T0FHRztJQUNILHNCQUFzQjtRQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO0lBQ2QsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQ2pDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ25DLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNwQztxQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDckM7cUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUN2QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDOUI7WUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLFFBQWdCO1FBQzlCLElBQUksY0FBdUMsQ0FBQztRQUM1QyxNQUFNLGNBQWMsR0FBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixjQUFjLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztZQUM1RSxnREFBZ0Q7WUFDaEQsY0FBZSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsY0FBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkQ7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztJQUNkLG1CQUFtQixDQUFDLE9BQW9CLEVBQUUsUUFBZ0I7UUFDdEQsdUdBQXVHO1FBQ3ZHLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEVBQVEsRUFBRTtZQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUM3RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxPQUFPLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUVkLE9BQU8sQ0FBQyxhQUE0QjtRQUNoQyxJQUNJLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25ELENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUMvQjtZQUNFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN2RCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDthQUNKO1NBQ0o7UUFFRCxJQUNJLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN0QixDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFDL0I7WUFDRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUVkLFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbEYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWEsQ0FBQyxLQUFvQixFQUFFLFNBQWlCO1FBQ2pELElBQUksUUFBNEIsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9GLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxhQUFhLEtBQUssS0FBSyxFQUFFO29CQUN6QixhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztpQkFDbEM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEI7YUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ3pHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxRQUFRLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUM1QjthQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDekcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLFFBQVEsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO2FBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxJQUNJLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07WUFDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUNwRztZQUNFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksUUFBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUNsRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QscUJBQXFCO1FBQ2pCLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN4Qiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3QixlQUFlLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3JHLENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0JBQWtCO1FBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZDLGVBQWUsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDM0c7UUFDRCwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUN0RixlQUFlLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1NBQ3BHO1FBQ0QsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUU7WUFDaEUsZUFBZSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1NBQzFHO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsb0JBQW9CO1FBQ2hCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDakQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGNBQWM7SUFDTixnQkFBZ0IsQ0FBQyxTQUFpQjtRQUN0QywyR0FBMkc7UUFDM0csSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QyxJQUFJLFdBQVcsRUFBRTtnQkFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04saUJBQWlCLENBQUMsU0FBaUI7UUFDdkMsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3RHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDL0MsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNwRDtZQUNELDREQUE0RDtZQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTdCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLGVBQWUsQ0FBQyxJQUFhO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRTNGLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hGLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyx3RUFBd0U7WUFDL0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1Y7Ozs7O2VBS0c7WUFDSCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDakM7WUFDRCxPQUFPLGtCQUFrQixHQUFHLFlBQVksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRyw4RkFBOEY7Z0JBQzlGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUVqRixJQUFJLEtBQUssRUFBRTtvQkFDUCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQzFCO29CQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2lCQUN6RDtnQkFDRCxxSEFBcUg7Z0JBQ3JILFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDNUUsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2xELElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzlDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RSxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sWUFBWTtRQUNoQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNILElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3BELENBQUM7SUFFRCxjQUFjO0lBQ04sd0JBQXdCO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2hGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3QixJQUNJLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQ3pCLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxFQUNyRjtnQkFDRSxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjO0lBQ04seUJBQXlCO1FBQzdCLDhHQUE4RztRQUM5RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUNqRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7WUFDL0IsMkRBQTJEO1lBQzNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ2pHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixtQkFBbUIsQ0FBQyxVQUFzQjtRQUM5QyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQ3hELFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDMUQsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFO1lBQzdFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDdEQsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEdBQTBHO0lBQ2xHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSztRQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3JDLElBQUksYUFBYSxLQUFLLEtBQUssRUFBRTtnQkFDekIsYUFBYSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7YUFDbEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsa0VBQWtFO0lBQzFELHdCQUF3QjtRQUM1QixNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBQ0QsaUhBQWlIO0lBQ3pHLGNBQWMsQ0FBQyxLQUFLO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDakUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7U0FDdEM7YUFBTTtZQUNILElBQUksSUFBSSxDQUFDLHdCQUF3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ3hFLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO29CQUM3QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2lCQUNoRTtnQkFDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO2FBQ3pDO2lCQUFNLElBQUksSUFBSSxDQUFDLHVCQUF1QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7b0JBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7aUJBQ2hFO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7YUFDeEM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUM5QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO2FBQ3pDO2lCQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUNwQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO2FBQ3hDO1NBQ0o7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRTtZQUMzQyxLQUFLLENBQUMsUUFBUTtnQkFDVixJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSTtvQkFDckMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUk7b0JBQ3BDLFlBQVksSUFBSSxJQUFJLENBQUMsd0JBQXdCO29CQUM3QyxZQUFZLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELDJIQUEySDtJQUNuSCxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDOUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDaEMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxRQUFRLEVBQUU7WUFDVixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtvQkFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO3dCQUNsQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsWUFBWSxDQUFDO3FCQUNoRDtpQkFDSjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsWUFBWSxDQUFDO2lCQUMvQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUN4QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF3QixHQUFHLENBQUMsQ0FBQzthQUNwRTtZQUNELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtnQkFDekMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBeUIsR0FBRyxDQUFDLENBQUM7YUFDdEU7U0FDSjtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxzQ0FBc0M7SUFDOUIsZ0JBQWdCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxjQUFjO0lBQ04scUJBQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsY0FBYztJQUNOLGVBQWUsQ0FBQyxLQUFxQjtRQUN6QyxPQUFPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUM5RSxDQUFDO0lBRUQsY0FBYztJQUNOLGVBQWU7UUFDbkIsT0FBTyxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQzVFLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWM7SUFDTixjQUFjO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxjQUFjO0lBQ04sV0FBVztRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxjQUFjO0lBQ04sYUFBYSxDQUFDLGFBQTRCO1FBQzlDLE9BQU8sYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQzFELENBQUM7SUFFRCxjQUFjO0lBQ04sb0JBQW9CO1FBQ3hCLFNBQVMsQ0FBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN4RSxJQUFJLENBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBRSxLQUFLLENBQUMsUUFBUSxDQUFTLEVBQUUsT0FBTyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFDM0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM5QjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNoRSxJQUFJLENBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM5QjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7OytHQW5xQlEsa0JBQWtCO21HQUFsQixrQkFBa0IsK2lCQW9CSSxvQkFBb0Isc0dBSmpCLGNBQWMsK1lBcUJULGdCQUFnQixrRENuRjNELGtvRkFvRUE7QURxTUk7SUFMQyxhQUFhOzs7O2dFQU9iOzJGQTdOUSxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0ksY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzswQkEwTTFDLFFBQVE7OzBCQUVSLFFBQVE7b0VBck1iLEtBQUs7c0JBREosS0FBSztnQkFLTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUtqRCxLQUFLO3NCQURKLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2dCQUtwRCxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUlVLE9BQU87c0JBQXhDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQU1uQixjQUFjO3NCQUR0QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFhekQsT0FBTztzQkFETixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtHLGdCQUFnQjtzQkFEeEIsTUFBTTs7UUEwSVA7OztXQUdHO1FBQ0gsc0JBQXNCLE1BNkR0QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQStCbkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBLCBCQUNLU1BBQ0UsIERFTEVURSwgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgUnRsU2VydmljZSxcbiAgICBLZXlVdGlsXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBUb2tlbkNvbXBvbmVudCB9IGZyb20gJy4vdG9rZW4uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10b2tlbml6ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rva2VuaXplci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVG9rZW5pemVyQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENzc0NsYXNzQnVpbGRlciwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogdXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIERpc2FibGVzIHBvc3NpYmlsaXR5IHRvIHJlbW92ZSB0b2tlbnMgYnkga2V5Ym9hcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVLZXlib2FyZERlbGV0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogcm9sZSBkZXNjcmlwdGlvbiBmb3IgdG9rZW5pemVyIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVJvbGVEZXNjcmlwdGlvbiA9ICd0b2tlbml6ZXInO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVG9rZW5Db21wb25lbnQpKVxuICAgIHRva2VuTGlzdDogUXVlcnlMaXN0PFRva2VuQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IEZvcm1Db250cm9sQ29tcG9uZW50KSlcbiAgICBpbnB1dDogRm9ybUNvbnRyb2xDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3Rva2VuaXplcklubmVyJylcbiAgICB0b2tlbml6ZXJJbm5lckVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtb3JlRWxlbWVudCcpXG4gICAgbW9yZUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBBZGRPbicpIHNldCBjb250ZW50KGNvbnRlbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwQWRkb25FbCA9IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCd2aWV3Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcmVhZG9ubHkgX3ZpZXdDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9oaWRkZW5Ub2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlucHV0R3JvdXBBZGRvbkVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRva2VuaXplciBpcyBjb21wYWN0ICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0PzogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBjb3p5IHZpc3VhbHMgYnV0IGNvbXBhY3QgY29sbGFwc2luZyBiZWhhdmlvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3RDb2xsYXBzZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG9rZW5pemVyIHNob3VsZCBoYXZlIGZha2UgZm9jdXMgaW5kaWNhdG9yLCB3aGVuIGlucHV0IGlzIGZvY3VzZWQgaW5zaWRlKi9cbiAgICBASW5wdXQoKVxuICAgIHRva2VuaXplckZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogVGhlIHZhbHVlIGZvciB0aGUgdG9rZW5pemVyIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBvZiB0aGUgYnV0dG9uIG9uIHRoZSByaWdodCBvZiB0aGUgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaDogc3RyaW5nO1xuXG4gICAgLyoqIFdvcmQgdG8gdXNlIGZvciB3aGVuIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMuICovXG4gICAgQElucHV0KClcbiAgICBtb3JlVGVybSA9ICdtb3JlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuOiBib29sZWFuO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VhcmNoIHRlcm0gY2hhbmdlcy4gVXNlICokZXZlbnQqIHRvIGFjY2VzcyB0aGUgbmV3IHRlcm0uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9yZUNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNFbGVtZW50V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc0xlZnQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlVG9rZW5zUmlnaHQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcmV2aW91c1Rva2VuQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhpZGRlbkNvenlUb2tlbkNvdW50ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gYWRkIGZvY3VzIHRvIHRva2VuaXplciBlbGVtZW50ICovXG4gICAgX3Rva2VuaXplckhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93T3ZlcmZsb3dQb3BvdmVyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29udGVudERlbnNpdHlTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8qIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplciovXG4gICAgcHJpdmF0ZSBfZmlyc3RFbGVtZW50SW5TZWxlY3Rpb246IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICAvKiBWYXJpYWJsZSB3aGljaCB3aWxsIGtlZXAgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplciovXG4gICAgcHJpdmF0ZSBfbGFzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8qIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhlIGxhc3Qga2V5Ym9hcmQgYW5kIGNsaWNrIG9wZXJhdGlvbiB0aGV5IHVzZWQgd2FzIHVzaW5nIGNvbnRyb2wqL1xuICAgIHByaXZhdGUgX2N0cmxQcmV2aW91czogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgLyogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGV5IGhlbGQgc2hpZnQgYW5kIGNsaWNrZWQgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIGJlZm9yZSBvciovXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uU2hpZnRJc1JpZ2h0OiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZykgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5lbGVtZW50UmVmKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0S2V5ZG93bkV2ZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Db3VudCA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSB0b2tlbkxpc3QgYW5kIGF0dGVtcHQgdG8gZXhwYW5kL2NvbGxhcHNlIHRva2VucyBhcyBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50b2tlbkxpc3QuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uQ2xvc2VDbGljay5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVJbml0Q296eVRva2VuQ291bnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5FbGVtZW50RXZlbnRzKCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNFbGVtZW50V2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3RDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNsaWNrcygpO1xuICAgICAgICB0aGlzLl9jb250ZW50RGVuc2l0eVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jb250ZW50RGVuc2l0eVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5U3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50RGVuc2l0eVNlcnZpY2UuX2lzQ29tcGFjdERlbnNpdHkuc3Vic2NyaWJlKChpc0NvbXBhY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wYWN0ID0gaXNDb21wYWN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcbiAgICApIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIC8qKiBDc3NDbGFzc0J1aWxkZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogZnVuY3Rpb24gbXVzdCByZXR1cm4gc2luZ2xlIHN0cmluZ1xuICAgICAqIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBvcmRlciB3aGljaCBjc3MgY2xhc3NlcyBhcmUgYXBwbGllZFxuICAgICAqL1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW3RoaXMuY2xhc3NdO1xuICAgIH1cblxuICAgIGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlVG9rZW5DbGlja1N1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQ2xpY2tzKCk7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0b2tlbi5vblRva2VuQ2xpY2suc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0NvbnRyb2xLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdHJsU2VsZWN0ZWQodG9rZW4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZXZlbnQuc2hpZnRLZXkgfHwgdGhpcy5fY3RybFByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYXNpY1NlbGVjdGVkKHRva2VuLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGaXJzdEFuZExhc3RFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGlmdFNlbGVjdGVkKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGZvY3VzVG9rZW5FbGVtZW50KG5ld0luZGV4OiBudW1iZXIpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHRva2VuTGlzdEFycmF5OiBUb2tlbkNvbXBvbmVudFtdID0gdGhpcy50b2tlbkxpc3QudG9BcnJheSgpO1xuICAgICAgICBpZiAodG9rZW5MaXN0QXJyYXlbbmV3SW5kZXhdKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRva2VuTGlzdEFycmF5W25ld0luZGV4XS50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAvLyBlbGVtZW50IG5lZWRzIHRhYmluZGV4IGluIG9yZGVyIHRvIGJlIGZvY3VzZWRcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzIS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzIS5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5hZGRLZXlib2FyZExpc3RlbmVyKGVsZW1lbnRUb0ZvY3VzISwgbmV3SW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRUb0ZvY3VzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYWRkS2V5Ym9hcmRMaXN0ZW5lcihlbGVtZW50OiBIVE1MRWxlbWVudCwgbmV3SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBmdW5jdGlvbiBuZWVkcyB0byBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGJlIHJlZmVyZW5jZWQgbGF0ZXIgYnkgYWRkRXZlbnRMaXN0ZW5lci9yZW1vdmVFdmVudExpc3RlbmVyXG4gICAgICAgIGNvbnN0IGhhbmRsZUZ1bmN0aW9uUmVmZXJlbmNlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdJbmRleCB8fCBuZXdJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5RG93bihlLCBuZXdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUZ1bmN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVGdW5jdGlvblJlZmVyZW5jZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAga2V5RG93bihrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIFtERUxFVEUsIEJBQ0tTUEFDRV0pICYmXG4gICAgICAgICAgICAoIXRoaXMuX2lzSW5wdXRGb2N1c2VkKCkgfHwgdGhpcy5fdG9rZW5zU2VsZWN0ZWQoKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmRpc2FibGVLZXlib2FyZERlbGV0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuX2dldEFjdGl2ZVRva2VucygpO1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZFRva2VuSW5kZXggPSB0aGlzLl9nZXRGb2N1c2VkVG9rZW5JbmRleCgpO1xuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiBlbGVtZW50Lm9uQ2xvc2VDbGljay5lbWl0KCkpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBERUxFVEUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KGZvY3VzZWRUb2tlbkluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgQkFDS1NQQUNFKSAmJlxuICAgICAgICAgICAgdGhpcy5faXNJbnB1dEZvY3VzZWQoKSAmJlxuICAgICAgICAgICAgIXRoaXMuX2dldElucHV0VmFsdWUoKSAmJlxuICAgICAgICAgICAgIXRoaXMuZGlzYWJsZUtleWJvYXJkRGVsZXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXG4gICAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCA9IGVsZW1lbnRXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJ0bCA9IHRoaXMuX3J0bFNlcnZpY2UgJiYgdGhpcy5fcnRsU2VydmljZS5ydGwgPyB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5nZXRWYWx1ZSgpIDogZmFsc2U7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpICYmICF0aGlzLl9pc0lucHV0Rm9jdXNlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmZpbmQoKF8sIGluZGV4KSA9PiBpbmRleCA9PT0gZnJvbUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHNoYWRvd2VkVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2hhZG93ZWRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG9rZW4gJiYgKHRva2VuLnNlbGVjdGVkID0gIXRva2VuLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgJiYgIXJ0bCkgfHwgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgJiYgcnRsKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQXJyb3dMZWZ0KGZyb21JbmRleCk7XG4gICAgICAgICAgICBuZXdJbmRleCA9IGZyb21JbmRleCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgJiYgIXJ0bCkgfHwgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSAmJiBydGwpKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd1JpZ2h0KGZyb21JbmRleCk7XG4gICAgICAgICAgICBuZXdJbmRleCA9IGZyb21JbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEEpICYmICF0aGlzLl9nZXRJbnB1dFZhbHVlKCkgJiYgdGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiAodG9rZW4uc2VsZWN0ZWQgPSB0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmV3SW5kZXggPT09IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgKChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpICYmICFydGwpIHx8IChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgJiYgcnRsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3SW5kZXghID4gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoICYmIHRoaXMuX2lzSW5wdXRGb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXghIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCB8fCBuZXdJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldENvbWJpbmVkVG9rZW5XaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgdG90YWxUb2tlbldpZHRoID0gMDtcbiAgICAgICAgLy8gZ2V0IHRoZSB3aWR0aCBvZiBlYWNoIHRva2VuXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhZGQgaW5wdXQgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5lbGVtZW50UmVmKCkpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMuaW5wdXQuZWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIHRoZSB3aWR0aCBvZiB0aGUgXCJfX19fIG1vcmVcIiBlbGVtZW50XG4gICAgICAgIGlmICh0aGlzLm1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCA+IDAgJiYgdGhpcy5tb3JlRWxlbWVudCAmJiB0aGlzLm1vcmVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMubW9yZUVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIGlucHV0IGdyb3VwIGFkZG9uXG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXBBZGRvbkVsICYmIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5pbnB1dEdyb3VwQWRkb25FbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsVG9rZW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG1vcmVDbGlja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vcmVDbGlja2VkRXZlbnQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmVzIGFsbCBzZWxlY3RlZCB0b2tlbnMgKi9cbiAgICByZW1vdmVTZWxlY3RlZFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuX2dldEFjdGl2ZVRva2VucygpO1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQub25SZW1vdmUuZW1pdCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUFycm93TGVmdChmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBpZiB0aGUgbGVmdG1vc3QgdmlzaWJsZSB0b2tlbiBpcyBzZWxlY3RlZCwgYW5kIHRoZXJlIGFyZSBtb3JlVG9rZW5zTGVmdCwgbmVlZCB0byBkaXNwbGF5IGEgbW9yZVRva2VuTGVmdFxuICAgICAgICBpZiAoZnJvbUluZGV4ID09PSB0aGlzLm1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9wcGVkVG9rZW4gPSB0aGlzLm1vcmVUb2tlbnNMZWZ0LnBvcCgpO1xuICAgICAgICAgICAgaWYgKHBvcHBlZFRva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHBvcHBlZFRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gaGlkZSBhbnkgdG9rZW5zIGZyb20gdGhlIHJpZ2h0IHRoYXQgbm8gbG9uZ2VyIGZpdFxuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dSaWdodChmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoZnJvbUluZGV4ID09PSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggLSAxICYmIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9wcGVkVG9rZW4gPSB0aGlzLm1vcmVUb2tlbnNSaWdodC5wb3AoKTtcbiAgICAgICAgICAgIGlmIChwb3BwZWRUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZShwb3BwZWRUb2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFuZCB0aGVuIGhpZGUgYW55IHRva2VucyBmcm9tIHRoZSBsZWZ0IHRoYXQgbm8gbG9uZ2VyIGZpdFxuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoJ2xlZnQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsYXBzZVRva2VucyhzaWRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3QgfHwgdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZm9yRWFjaCgodmlld0NvbnRhaW5lcikgPT4gdmlld0NvbnRhaW5lci5jbGVhcigpKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodG9rZW4uX2NvbnRlbnQpKTtcblxuICAgICAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIGxldCBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpOyAvLyB0aGUgY29tYmluZWQgd2lkdGggb2YgYWxsIHRva2VucywgdGhlIFwiX19fXyBtb3JlXCIgdGV4dCwgYW5kIHRoZSBpbnB1dFxuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICBXaGVuIHJlc2l6aW5nLCB3ZSB3YW50IHRvIGNvbGxhcHNlIHRoZSB0b2tlbnMgb24gdGhlIGxlZnQgZmlyc3QuIEhvd2V2ZXIgd2hlbiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHRocm91Z2hcbiAgICAgICAgICAgICBhIGdyb3VwIG9mIG92ZXJmbG93aW5nIHRva2VucyB1c2luZyB0aGUgYXJyb3cgbGVmdCBrZXksIHdlIG1heSBuZWVkIHRvIGhpZGUgdG9rZW5zIG9uIHRoZSByaWdodC4gU28gaWYgdGhpc1xuICAgICAgICAgICAgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCB3aXRoIHRoZSBwYXJhbSAncmlnaHQnIGl0IHdpbGwgY29sbGFwc2UgdG9rZW5zIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxpc3QgcmF0aGVyXG4gICAgICAgICAgICAgdGhhbiB0aGUgKGRlZmF1bHQpIGxlZnQgc2lkZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICBpID0gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjb21iaW5lZFRva2VuV2lkdGggPiBlbGVtZW50V2lkdGggJiYgKHNpZGUgPT09ICdyaWdodCcgPyBpID49IDAgOiBpIDwgdGhpcy50b2tlbkxpc3QubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgdG9rZW5zIGFuZCBoaWRlIHRoZW0gdW50aWwgdGhlIGNvbWJpbmVkVG9rZW5XaWR0aCBmaXRzIGluIHRoZSBlbGVtZW50V2lkdGhcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmZpbmQoKGl0ZW0sIGluZGV4KSA9PiBpbmRleCA9PT0gaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9yZVRva2VucyA9IHNpZGUgPT09ICdyaWdodCcgPyB0aGlzLm1vcmVUb2tlbnNSaWdodCA6IHRoaXMubW9yZVRva2Vuc0xlZnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vcmVUb2tlbnMuaW5kZXhPZih0b2tlbikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG5ldyBlbGVtZW50V2lkdGggYW5kIGNvbWJpbmVkVG9rZW5XaWR0aCBhcyB0aGVzZSB3aWxsIGhhdmUgY2hhbmdlZCBhZnRlciBzZXR0aW5nIGEgdG9rZW4gZGlzcGxheSB0byAnbm9uZSdcbiAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAgICAgY29tYmluZWRUb2tlbldpZHRoID0gdGhpcy5nZXRDb21iaW5lZFRva2VuV2lkdGgoKTtcbiAgICAgICAgICAgICAgICBzaWRlID09PSAncmlnaHQnID8gaS0tIDogaSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9oaWRkZW5Ub2tlbnMuZm9yRWFjaCgoaGlkZGVuVG9rZW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaGlkZGVuVG9rZW4uX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmdldChpbmRleCk/LmNyZWF0ZUVtYmVkZGVkVmlldyhoaWRkZW5Ub2tlbi5fY29udGVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0VG9rZW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNMZWZ0ID0gW107XG4gICAgICAgIHRoaXMubW9yZVRva2Vuc1JpZ2h0ID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3QgfHwgdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlVG9rZW5DbGlja1N1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1Rva2VuQ291bnQgPSB0aGlzLnRva2VuTGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudExlZnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA8IGVsZW1lbnRMZWZ0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUluaXRDb3p5VG9rZW5Db3VudCgpOiB2b2lkIHtcbiAgICAgICAgLy8gYmVjYXVzZSBqdXN0aWZ5LWNvbnRlbnQgYnJlYWtzIHNjcm9sbGJhciwgaXQgY2Fubm90IGJlIHVzZWQgb24gY296eSBzY3JlZW5zLCBzbyB1c2UgSlMgdG8gc2Nyb2xsIHRvIHRoZSBlbmRcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICBpZiAodGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gZG8gdGhpcyBhZ2FpbiBpbiBjYXNlIFwiX19fXyBtb3JlXCIgdGV4dCB3YXMgYWRkZWRcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21ha2VFbGVtZW50VmlzaWJsZShlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQ2xpY2tzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMgJiYgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5wdXRLZXlkb3duRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXQuZWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCBubyBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RhcnQgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgZm9yIHNoaWZ0IHNlbGVjdGlvbi4qL1xuICAgIHByaXZhdGUgcmVzZXRGaXJzdEFuZExhc3RFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNldCA9ICF0aGlzLnRva2VuTGlzdC5zb21lKCh0b2tlbikgPT4gdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIHRoZSBzaGlmdCBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfc2hpZnRTZWxlY3RlZChpbmRleCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmICF0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiBpbmRleCA8IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgaW5kZXggPiB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4sIGluZGV4T2ZUb2tlbikgPT4ge1xuICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mVG9rZW4gPj0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mVG9rZW4gPD0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIHRoZSBjb250cm9sIG9yIG1ldGEga2V5IGlzIGJlaW5nIGhlbGQgZG93bi4qL1xuICAgIHByaXZhdGUgX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0b2tlbi5zZWxlY3RlZDtcbiAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChlbGVtZW50LCBpbmRleE9mVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4T2ZUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleE9mVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiEgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24hIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdHJsUHJldmlvdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBHZXQgc2VsZWN0ZWQgYW5kIGZvY3VzZWQgdG9rZW5zICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlVG9rZW5zKCk6IFRva2VuQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkIHx8IHRoaXMuX2lzVG9rZW5Gb2N1c2VkKGl0ZW0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEZvY3VzZWRUb2tlbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC50b0FycmF5KCkuZmluZEluZGV4KCh0b2tlbikgPT4gdGhpcy5faXNUb2tlbkZvY3VzZWQodG9rZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzVG9rZW5Gb2N1c2VkKHRva2VuOiBUb2tlbkNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNJbnB1dEZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0LmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5zb21lKCh0KSA9PiB0LnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldElucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0LmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0NvbnRyb2xLZXkoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5Ym9hcmRFdmVudC5jdHJsS2V5IHx8IGtleWJvYXJkRXZlbnQubWV0YUtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkVsZW1lbnRFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5lbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJywgeyBjYXB0dXJlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAoZXZlbnRbJ3RhcmdldCddIGFzIGFueSk/LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGhpcy50b2tlbml6ZXJGb2N1c2FibGUpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplckhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LCAnYmx1cicsIHsgY2FwdHVyZTogdHJ1ZSB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5pemVySGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtdG9rZW5pemVyIGZkLXRva2VuaXplci0tc2Nyb2xsYWJsZVwiXG4gICAgW2NsYXNzLmlzLWZvY3VzXT1cIl90b2tlbml6ZXJIYXNGb2N1c1wiXG4gICAgW2NsYXNzLmZkLXRva2VuaXplci0tY29tcGFjdF09XCJjb21wYWN0XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdG9rZW5pemVyX19pbm5lclwiICN0b2tlbml6ZXJJbm5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9rZW5cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93T3ZlcmZsb3dQb3BvdmVyICYmIChjb21wYWN0IHx8IGNvbXBhY3RDb2xsYXBzZSk7IGVsc2UgbW9yZUVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2tlbnNPdmVyZmxvd1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtZm9ybS1jb250cm9sXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBmZC1pbnB1dC1ncm91cC1hZGRvbiAqbmdJZj1cImdseXBoXCIgI2lucHV0R3JvdXBBZGRPbiBbY29tcGFjdF09XCJjb21wYWN0XCIgW2J1dHRvbl09XCJ0cnVlXCIgcGxhY2VtZW50PVwiYWZ0ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29tcGFjdCA/ICdmZC10b2tlbml6ZXItYWRkb24tLWNvbXBhY3QnIDogJ2ZkLXRva2VuaXplci1hZGRvbidcIlxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiZ2x5cGhcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b2tlbnNPdmVyZmxvdz5cbiAgICA8ZmQtcG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b20tc3RhcnRcIiB0aXRsZT1cIlwiIFtub0Fycm93XT1cImZhbHNlXCIgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCIgW2ZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vcmVFbGVtZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgICAgICA8dWwgZmQtbGlzdCBjbGFzcz1cImZkLXRva2VuaXplcl9fb3ZlcmZsb3ctbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3QtaXRlbVwiICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBfaGlkZGVuVG9rZW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI3ZpZXdDb250YWluZXI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRva2VuLnJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdG9rZW5fX2Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRva2VuLmRlbGV0ZUJ1dHRvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2tlbi5jbG9zZUNsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3JlRWxlbWVudD5cbiAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwibW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAobW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCB8fCBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoID4gMCB8fCBoaWRkZW5Db3p5VG9rZW5Db3VudCA+IDApICYmXG4gICAgICAgICAgICAhb3BlbiAmJlxuICAgICAgICAgICAgIV90b2tlbml6ZXJIYXNGb2N1c1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplci1tb3JlXCJcbiAgICAgICAgI21vcmVFbGVtZW50XG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcGFjdCB8fCBjb21wYWN0Q29sbGFwc2VcIlxuICAgICAgICAgICAgPnt7IG1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCArIG1vcmVUb2tlbnNSaWdodC5sZW5ndGggfX0ge3sgbW9yZVRlcm0gfX08L25nLWNvbnRhaW5lclxuICAgICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tcGFjdCAmJiAhY29tcGFjdENvbGxhcHNlXCI+e3sgaGlkZGVuQ296eVRva2VuQ291bnQgfX0ge3sgbW9yZVRlcm0gfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/facets",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/feed-input",
3
- "version": "0.35.0-rc.21",
3
+ "version": "0.35.0-rc.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"