primeng 18.0.3-lts → 18.0.5-lts

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/datepicker/datepicker.d.ts +1 -1
  2. package/esm2022/api/licensemanager.mjs +2 -2
  3. package/esm2022/autocomplete/style/autocompletestyle.mjs +19 -6
  4. package/esm2022/button/button.mjs +11 -43
  5. package/esm2022/calendar/calendar.mjs +4 -4
  6. package/esm2022/confirmdialog/confirmdialog.mjs +34 -41
  7. package/esm2022/dataview/dataview.mjs +10 -35
  8. package/esm2022/datepicker/datepicker.mjs +60 -44
  9. package/esm2022/datepicker/style/datepickerstyle.mjs +14 -1
  10. package/esm2022/dialog/dialog.mjs +98 -108
  11. package/esm2022/drawer/drawer.mjs +2 -2
  12. package/esm2022/fieldset/style/fieldsetstyle.mjs +2 -1
  13. package/esm2022/iftalabel/style/iftalabelstyle.mjs +10 -4
  14. package/esm2022/inputnumber/style/inputnumberstyle.mjs +10 -1
  15. package/esm2022/multiselect/multiselect.mjs +20 -75
  16. package/esm2022/password/style/passwordstyle.mjs +2 -1
  17. package/esm2022/picklist/picklist.mjs +3 -1
  18. package/esm2022/splitter/splitter.mjs +3 -3
  19. package/esm2022/stepper/stepper.mjs +29 -57
  20. package/esm2022/table/table.interface.mjs +1 -1
  21. package/esm2022/table/table.mjs +81 -450
  22. package/esm2022/tree/tree.mjs +18 -88
  23. package/fesm2022/primeng-accordion.mjs +2 -2
  24. package/fesm2022/primeng-animateonscroll.mjs +1 -1
  25. package/fesm2022/primeng-api.mjs +2 -2
  26. package/fesm2022/primeng-api.mjs.map +1 -1
  27. package/fesm2022/primeng-autocomplete.mjs +20 -7
  28. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  29. package/fesm2022/primeng-avatar.mjs +1 -1
  30. package/fesm2022/primeng-avatargroup.mjs +1 -1
  31. package/fesm2022/primeng-badge.mjs +2 -2
  32. package/fesm2022/primeng-blockui.mjs +2 -2
  33. package/fesm2022/primeng-breadcrumb.mjs +2 -2
  34. package/fesm2022/primeng-button.mjs +12 -44
  35. package/fesm2022/primeng-button.mjs.map +1 -1
  36. package/fesm2022/primeng-buttongroup.mjs +1 -1
  37. package/fesm2022/primeng-calendar.mjs +6 -6
  38. package/fesm2022/primeng-calendar.mjs.map +1 -1
  39. package/fesm2022/primeng-card.mjs +2 -2
  40. package/fesm2022/primeng-carousel.mjs +2 -2
  41. package/fesm2022/primeng-cascadeselect.mjs +1 -1
  42. package/fesm2022/primeng-chart.mjs +1 -1
  43. package/fesm2022/primeng-checkbox.mjs +2 -2
  44. package/fesm2022/primeng-chip.mjs +2 -2
  45. package/fesm2022/primeng-colorpicker.mjs +1 -1
  46. package/fesm2022/primeng-confirmdialog.mjs +35 -42
  47. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  48. package/fesm2022/primeng-confirmpopup.mjs +3 -3
  49. package/fesm2022/primeng-contextmenu.mjs +1 -1
  50. package/fesm2022/primeng-dataview.mjs +11 -36
  51. package/fesm2022/primeng-dataview.mjs.map +1 -1
  52. package/fesm2022/primeng-datepicker.mjs +75 -46
  53. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  54. package/fesm2022/primeng-defer.mjs +1 -1
  55. package/fesm2022/primeng-dialog.mjs +99 -109
  56. package/fesm2022/primeng-dialog.mjs.map +1 -1
  57. package/fesm2022/primeng-divider.mjs +1 -1
  58. package/fesm2022/primeng-dock.mjs +2 -2
  59. package/fesm2022/primeng-dragdrop.mjs +1 -1
  60. package/fesm2022/primeng-drawer.mjs +3 -3
  61. package/fesm2022/primeng-drawer.mjs.map +1 -1
  62. package/fesm2022/primeng-dropdown.mjs +1 -1
  63. package/fesm2022/primeng-dynamicdialog.mjs +1 -1
  64. package/fesm2022/primeng-editor.mjs +2 -2
  65. package/fesm2022/primeng-fieldset.mjs +4 -3
  66. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  67. package/fesm2022/primeng-fileupload.mjs +2 -2
  68. package/fesm2022/primeng-floatlabel.mjs +1 -1
  69. package/fesm2022/primeng-fluid.mjs +1 -1
  70. package/fesm2022/primeng-galleria.mjs +1 -1
  71. package/fesm2022/primeng-iconfield.mjs +1 -1
  72. package/fesm2022/primeng-icons-baseicon.mjs +1 -1
  73. package/fesm2022/primeng-iftalabel.mjs +10 -4
  74. package/fesm2022/primeng-iftalabel.mjs.map +1 -1
  75. package/fesm2022/primeng-image.mjs +2 -2
  76. package/fesm2022/primeng-imagecompare.mjs +2 -2
  77. package/fesm2022/primeng-inplace.mjs +2 -2
  78. package/fesm2022/primeng-inputgroupaddon.mjs +1 -1
  79. package/fesm2022/primeng-inputicon.mjs +1 -1
  80. package/fesm2022/primeng-inputmask.mjs +2 -2
  81. package/fesm2022/primeng-inputnumber.mjs +11 -2
  82. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  83. package/fesm2022/primeng-inputotp.mjs +2 -2
  84. package/fesm2022/primeng-inputswitch.mjs +1 -1
  85. package/fesm2022/primeng-inputtext.mjs +1 -1
  86. package/fesm2022/primeng-inputtextarea.mjs +1 -1
  87. package/fesm2022/primeng-keyfilter.mjs +1 -1
  88. package/fesm2022/primeng-knob.mjs +1 -1
  89. package/fesm2022/primeng-listbox.mjs +2 -2
  90. package/fesm2022/primeng-megamenu.mjs +1 -1
  91. package/fesm2022/primeng-menu.mjs +1 -1
  92. package/fesm2022/primeng-menubar.mjs +1 -1
  93. package/fesm2022/primeng-message.mjs +2 -2
  94. package/fesm2022/primeng-messages.mjs +1 -1
  95. package/fesm2022/primeng-metergroup.mjs +1 -1
  96. package/fesm2022/primeng-multiselect.mjs +20 -75
  97. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  98. package/fesm2022/primeng-orderlist.mjs +2 -2
  99. package/fesm2022/primeng-organizationchart.mjs +2 -2
  100. package/fesm2022/primeng-overlay.mjs +2 -2
  101. package/fesm2022/primeng-overlaybadge.mjs +1 -1
  102. package/fesm2022/primeng-overlaypanel.mjs +2 -2
  103. package/fesm2022/primeng-paginator.mjs +2 -2
  104. package/fesm2022/primeng-panel.mjs +3 -3
  105. package/fesm2022/primeng-panelmenu.mjs +2 -2
  106. package/fesm2022/primeng-password.mjs +3 -2
  107. package/fesm2022/primeng-password.mjs.map +1 -1
  108. package/fesm2022/primeng-picklist.mjs +4 -2
  109. package/fesm2022/primeng-picklist.mjs.map +1 -1
  110. package/fesm2022/primeng-popover.mjs +3 -3
  111. package/fesm2022/primeng-progressbar.mjs +2 -2
  112. package/fesm2022/primeng-progressspinner.mjs +1 -1
  113. package/fesm2022/primeng-radiobutton.mjs +1 -1
  114. package/fesm2022/primeng-rating.mjs +2 -2
  115. package/fesm2022/primeng-scroller.mjs +2 -2
  116. package/fesm2022/primeng-scrollpanel.mjs +2 -2
  117. package/fesm2022/primeng-scrolltop.mjs +3 -3
  118. package/fesm2022/primeng-select.mjs +1 -1
  119. package/fesm2022/primeng-selectbutton.mjs +2 -2
  120. package/fesm2022/primeng-sidebar.mjs +2 -2
  121. package/fesm2022/primeng-skeleton.mjs +1 -1
  122. package/fesm2022/primeng-slider.mjs +1 -1
  123. package/fesm2022/primeng-speeddial.mjs +2 -2
  124. package/fesm2022/primeng-splitbutton.mjs +2 -2
  125. package/fesm2022/primeng-splitter.mjs +3 -3
  126. package/fesm2022/primeng-splitter.mjs.map +1 -1
  127. package/fesm2022/primeng-stepper.mjs +32 -60
  128. package/fesm2022/primeng-stepper.mjs.map +1 -1
  129. package/fesm2022/primeng-steps.mjs +1 -1
  130. package/fesm2022/primeng-styleclass.mjs +1 -1
  131. package/fesm2022/primeng-table.mjs +81 -450
  132. package/fesm2022/primeng-table.mjs.map +1 -1
  133. package/fesm2022/primeng-tabmenu.mjs +2 -2
  134. package/fesm2022/primeng-tabs.mjs +2 -2
  135. package/fesm2022/primeng-tabview.mjs +2 -2
  136. package/fesm2022/primeng-tag.mjs +2 -2
  137. package/fesm2022/primeng-terminal.mjs +1 -1
  138. package/fesm2022/primeng-textarea.mjs +1 -1
  139. package/fesm2022/primeng-tieredmenu.mjs +1 -1
  140. package/fesm2022/primeng-timeline.mjs +2 -2
  141. package/fesm2022/primeng-toast.mjs +2 -2
  142. package/fesm2022/primeng-togglebutton.mjs +2 -2
  143. package/fesm2022/primeng-toggleswitch.mjs +2 -2
  144. package/fesm2022/primeng-toolbar.mjs +2 -2
  145. package/fesm2022/primeng-tree.mjs +18 -88
  146. package/fesm2022/primeng-tree.mjs.map +1 -1
  147. package/fesm2022/primeng-treeselect.mjs +2 -2
  148. package/fesm2022/primeng-treetable.mjs +1 -1
  149. package/package.json +315 -315
  150. package/splitter/splitter.d.ts +2 -2
  151. package/stepper/stepper.d.ts +4 -3
  152. package/table/table.d.ts +11 -11
  153. package/table/table.interface.d.ts +13 -13
@@ -27,7 +27,7 @@ function ConfirmDialog_Conditional_2_ng_template_0_ng_container_0_Template(rf, c
27
27
  i0.ɵɵelementContainer(0);
28
28
  } }
29
29
  function ConfirmDialog_Conditional_2_ng_template_0_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵtemplate(0, ConfirmDialog_Conditional_2_ng_template_0_ng_container_0_Template, 1, 0, "ng-container", 5);
30
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_2_ng_template_0_ng_container_0_Template, 1, 0, "ng-container", 6);
31
31
  } if (rf & 2) {
32
32
  const ctx_r1 = i0.ɵɵnextContext(2);
33
33
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.headlessTemplate || ctx_r1._headlessTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction3(2, _c9, ctx_r1.confirmation, ctx_r1.onAccept.bind(ctx_r1), ctx_r1.onReject.bind(ctx_r1)));
@@ -35,38 +35,41 @@ function ConfirmDialog_Conditional_2_ng_template_0_Template(rf, ctx) { if (rf &
35
35
  function ConfirmDialog_Conditional_2_Template(rf, ctx) { if (rf & 1) {
36
36
  i0.ɵɵtemplate(0, ConfirmDialog_Conditional_2_ng_template_0_Template, 1, 6, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
37
37
  } }
38
- function ConfirmDialog_Conditional_3_Conditional_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
38
+ function ConfirmDialog_Conditional_3_Conditional_0_ng_template_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
39
39
  i0.ɵɵelementContainer(0);
40
40
  } }
41
- function ConfirmDialog_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
42
- i0.ɵɵelementStart(0, "div", 6);
43
- i0.ɵɵtemplate(1, ConfirmDialog_Conditional_3_Conditional_0_ng_container_1_Template, 1, 0, "ng-container", 7);
41
+ function ConfirmDialog_Conditional_3_Conditional_0_ng_template_0_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelementStart(0, "div", 7);
43
+ i0.ɵɵtemplate(1, ConfirmDialog_Conditional_3_Conditional_0_ng_template_0_ng_container_1_Template, 1, 0, "ng-container", 8);
44
44
  i0.ɵɵelementEnd();
45
45
  } if (rf & 2) {
46
- const ctx_r1 = i0.ɵɵnextContext(2);
46
+ const ctx_r1 = i0.ɵɵnextContext(3);
47
47
  i0.ɵɵproperty("ngClass", ctx_r1.cx("header"));
48
48
  i0.ɵɵadvance();
49
49
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.headerTemplate || ctx_r1._headerTemplate);
50
50
  } }
51
+ function ConfirmDialog_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_Conditional_0_ng_template_0_Template, 2, 2, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
53
+ } }
51
54
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_0_ng_template_0_Template(rf, ctx) { }
52
55
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_0_Template(rf, ctx) { if (rf & 1) {
53
56
  i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_0_ng_template_0_Template, 0, 0, "ng-template");
54
57
  } }
55
58
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
56
- i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_0_Template, 1, 0, null, 7);
59
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_0_Template, 1, 0, null, 8);
57
60
  } if (rf & 2) {
58
61
  const ctx_r1 = i0.ɵɵnextContext(3);
59
62
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.iconTemplate || ctx_r1._iconTemplate);
60
63
  } }
61
64
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_1_i_0_Template(rf, ctx) { if (rf & 1) {
62
- i0.ɵɵelement(0, "i", 6);
65
+ i0.ɵɵelement(0, "i", 7);
63
66
  } if (rf & 2) {
64
67
  const ctx_r1 = i0.ɵɵnextContext(4);
65
68
  i0.ɵɵclassMap(ctx_r1.option("icon"));
66
69
  i0.ɵɵproperty("ngClass", ctx_r1.cx("icon"));
67
70
  } }
68
71
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_1_i_0_Template, 1, 3, "i", 10);
72
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_1_i_0_Template, 1, 3, "i", 11);
70
73
  } if (rf & 2) {
71
74
  const ctx_r1 = i0.ɵɵnextContext(3);
72
75
  i0.ɵɵproperty("ngIf", ctx_r1.option("icon"));
@@ -76,19 +79,19 @@ function ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_0_Template(rf,
76
79
  i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_0_ng_template_0_Template, 0, 0, "ng-template");
77
80
  } }
78
81
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
79
- i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_0_Template, 1, 0, null, 5);
82
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_0_Template, 1, 0, null, 6);
80
83
  } if (rf & 2) {
81
84
  const ctx_r1 = i0.ɵɵnextContext(3);
82
85
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.messageTemplate || ctx_r1._messageTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c10, ctx_r1.confirmation));
83
86
  } }
84
87
  function ConfirmDialog_Conditional_3_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
85
- i0.ɵɵelement(0, "span", 9);
88
+ i0.ɵɵelement(0, "span", 10);
86
89
  } if (rf & 2) {
87
90
  const ctx_r1 = i0.ɵɵnextContext(3);
88
91
  i0.ɵɵproperty("ngClass", ctx_r1.cx("message"))("innerHTML", ctx_r1.option("message"), i0.ɵɵsanitizeHtml);
89
92
  } }
90
93
  function ConfirmDialog_Conditional_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
91
- i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_Template, 1, 1)(1, ConfirmDialog_Conditional_3_ng_template_1_Conditional_1_Template, 1, 1, "i", 8)(2, ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_Template, 1, 4)(3, ConfirmDialog_Conditional_3_ng_template_1_Conditional_3_Template, 1, 2, "span", 9);
94
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_ng_template_1_Conditional_0_Template, 1, 1)(1, ConfirmDialog_Conditional_3_ng_template_1_Conditional_1_Template, 1, 1, "i", 9)(2, ConfirmDialog_Conditional_3_ng_template_1_Conditional_2_Template, 1, 4)(3, ConfirmDialog_Conditional_3_ng_template_1_Conditional_3_Template, 1, 2, "span", 10);
92
95
  } if (rf & 2) {
93
96
  const ctx_r1 = i0.ɵɵnextContext(2);
94
97
  i0.ɵɵconditional(ctx_r1.iconTemplate || ctx_r1._iconTemplate ? 0 : !ctx_r1.iconTemplate && !ctx_r1._iconTemplate && !ctx_r1._messageTemplate && !ctx_r1.messageTemplate ? 1 : -1);
@@ -96,7 +99,7 @@ function ConfirmDialog_Conditional_3_ng_template_1_Template(rf, ctx) { if (rf &
96
99
  i0.ɵɵconditional(ctx_r1.messageTemplate || ctx_r1._messageTemplate ? 2 : 3);
97
100
  } }
98
101
  function ConfirmDialog_Conditional_3_Template(rf, ctx) { if (rf & 1) {
99
- i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_Conditional_0_Template, 2, 2, "div", 6)(1, ConfirmDialog_Conditional_3_ng_template_1_Template, 4, 2, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
102
+ i0.ɵɵtemplate(0, ConfirmDialog_Conditional_3_Conditional_0_Template, 2, 0)(1, ConfirmDialog_Conditional_3_ng_template_1_Template, 4, 2, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
100
103
  } if (rf & 2) {
101
104
  const ctx_r1 = i0.ɵɵnextContext();
102
105
  i0.ɵɵconditional(ctx_r1.headerTemplate || ctx_r1._headerTemplate ? 0 : -1);
@@ -106,7 +109,7 @@ function ConfirmDialog_ng_template_4_Conditional_0_ng_container_1_Template(rf, c
106
109
  } }
107
110
  function ConfirmDialog_ng_template_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
108
111
  i0.ɵɵprojection(0);
109
- i0.ɵɵtemplate(1, ConfirmDialog_ng_template_4_Conditional_0_ng_container_1_Template, 1, 0, "ng-container", 7);
112
+ i0.ɵɵtemplate(1, ConfirmDialog_ng_template_4_Conditional_0_ng_container_1_Template, 1, 0, "ng-container", 8);
110
113
  } if (rf & 2) {
111
114
  const ctx_r1 = i0.ɵɵnextContext(2);
112
115
  i0.ɵɵadvance();
@@ -119,7 +122,7 @@ function ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Conditional_1_i_0_
119
122
  i0.ɵɵclassMap(ctx_r1.option("rejectIcon"));
120
123
  } }
121
124
  function ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
122
- i0.ɵɵtemplate(0, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Conditional_1_i_0_Template, 1, 2, "i", 14);
125
+ i0.ɵɵtemplate(0, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Conditional_1_i_0_Template, 1, 2, "i", 15);
123
126
  } if (rf & 2) {
124
127
  const ctx_r1 = i0.ɵɵnextContext(4);
125
128
  i0.ɵɵproperty("ngIf", ctx_r1.option("rejectIcon"));
@@ -130,9 +133,9 @@ function ConfirmDialog_ng_template_4_Conditional_1_p_button_0_2_Template(rf, ctx
130
133
  } }
131
134
  function ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Template(rf, ctx) { if (rf & 1) {
132
135
  const _r3 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "p-button", 12);
136
+ i0.ɵɵelementStart(0, "p-button", 13);
134
137
  i0.ɵɵlistener("onClick", function ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Template_p_button_onClick_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onReject()); });
135
- i0.ɵɵtemplate(1, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Conditional_1_Template, 1, 1, "i", 13)(2, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_2_Template, 1, 0, null, 7);
138
+ i0.ɵɵtemplate(1, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Conditional_1_Template, 1, 1, "i", 14)(2, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_2_Template, 1, 0, null, 8);
136
139
  i0.ɵɵelementEnd();
137
140
  } if (rf & 2) {
138
141
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -149,7 +152,7 @@ function ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Conditional_1_i_0_
149
152
  i0.ɵɵclassMap(ctx_r1.option("acceptIcon"));
150
153
  } }
151
154
  function ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
152
- i0.ɵɵtemplate(0, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Conditional_1_i_0_Template, 1, 2, "i", 14);
155
+ i0.ɵɵtemplate(0, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Conditional_1_i_0_Template, 1, 2, "i", 15);
153
156
  } if (rf & 2) {
154
157
  const ctx_r1 = i0.ɵɵnextContext(4);
155
158
  i0.ɵɵproperty("ngIf", ctx_r1.option("acceptIcon"));
@@ -160,9 +163,9 @@ function ConfirmDialog_ng_template_4_Conditional_1_p_button_1_2_Template(rf, ctx
160
163
  } }
161
164
  function ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Template(rf, ctx) { if (rf & 1) {
162
165
  const _r4 = i0.ɵɵgetCurrentView();
163
- i0.ɵɵelementStart(0, "p-button", 12);
166
+ i0.ɵɵelementStart(0, "p-button", 13);
164
167
  i0.ɵɵlistener("onClick", function ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Template_p_button_onClick_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAccept()); });
165
- i0.ɵɵtemplate(1, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Conditional_1_Template, 1, 1, "i", 13)(2, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_2_Template, 1, 0, null, 7);
168
+ i0.ɵɵtemplate(1, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Conditional_1_Template, 1, 1, "i", 14)(2, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_2_Template, 1, 0, null, 8);
166
169
  i0.ɵɵelementEnd();
167
170
  } if (rf & 2) {
168
171
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -173,7 +176,7 @@ function ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Template(rf, ctx)
173
176
  i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.acceptIconTemplate || ctx_r1._acceptIconTemplate);
174
177
  } }
175
178
  function ConfirmDialog_ng_template_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
176
- i0.ɵɵtemplate(0, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Template, 3, 6, "p-button", 11)(1, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Template, 3, 6, "p-button", 11);
179
+ i0.ɵɵtemplate(0, ConfirmDialog_ng_template_4_Conditional_1_p_button_0_Template, 3, 6, "p-button", 12)(1, ConfirmDialog_ng_template_4_Conditional_1_p_button_1_Template, 3, 6, "p-button", 12);
177
180
  } if (rf & 2) {
178
181
  const ctx_r1 = i0.ɵɵnextContext(2);
179
182
  i0.ɵɵproperty("ngIf", ctx_r1.option("rejectVisible"));
@@ -625,10 +628,10 @@ export class ConfirmDialog extends BaseComponent {
625
628
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconTemplate = _t.first);
626
629
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headlessTemplate = _t.first);
627
630
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templates = _t);
628
- } }, inputs: { header: "header", icon: "icon", message: "message", style: "style", styleClass: "styleClass", maskStyleClass: "maskStyleClass", acceptIcon: "acceptIcon", acceptLabel: "acceptLabel", closeAriaLabel: "closeAriaLabel", acceptAriaLabel: "acceptAriaLabel", acceptVisible: [2, "acceptVisible", "acceptVisible", booleanAttribute], rejectIcon: "rejectIcon", rejectLabel: "rejectLabel", rejectAriaLabel: "rejectAriaLabel", rejectVisible: [2, "rejectVisible", "rejectVisible", booleanAttribute], acceptButtonStyleClass: "acceptButtonStyleClass", rejectButtonStyleClass: "rejectButtonStyleClass", closeOnEscape: [2, "closeOnEscape", "closeOnEscape", booleanAttribute], dismissableMask: [2, "dismissableMask", "dismissableMask", booleanAttribute], blockScroll: [2, "blockScroll", "blockScroll", booleanAttribute], rtl: [2, "rtl", "rtl", booleanAttribute], closable: [2, "closable", "closable", booleanAttribute], appendTo: "appendTo", key: "key", autoZIndex: [2, "autoZIndex", "autoZIndex", booleanAttribute], baseZIndex: [2, "baseZIndex", "baseZIndex", numberAttribute], transitionOptions: "transitionOptions", focusTrap: [2, "focusTrap", "focusTrap", booleanAttribute], defaultFocus: "defaultFocus", breakpoints: "breakpoints", visible: "visible", position: "position" }, outputs: { onHide: "onHide" }, standalone: true, features: [i0.ɵɵProvidersFeature([ConfirmDialogStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], ngContentSelectors: _c8, decls: 6, vars: 10, consts: [["dialog", ""], ["footer", ""], ["headless", ""], ["content", ""], ["role", "alertdialog", 3, "visibleChange", "visible", "closable", "styleClass", "modal", "header", "closeOnEscape", "blockScroll", "appendTo", "position"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "ngClass"], [4, "ngTemplateOutlet"], [3, "ngClass", "class"], [3, "ngClass", "innerHTML"], [3, "ngClass", "class", 4, "ngIf"], [3, "label", "styleClass", "ariaLabel", "buttonProps", "onClick", 4, "ngIf"], [3, "onClick", "label", "styleClass", "ariaLabel", "buttonProps"], [3, "class"], [3, "class", 4, "ngIf"]], template: function ConfirmDialog_Template(rf, ctx) { if (rf & 1) {
631
+ } }, inputs: { header: "header", icon: "icon", message: "message", style: "style", styleClass: "styleClass", maskStyleClass: "maskStyleClass", acceptIcon: "acceptIcon", acceptLabel: "acceptLabel", closeAriaLabel: "closeAriaLabel", acceptAriaLabel: "acceptAriaLabel", acceptVisible: [2, "acceptVisible", "acceptVisible", booleanAttribute], rejectIcon: "rejectIcon", rejectLabel: "rejectLabel", rejectAriaLabel: "rejectAriaLabel", rejectVisible: [2, "rejectVisible", "rejectVisible", booleanAttribute], acceptButtonStyleClass: "acceptButtonStyleClass", rejectButtonStyleClass: "rejectButtonStyleClass", closeOnEscape: [2, "closeOnEscape", "closeOnEscape", booleanAttribute], dismissableMask: [2, "dismissableMask", "dismissableMask", booleanAttribute], blockScroll: [2, "blockScroll", "blockScroll", booleanAttribute], rtl: [2, "rtl", "rtl", booleanAttribute], closable: [2, "closable", "closable", booleanAttribute], appendTo: "appendTo", key: "key", autoZIndex: [2, "autoZIndex", "autoZIndex", booleanAttribute], baseZIndex: [2, "baseZIndex", "baseZIndex", numberAttribute], transitionOptions: "transitionOptions", focusTrap: [2, "focusTrap", "focusTrap", booleanAttribute], defaultFocus: "defaultFocus", breakpoints: "breakpoints", visible: "visible", position: "position" }, outputs: { onHide: "onHide" }, standalone: true, features: [i0.ɵɵProvidersFeature([ConfirmDialogStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], ngContentSelectors: _c8, decls: 6, vars: 10, consts: [["dialog", ""], ["footer", ""], ["headless", ""], ["content", ""], ["header", ""], ["role", "alertdialog", 3, "visibleChange", "visible", "closable", "styleClass", "modal", "header", "closeOnEscape", "blockScroll", "appendTo", "position"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "ngClass"], [4, "ngTemplateOutlet"], [3, "ngClass", "class"], [3, "ngClass", "innerHTML"], [3, "ngClass", "class", 4, "ngIf"], [3, "label", "styleClass", "ariaLabel", "buttonProps", "onClick", 4, "ngIf"], [3, "onClick", "label", "styleClass", "ariaLabel", "buttonProps"], [3, "class"], [3, "class", 4, "ngIf"]], template: function ConfirmDialog_Template(rf, ctx) { if (rf & 1) {
629
632
  const _r1 = i0.ɵɵgetCurrentView();
630
633
  i0.ɵɵprojectionDef(_c7);
631
- i0.ɵɵelementStart(0, "p-dialog", 4, 0);
634
+ i0.ɵɵelementStart(0, "p-dialog", 5, 0);
632
635
  i0.ɵɵtwoWayListener("visibleChange", function ConfirmDialog_Template_p_dialog_visibleChange_0_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.visible, $event) || (ctx.visible = $event); return i0.ɵɵresetView($event); });
633
636
  i0.ɵɵtemplate(2, ConfirmDialog_Conditional_2_Template, 2, 0)(3, ConfirmDialog_Conditional_3_Template, 3, 1)(4, ConfirmDialog_ng_template_4_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
634
637
  i0.ɵɵelementEnd();
@@ -661,22 +664,15 @@ export class ConfirmDialog extends BaseComponent {
661
664
  >
662
665
  @if (headlessTemplate || _headlessTemplate) {
663
666
  <ng-template #headless>
664
- <ng-container
665
- *ngTemplateOutlet="
666
- headlessTemplate || _headlessTemplate;
667
- context: {
668
- $implicit: confirmation,
669
- onAccept: onAccept.bind(this),
670
- onReject: onReject.bind(this)
671
- }
672
- "
673
- ></ng-container>
667
+ <ng-container *ngTemplateOutlet="headlessTemplate || _headlessTemplate; context: { $implicit: confirmation, onAccept: onAccept.bind(this), onReject: onReject.bind(this) }"></ng-container>
674
668
  </ng-template>
675
669
  } @else {
676
670
  @if (headerTemplate || _headerTemplate) {
677
- <div [ngClass]="cx('header')">
678
- <ng-container *ngTemplateOutlet="headerTemplate || _headerTemplate"></ng-container>
679
- </div>
671
+ <ng-template #header>
672
+ <div [ngClass]="cx('header')">
673
+ <ng-container *ngTemplateOutlet="headerTemplate || _headerTemplate"></ng-container>
674
+ </div>
675
+ </ng-template>
680
676
  }
681
677
 
682
678
  <ng-template #content>
@@ -845,10 +841,7 @@ export class ConfirmDialogModule {
845
841
  }
846
842
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfirmDialogModule, [{
847
843
  type: NgModule,
848
- args: [{
849
- imports: [ConfirmDialog, SharedModule],
850
- exports: [ConfirmDialog, SharedModule]
851
- }]
844
+ args: [{ imports: [ConfirmDialog, SharedModule], exports: [ConfirmDialog, SharedModule] }]
852
845
  }], null, null); })();
853
846
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ConfirmDialogModule, { imports: [ConfirmDialog, SharedModule], exports: [ConfirmDialog, SharedModule] }); })();
854
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybWRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25maXJtZGlhbG9nL2NvbmZpcm1kaWFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFFUixlQUFlLEVBR2YsTUFBTSxFQUdOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQXFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4SSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUE2QjVDLHdCQVNnQjs7O0lBVGhCLDRHQVNDOzs7SUFMSCxBQUhP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QUFZLENBQUM7Z0JBQ3RDLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7YUFDekM7O3dGQUNZLG1CQUFtQixjQTNlbkIsYUFBYSxFQXdlRyxZQUFZLGFBeGU1QixhQUFhLEVBeWVHLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBhbmltYXRpb24sIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyLCB1c2VBbmltYXRpb24gfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE5nWm9uZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmluZFNpbmdsZSwgc2V0QXR0cmlidXRlLCB1dWlkIH0gZnJvbSAnQHByaW1ldWl4L3V0aWxzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgQ29uZmlybUV2ZW50VHlwZSwgRm9vdGVyLCBQcmltZVRlbXBsYXRlLCBTaGFyZWRNb2R1bGUsIFRyYW5zbGF0aW9uS2V5cyB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgQ2hlY2tJY29uLCBUaW1lc0ljb24gfSBmcm9tICdwcmltZW5nL2ljb25zJztcbmltcG9ydCB7IFJpcHBsZSB9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAncHJpbWVuZy90cy1oZWxwZXJzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ1N0eWxlIH0gZnJvbSAnLi9zdHlsZS9jb25maXJtZGlhbG9nc3R5bGUnO1xuXG5jb25zdCBzaG93QW5pbWF0aW9uID0gYW5pbWF0aW9uKFtzdHlsZSh7IHRyYW5zZm9ybTogJ3t7dHJhbnNmb3JtfX0nLCBvcGFjaXR5OiAwIH0pLCBhbmltYXRlKCd7e3RyYW5zaXRpb259fScsIHN0eWxlKHsgdHJhbnNmb3JtOiAnbm9uZScsIG9wYWNpdHk6IDEgfSkpXSk7XG5cbmNvbnN0IGhpZGVBbmltYXRpb24gPSBhbmltYXRpb24oW2FuaW1hdGUoJ3t7dHJhbnNpdGlvbn19Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICd7e3RyYW5zZm9ybX19Jywgb3BhY2l0eTogMCB9KSldKTtcbi8qKlxuICogQ29uZmlybURpYWxvZyB1c2VzIGEgRGlhbG9nIFVJIHRoYXQgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBDb25maXJtYXRpb24gQVBJLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWNvbmZpcm1EaWFsb2csIHAtY29uZmlybWRpYWxvZywgcC1jb25maXJtLWRpYWxvZycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCdXR0b24sIFJpcHBsZSwgVGltZXNJY29uLCBDaGVja0ljb24sIERpYWxvZywgU2hhcmVkTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8cC1kaWFsb2dcbiAgICAgICAgICAgICNkaWFsb2dcbiAgICAgICAgICAgIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gICAgICAgICAgICByb2xlPVwiYWxlcnRkaWFsb2dcIlxuICAgICAgICAgICAgW2Nsb3NhYmxlXT1cIm9wdGlvbignY2xvc2FibGUnKVwiXG4gICAgICAgICAgICBbc3R5bGVDbGFzc109XCJjeCgncm9vdCcpXCJcbiAgICAgICAgICAgIFttb2RhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtoZWFkZXJdPVwib3B0aW9uKCdoZWFkZXInKVwiXG4gICAgICAgICAgICBbY2xvc2VPbkVzY2FwZV09XCJvcHRpb24oJ2Nsb3NlT25Fc2NhcGUnKVwiXG4gICAgICAgICAgICBbYmxvY2tTY3JvbGxdPVwib3B0aW9uKCdibG9ja1Njcm9sbCcpXCJcbiAgICAgICAgICAgIFthcHBlbmRUb109XCJvcHRpb24oJ2FwcGVuZFRvJylcIlxuICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChoZWFkbGVzc1RlbXBsYXRlIHx8IF9oZWFkbGVzc1RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkbGVzcz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkbGVzc1RlbXBsYXRlIHx8IF9oZWFkbGVzc1RlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb25maXJtYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWNjZXB0OiBvbkFjY2VwdC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlamVjdDogb25SZWplY3QuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmIChoZWFkZXJUZW1wbGF0ZSB8fCBfaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJjeCgnaGVhZGVyJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZSB8fCBfaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGljb25UZW1wbGF0ZSB8fCBfaWNvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGUgfHwgX2ljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKCFpY29uVGVtcGxhdGUgJiYgIV9pY29uVGVtcGxhdGUgJiYgIV9tZXNzYWdlVGVtcGxhdGUgJiYgIW1lc3NhZ2VUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiY3goJ2ljb24nKVwiIFtjbGFzc109XCJvcHRpb24oJ2ljb24nKVwiICpuZ0lmPVwib3B0aW9uKCdpY29uJylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlVGVtcGxhdGUgfHwgX21lc3NhZ2VUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVRlbXBsYXRlIHx8IF9tZXNzYWdlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb25maXJtYXRpb24gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY3goJ21lc3NhZ2UnKVwiIFtpbm5lckhUTUxdPVwib3B0aW9uKCdtZXNzYWdlJylcIj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyPlxuICAgICAgICAgICAgICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUgfHwgX2Zvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInAtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGUgfHwgX2Zvb3RlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoIWZvb3RlclRlbXBsYXRlICYmICFfZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbigncmVqZWN0VmlzaWJsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZWplY3RCdXR0b25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvblJlamVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImdldEJ1dHRvblN0eWxlQ2xhc3MoJ3BjUmVqZWN0QnV0dG9uJywgJ3JlamVjdEJ1dHRvblN0eWxlQ2xhc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIm9wdGlvbigncmVqZWN0QnV0dG9uUHJvcHMnLCAnYXJpYUxhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblByb3BzXT1cImdldFJlamVjdEJ1dHRvblByb3BzKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJlamVjdEljb24gJiYgIXJlamVjdEljb25UZW1wbGF0ZSAmJiAhX3JlamVjdEljb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwib3B0aW9uKCdyZWplY3RJY29uJylcIiBbY2xhc3NdPVwib3B0aW9uKCdyZWplY3RJY29uJylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWplY3RJY29uVGVtcGxhdGUgfHwgX3JlamVjdEljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImFjY2VwdEJ1dHRvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWNjZXB0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiZ2V0QnV0dG9uU3R5bGVDbGFzcygncGNBY2NlcHRCdXR0b24nLCAnYWNjZXB0QnV0dG9uU3R5bGVDbGFzcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uKCdhY2NlcHRWaXNpYmxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJvcHRpb24oJ2FjY2VwdEJ1dHRvblByb3BzJywgJ2FyaWFMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25Qcm9wc109XCJnZXRBY2NlcHRCdXR0b25Qcm9wcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY2NlcHRJY29uICYmICFfYWNjZXB0SWNvblRlbXBsYXRlICYmICFhY2NlcHRJY29uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIm9wdGlvbignYWNjZXB0SWNvbicpXCIgW2NsYXNzXT1cIm9wdGlvbignYWNjZXB0SWNvbicpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWNjZXB0SWNvblRlbXBsYXRlIHx8IF9hY2NlcHRJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC1kaWFsb2c+XG4gICAgYCxcbiAgICBhbmltYXRpb25zOiBbdHJpZ2dlcignYW5pbWF0aW9uJywgW3RyYW5zaXRpb24oJ3ZvaWQgPT4gdmlzaWJsZScsIFt1c2VBbmltYXRpb24oc2hvd0FuaW1hdGlvbildKSwgdHJhbnNpdGlvbigndmlzaWJsZSA9PiB2b2lkJywgW3VzZUFuaW1hdGlvbihoaWRlQW5pbWF0aW9uKV0pXSldLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQ29uZmlybURpYWxvZ1N0eWxlXVxufSlcbmV4cG9ydCBjbGFzcyBDb25maXJtRGlhbG9nIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBUaXRsZSB0ZXh0IG9mIHRoZSBkaWFsb2cuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWNvbiB0byBkaXNwbGF5IG5leHQgdG8gbWVzc2FnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBvZiB0aGUgY29uZmlybWF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHN0eWxlKCk6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgfVxuICAgIHNldCBzdHlsZSh2YWx1ZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zdHlsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGFzcyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB0aGUgQ1NTIGNsYXNzKGVzKSBmb3Igc3R5bGluZyB0aGUgbWFzayBlbGVtZW50XG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgbWFza1N0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJY29uIG9mIHRoZSBhY2NlcHQgYnV0dG9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjY2VwdEljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBMYWJlbCBvZiB0aGUgYWNjZXB0IGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY2NlcHRMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBzdHJpbmcgdGhhdCBsYWJlbHMgdGhlIGNsb3NlIGJ1dHRvbiBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjbG9zZUFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBzdHJpbmcgdGhhdCBsYWJlbHMgdGhlIGFjY2VwdCBidXR0b24gZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYWNjZXB0QXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVmlzaWJpbGl0eSBvZiB0aGUgYWNjZXB0IGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYWNjZXB0VmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogSWNvbiBvZiB0aGUgcmVqZWN0IGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSByZWplY3RJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTGFiZWwgb2YgdGhlIHJlamVjdCBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcmVqZWN0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHRoYXQgbGFiZWxzIHRoZSByZWplY3QgYnV0dG9uIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHJlamVjdEFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFZpc2liaWxpdHkgb2YgdGhlIHJlamVjdCBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlamVjdFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBhY2NlcHQgYnV0dG9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjY2VwdEJ1dHRvblN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgcmVqZWN0IGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSByZWplY3RCdXR0b25TdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIHByZXNzaW5nIGVzY2FwZSBrZXkgc2hvdWxkIGhpZGUgdGhlIGRpYWxvZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xvc2VPbkVzY2FwZTogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIGNsaWNraW5nIHRoZSBtb2RhbCBiYWNrZ3JvdW5kIHNob3VsZCBoaWRlIHRoZSBkaWFsb2cuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc21pc3NhYmxlTWFzazogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgc2Nyb2xsaW5nIGJlaGF2aW9yIHNob3VsZCBiZSBibG9ja2VkIHdpdGhpbiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBibG9ja1Njcm9sbDogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogV2hlbiBlbmFibGVkIGRpYWxvZyBpcyBkaXNwbGF5ZWQgaW4gUlRMIGRpcmVjdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcnRsOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNsb3NlIGljb24gdG8gdGhlIGhlYWRlciB0byBoaWRlIHRoZSBkaWFsb2cuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsb3NhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiAgVGFyZ2V0IGVsZW1lbnQgdG8gYXR0YWNoIHRoZSBkaWFsb2csIHZhbGlkIHZhbHVlcyBhcmUgXCJib2R5XCIgb3IgYSBsb2NhbCBuZy10ZW1wbGF0ZSB2YXJpYWJsZSBvZiBhbm90aGVyIGVsZW1lbnQgKG5vdGU6IHVzZSBiaW5kaW5nIHdpdGggYnJhY2tldHMgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcywgZS5nLiBbYXBwZW5kVG9dPVwibXlkaXZcIiBmb3IgYSBkaXYgZWxlbWVudCBoYXZpbmcgI215ZGl2IGFzIHZhcmlhYmxlIG5hbWUpLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWYgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGFueSA9ICdib2R5JztcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBrZXkgdG8gbWF0Y2ggdGhlIGtleSBvZiBjb25maXJtIG9iamVjdCwgbmVjZXNzYXJ5IHRvIHVzZSB3aGVuIGNvbXBvbmVudCB0cmVlIGhhcyBtdWx0aXBsZSBjb25maXJtIGRpYWxvZ3MuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSBsYXllcmluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b1pJbmRleDogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogQmFzZSB6SW5kZXggdmFsdWUgdG8gdXNlIGluIGxheWVyaW5nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGJhc2VaSW5kZXg6IG51bWJlciA9IDA7XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyA9ICcxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XG4gICAgLyoqXG4gICAgICogV2hlbiBlbmFibGVkLCBjYW4gb25seSBmb2N1cyBvbiBlbGVtZW50cyBpbnNpZGUgdGhlIGNvbmZpcm0gZGlhbG9nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb2N1c1RyYXA6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgdG8gcmVjZWl2ZSB0aGUgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGdldHMgdmlzaWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkZWZhdWx0Rm9jdXM6ICdhY2NlcHQnIHwgJ3JlamVjdCcgfCAnY2xvc2UnIHwgJ25vbmUnID0gJ2FjY2VwdCc7XG4gICAgLyoqXG4gICAgICogT2JqZWN0IGxpdGVyYWwgdG8gZGVmaW5lIHdpZHRocyBwZXIgc2NyZWVuIHNpemUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYnJlYWtwb2ludHM6IGFueTtcbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHZpc2libGUgc3RhdGUgYXMgYSBib29sZWFuLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCB2aXNpYmxlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIHNldCB2aXNpYmxlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlICYmICF0aGlzLm1hc2tWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqICBBbGxvd3MgZ2V0dGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgcG9zaXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cbiAgICBzZXQgcG9zaXRpb24odmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xuXG4gICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RvcGxlZnQnOlxuICAgICAgICAgICAgY2FzZSAnYm90dG9tbGVmdCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU9wdGlvbnMgPSAndHJhbnNsYXRlM2QoLTEwMCUsIDBweCwgMHB4KSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0b3ByaWdodCc6XG4gICAgICAgICAgICBjYXNlICdib3R0b21yaWdodCc6XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1PcHRpb25zID0gJ3RyYW5zbGF0ZTNkKDEwMCUsIDBweCwgMHB4KSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtT3B0aW9ucyA9ICd0cmFuc2xhdGUzZCgwcHgsIDEwMCUsIDBweCknO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU9wdGlvbnMgPSAndHJhbnNsYXRlM2QoMHB4LCAtMTAwJSwgMHB4KSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtT3B0aW9ucyA9ICdzY2FsZSgwLjcpJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBkaWFsb2cgaXMgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7Q29uZmlybUV2ZW50VHlwZX0gZW51bSAtIEN1c3RvbSBjb25maXJtIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhpZGU6IEV2ZW50RW1pdHRlcjxDb25maXJtRXZlbnRUeXBlPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZmlybUV2ZW50VHlwZT4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoRm9vdGVyKSBmb290ZXI6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KENvbmZpcm1EaWFsb2dTdHlsZSk7XG5cbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBoZWFkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBmb290ZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkKCdyZWplY3RpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgcmVqZWN0SWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2FjY2VwdGljb24nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBhY2NlcHRJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnbWVzc2FnZScsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIG1lc3NhZ2VUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkKCdpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgaWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2hlYWRsZXNzJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgaGVhZGxlc3NUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpIHRlbXBsYXRlczogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2hlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2Zvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX3JlamVjdEljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9hY2NlcHRJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfbWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2ljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9oZWFkbGVzc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uZmlybWF0aW9uOiBOdWxsYWJsZTxDb25maXJtYXRpb24+O1xuXG4gICAgX3Zpc2libGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBfc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgICBtYXNrVmlzaWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGRpYWxvZzogTnVsbGFibGU8RGlhbG9nPjtcblxuICAgIHdyYXBwZXI6IE51bGxhYmxlPEhUTUxFbGVtZW50PjtcblxuICAgIGNvbnRlbnRDb250YWluZXI6IE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJlV2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIF9wb3NpdGlvbjogc3RyaW5nID0gJ2NlbnRlcic7XG5cbiAgICB0cmFuc2Zvcm1PcHRpb25zOiBhbnkgPSAnc2NhbGUoMC43KSc7XG5cbiAgICBzdHlsZUVsZW1lbnQ6IGFueTtcblxuICAgIGlkID0gdXVpZCgncG5faWRfJyk7XG5cbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nID0gdGhpcy5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuXG4gICAgdHJhbnNsYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB6b25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UucmVxdWlyZUNvbmZpcm1hdGlvbiQuc3Vic2NyaWJlKChjb25maXJtYXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmICghY29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbi5rZXkgPT09IHRoaXMua2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24gPSBjb25maXJtYXRpb247XG5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlybWF0aW9uKTtcblxuICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGNvbmZpcm1hdGlvbltrZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQuc3Vic2NyaWJlKHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uLnJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQuc3Vic2NyaWJlKHRoaXMuY29uZmlybWF0aW9uLnJlamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0eWxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5jb25maWcudHJhbnNsYXRpb25PYnNlcnZlci5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXM/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9vdGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2ljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlamVjdGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWplY3RJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2FjY2VwdGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY2NlcHRJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWRsZXNzJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGxlc3NUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBcmlhTGFiZWxsZWRCeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyICE9PSBudWxsID8gdXVpZCgncG5faWRfJykgKyAnX2hlYWRlcicgOiBudWxsO1xuICAgIH1cblxuICAgIG9wdGlvbihuYW1lOiBzdHJpbmcsIGs/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0gdGhpcyB8fCB0aGlzO1xuICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Vba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc291cmNlW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRCdXR0b25TdHlsZUNsYXNzKGN4OiBzdHJpbmcsIG9wdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY3hDbGFzcyA9IHRoaXMuY3goY3gpO1xuICAgICAgICBjb25zdCBvcHRpb25DbGFzcyA9IHRoaXMub3B0aW9uKG9wdCk7XG5cbiAgICAgICAgcmV0dXJuIFtjeENsYXNzLCBvcHRpb25DbGFzc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBnZXRFbGVtZW50VG9Gb2N1cygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbignZGVmYXVsdEZvY3VzJykpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FjY2VwdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRTaW5nbGUodGhpcy5kaWFsb2cuZWwubmF0aXZlRWxlbWVudCwgJy5wLWNvbmZpcm0tZGlhbG9nLWFjY2VwdCcpO1xuXG4gICAgICAgICAgICBjYXNlICdyZWplY3QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaW5kU2luZ2xlKHRoaXMuZGlhbG9nLmVsLm5hdGl2ZUVsZW1lbnQsICcucC1jb25maXJtLWRpYWxvZy1yZWplY3QnKTtcblxuICAgICAgICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaW5kU2luZ2xlKHRoaXMuZGlhbG9nLmVsLm5hdGl2ZUVsZW1lbnQsICcucC1kaWFsb2ctaGVhZGVyLWNsb3NlJyk7XG5cbiAgICAgICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAvL2JhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRTaW5nbGUodGhpcy5kaWFsb2cuZWwubmF0aXZlRWxlbWVudCwgJy5wLWNvbmZpcm0tZGlhbG9nLWFjY2VwdCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlU3R5bGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5zdHlsZUVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgZm9yIChsZXQgYnJlYWtwb2ludCBpbiB0aGlzLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICAgICAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJHticmVha3BvaW50fSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLnAtZGlhbG9nWyR7dGhpcy5pZH1dIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJHt0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlKHRoaXMuc3R5bGVFbGVtZW50LCAnbm9uY2UnLCB0aGlzLmNvbmZpZz8uY3NwKCk/Lm5vbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb3NlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24/LnJlamVjdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3RFdmVudC5lbWl0KENvbmZpcm1FdmVudFR5cGUuQ0FOQ0VMKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGlkZShDb25maXJtRXZlbnRUeXBlLkNBTkNFTCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaGlkZSh0eXBlPzogQ29uZmlybUV2ZW50VHlwZSkge1xuICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KHR5cGUpO1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cblxuICAgIGRlc3Ryb3lTdHlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVzdHJveVN0eWxlKCk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgb25BY2NlcHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbiAmJiB0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHRFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkZShDb25maXJtRXZlbnRUeXBlLkFDQ0VQVCk7XG4gICAgfVxuXG4gICAgb25SZWplY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbiAmJiB0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3RFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQuZW1pdChDb25maXJtRXZlbnRUeXBlLlJFSkVDVCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGUoQ29uZmlybUV2ZW50VHlwZS5SRUpFQ1QpO1xuICAgIH1cblxuICAgIGdldCBhY2NlcHRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oJ2FjY2VwdExhYmVsJykgfHwgdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLkFDQ0VQVCk7XG4gICAgfVxuXG4gICAgZ2V0IHJlamVjdEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbigncmVqZWN0TGFiZWwnKSB8fCB0aGlzLmNvbmZpZy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuUkVKRUNUKTtcbiAgICB9XG5cbiAgICBnZXRBY2NlcHRCdXR0b25Qcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKCdhY2NlcHRCdXR0b25Qcm9wcycpO1xuICAgIH1cblxuICAgIGdldFJlamVjdEJ1dHRvblByb3BzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oJ3JlamVjdEJ1dHRvblByb3BzJyk7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb25maXJtRGlhbG9nLCBTaGFyZWRNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtDb25maXJtRGlhbG9nLCBTaGFyZWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1EaWFsb2dNb2R1bGUge31cbiJdfQ==
847
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybWRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25maXJtZGlhbG9nL2NvbmZpcm1kaWFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFFUixlQUFlLEVBR2YsTUFBTSxFQUdOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQXFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4SSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUE2QjVDLHdCQUEyTDs7O0lBQTNMLDRHQUE0Szs7O0lBQXBHLEFB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LGFBQWEsRUFBRSxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQUU7O3dGQUMvRSxtQkFBbUIsY0F4ZW5CLGFBQWEsRUF1ZVcsWUFBWSxhQXZlcEMsYUFBYSxFQXVlbUQsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIGFuaW1hdGlvbiwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIsIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgTmdab25lLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaW5kU2luZ2xlLCBzZXRBdHRyaWJ1dGUsIHV1aWQgfSBmcm9tICdAcHJpbWV1aXgvdXRpbHMnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBDb25maXJtRXZlbnRUeXBlLCBGb290ZXIsIFByaW1lVGVtcGxhdGUsIFNoYXJlZE1vZHVsZSwgVHJhbnNsYXRpb25LZXlzIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvYmFzZWNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGVja0ljb24sIFRpbWVzSWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMnO1xuaW1wb3J0IHsgUmlwcGxlIH0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nU3R5bGUgfSBmcm9tICcuL3N0eWxlL2NvbmZpcm1kaWFsb2dzdHlsZSc7XG5cbmNvbnN0IHNob3dBbmltYXRpb24gPSBhbmltYXRpb24oW3N0eWxlKHsgdHJhbnNmb3JtOiAne3t0cmFuc2Zvcm19fScsIG9wYWNpdHk6IDAgfSksIGFuaW1hdGUoJ3t7dHJhbnNpdGlvbn19Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICdub25lJywgb3BhY2l0eTogMSB9KSldKTtcblxuY29uc3QgaGlkZUFuaW1hdGlvbiA9IGFuaW1hdGlvbihbYW5pbWF0ZSgne3t0cmFuc2l0aW9ufX0nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3t7dHJhbnNmb3JtfX0nLCBvcGFjaXR5OiAwIH0pKV0pO1xuLyoqXG4gKiBDb25maXJtRGlhbG9nIHVzZXMgYSBEaWFsb2cgVUkgdGhhdCBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIENvbmZpcm1hdGlvbiBBUEkuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtY29uZmlybURpYWxvZywgcC1jb25maXJtZGlhbG9nLCBwLWNvbmZpcm0tZGlhbG9nJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1dHRvbiwgUmlwcGxlLCBUaW1lc0ljb24sIENoZWNrSWNvbiwgRGlhbG9nLCBTaGFyZWRNb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxwLWRpYWxvZ1xuICAgICAgICAgICAgI2RpYWxvZ1xuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIHJvbGU9XCJhbGVydGRpYWxvZ1wiXG4gICAgICAgICAgICBbY2xvc2FibGVdPVwib3B0aW9uKCdjbG9zYWJsZScpXCJcbiAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImN4KCdyb290JylcIlxuICAgICAgICAgICAgW21vZGFsXT1cInRydWVcIlxuICAgICAgICAgICAgW2hlYWRlcl09XCJvcHRpb24oJ2hlYWRlcicpXCJcbiAgICAgICAgICAgIFtjbG9zZU9uRXNjYXBlXT1cIm9wdGlvbignY2xvc2VPbkVzY2FwZScpXCJcbiAgICAgICAgICAgIFtibG9ja1Njcm9sbF09XCJvcHRpb24oJ2Jsb2NrU2Nyb2xsJylcIlxuICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm9wdGlvbignYXBwZW5kVG8nKVwiXG4gICAgICAgICAgICBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGhlYWRsZXNzVGVtcGxhdGUgfHwgX2hlYWRsZXNzVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRsZXNzPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGxlc3NUZW1wbGF0ZSB8fCBfaGVhZGxlc3NUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbmZpcm1hdGlvbiwgb25BY2NlcHQ6IG9uQWNjZXB0LmJpbmQodGhpcyksIG9uUmVqZWN0OiBvblJlamVjdC5iaW5kKHRoaXMpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmIChoZWFkZXJUZW1wbGF0ZSB8fCBfaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImN4KCdoZWFkZXInKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZSB8fCBfaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpY29uVGVtcGxhdGUgfHwgX2ljb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlIHx8IF9pY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmICghaWNvblRlbXBsYXRlICYmICFfaWNvblRlbXBsYXRlICYmICFfbWVzc2FnZVRlbXBsYXRlICYmICFtZXNzYWdlVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cImN4KCdpY29uJylcIiBbY2xhc3NdPVwib3B0aW9uKCdpY29uJylcIiAqbmdJZj1cIm9wdGlvbignaWNvbicpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWVzc2FnZVRlbXBsYXRlIHx8IF9tZXNzYWdlVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VUZW1wbGF0ZSB8fCBfbWVzc2FnZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29uZmlybWF0aW9uIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImN4KCdtZXNzYWdlJylcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbignbWVzc2FnZScpXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zvb3Rlcj5cbiAgICAgICAgICAgICAgICBAaWYgKGZvb3RlclRlbXBsYXRlIHx8IF9mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJwLWZvb3RlclwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlIHx8IF9mb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKCFmb290ZXJUZW1wbGF0ZSAmJiAhX2Zvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24oJ3JlamVjdFZpc2libGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVqZWN0QnV0dG9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZWplY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCJnZXRCdXR0b25TdHlsZUNsYXNzKCdwY1JlamVjdEJ1dHRvbicsICdyZWplY3RCdXR0b25TdHlsZUNsYXNzJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJvcHRpb24oJ3JlamVjdEJ1dHRvblByb3BzJywgJ2FyaWFMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25Qcm9wc109XCJnZXRSZWplY3RCdXR0b25Qcm9wcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyZWplY3RJY29uICYmICFyZWplY3RJY29uVGVtcGxhdGUgJiYgIV9yZWplY3RJY29uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIm9wdGlvbigncmVqZWN0SWNvbicpXCIgW2NsYXNzXT1cIm9wdGlvbigncmVqZWN0SWNvbicpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVqZWN0SWNvblRlbXBsYXRlIHx8IF9yZWplY3RJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhY2NlcHRCdXR0b25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkFjY2VwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImdldEJ1dHRvblN0eWxlQ2xhc3MoJ3BjQWNjZXB0QnV0dG9uJywgJ2FjY2VwdEJ1dHRvblN0eWxlQ2xhc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbignYWNjZXB0VmlzaWJsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwib3B0aW9uKCdhY2NlcHRCdXR0b25Qcm9wcycsICdhcmlhTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uUHJvcHNdPVwiZ2V0QWNjZXB0QnV0dG9uUHJvcHMoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjZXB0SWNvbiAmJiAhX2FjY2VwdEljb25UZW1wbGF0ZSAmJiAhYWNjZXB0SWNvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJvcHRpb24oJ2FjY2VwdEljb24nKVwiIFtjbGFzc109XCJvcHRpb24oJ2FjY2VwdEljb24nKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImFjY2VwdEljb25UZW1wbGF0ZSB8fCBfYWNjZXB0SWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtZGlhbG9nPlxuICAgIGAsXG4gICAgYW5pbWF0aW9uczogW3RyaWdnZXIoJ2FuaW1hdGlvbicsIFt0cmFuc2l0aW9uKCd2b2lkID0+IHZpc2libGUnLCBbdXNlQW5pbWF0aW9uKHNob3dBbmltYXRpb24pXSksIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gdm9pZCcsIFt1c2VBbmltYXRpb24oaGlkZUFuaW1hdGlvbildKV0pXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0NvbmZpcm1EaWFsb2dTdHlsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybURpYWxvZyBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogVGl0bGUgdGV4dCBvZiB0aGUgZGlhbG9nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEljb24gdG8gZGlzcGxheSBuZXh0IHRvIG1lc3NhZ2UuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIE1lc3NhZ2Ugb2YgdGhlIGNvbmZpcm1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzdHlsZSgpOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgIH1cbiAgICBzZXQgc3R5bGUodmFsdWU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xhc3Mgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIENTUyBjbGFzcyhlcykgZm9yIHN0eWxpbmcgdGhlIG1hc2sgZWxlbWVudFxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG1hc2tTdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWNvbiBvZiB0aGUgYWNjZXB0IGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY2NlcHRJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTGFiZWwgb2YgdGhlIGFjY2VwdCBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYWNjZXB0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHRoYXQgbGFiZWxzIHRoZSBjbG9zZSBidXR0b24gZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgY2xvc2VBcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHRoYXQgbGFiZWxzIHRoZSBhY2NlcHQgYnV0dG9uIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFjY2VwdEFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFZpc2liaWxpdHkgb2YgdGhlIGFjY2VwdCBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFjY2VwdFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEljb24gb2YgdGhlIHJlamVjdCBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcmVqZWN0SWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIExhYmVsIG9mIHRoZSByZWplY3QgYnV0dG9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHJlamVjdExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIHN0cmluZyB0aGF0IGxhYmVscyB0aGUgcmVqZWN0IGJ1dHRvbiBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSByZWplY3RBcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBWaXNpYmlsaXR5IG9mIHRoZSByZWplY3QgYnV0dG9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZWplY3RWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgYWNjZXB0IGJ1dHRvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIHJlamVjdCBidXR0b24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcmVqZWN0QnV0dG9uU3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBpZiBwcmVzc2luZyBlc2NhcGUga2V5IHNob3VsZCBoaWRlIHRoZSBkaWFsb2cuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsb3NlT25Fc2NhcGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBpZiBjbGlja2luZyB0aGUgbW9kYWwgYmFja2dyb3VuZCBzaG91bGQgaGlkZSB0aGUgZGlhbG9nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNtaXNzYWJsZU1hc2s6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHNjcm9sbGluZyBiZWhhdmlvciBzaG91bGQgYmUgYmxvY2tlZCB3aXRoaW4gdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYmxvY2tTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFdoZW4gZW5hYmxlZCBkaWFsb2cgaXMgZGlzcGxheWVkIGluIFJUTCBkaXJlY3Rpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJ0bDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjbG9zZSBpY29uIHRvIHRoZSBoZWFkZXIgdG8gaGlkZSB0aGUgZGlhbG9nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbG9zYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogIFRhcmdldCBlbGVtZW50IHRvIGF0dGFjaCB0aGUgZGlhbG9nLCB2YWxpZCB2YWx1ZXMgYXJlIFwiYm9keVwiIG9yIGEgbG9jYWwgbmctdGVtcGxhdGUgdmFyaWFibGUgb2YgYW5vdGhlciBlbGVtZW50IChub3RlOiB1c2UgYmluZGluZyB3aXRoIGJyYWNrZXRzIGZvciB0ZW1wbGF0ZSB2YXJpYWJsZXMsIGUuZy4gW2FwcGVuZFRvXT1cIm15ZGl2XCIgZm9yIGEgZGl2IGVsZW1lbnQgaGF2aW5nICNteWRpdiBhcyB2YXJpYWJsZSBuYW1lKS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcHBlbmRUbzogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmIHwgVGVtcGxhdGVSZWY8YW55PiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfCBhbnkgPSAnYm9keSc7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwga2V5IHRvIG1hdGNoIHRoZSBrZXkgb2YgY29uZmlybSBvYmplY3QsIG5lY2Vzc2FyeSB0byB1c2Ugd2hlbiBjb21wb25lbnQgdHJlZSBoYXMgbXVsdGlwbGUgY29uZmlybSBkaWFsb2dzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgbGF5ZXJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9aSW5kZXg6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEJhc2UgekluZGV4IHZhbHVlIHRvIHVzZSBpbiBsYXllcmluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBiYXNlWkluZGV4OiBudW1iZXIgPSAwO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgYW5pbWF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknO1xuICAgIC8qKlxuICAgICAqIFdoZW4gZW5hYmxlZCwgY2FuIG9ubHkgZm9jdXMgb24gZWxlbWVudHMgaW5zaWRlIHRoZSBjb25maXJtIGRpYWxvZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZm9jdXNUcmFwOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IHRvIHJlY2VpdmUgdGhlIGZvY3VzIHdoZW4gdGhlIGRpYWxvZyBnZXRzIHZpc2libGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZGVmYXVsdEZvY3VzOiAnYWNjZXB0JyB8ICdyZWplY3QnIHwgJ2Nsb3NlJyB8ICdub25lJyA9ICdhY2NlcHQnO1xuICAgIC8qKlxuICAgICAqIE9iamVjdCBsaXRlcmFsIHRvIGRlZmluZSB3aWR0aHMgcGVyIHNjcmVlbiBzaXplLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGJyZWFrcG9pbnRzOiBhbnk7XG4gICAgLyoqXG4gICAgICogQ3VycmVudCB2aXNpYmxlIHN0YXRlIGFzIGEgYm9vbGVhbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgdmlzaWJsZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG5cbiAgICBzZXQgdmlzaWJsZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5fdmlzaWJsZSAmJiAhdGhpcy5tYXNrVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5tYXNrVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiAgQWxsb3dzIGdldHRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHBvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG4gICAgc2V0IHBvc2l0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSB2YWx1ZTtcblxuICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICd0b3BsZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbWxlZnQnOlxuICAgICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1PcHRpb25zID0gJ3RyYW5zbGF0ZTNkKC0xMDAlLCAwcHgsIDBweCknO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndG9wcmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAnYm90dG9tcmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtT3B0aW9ucyA9ICd0cmFuc2xhdGUzZCgxMDAlLCAwcHgsIDBweCknO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU9wdGlvbnMgPSAndHJhbnNsYXRlM2QoMHB4LCAxMDAlLCAwcHgpJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1PcHRpb25zID0gJ3RyYW5zbGF0ZTNkKDBweCwgLTEwMCUsIDBweCknO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU9wdGlvbnMgPSAnc2NhbGUoMC43KSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGlhbG9nIGlzIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge0NvbmZpcm1FdmVudFR5cGV9IGVudW0gLSBDdXN0b20gY29uZmlybSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBFdmVudEVtaXR0ZXI8Q29uZmlybUV2ZW50VHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbmZpcm1FdmVudFR5cGU+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKEZvb3RlcikgZm9vdGVyOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIF9jb21wb25lbnRTdHlsZSA9IGluamVjdChDb25maXJtRGlhbG9nU3R5bGUpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgaGVhZGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgZm9vdGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgncmVqZWN0aWNvbicsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIHJlamVjdEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkKCdhY2NlcHRpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgYWNjZXB0SWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ21lc3NhZ2UnLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBtZXNzYWdlVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnaWNvbicsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIGljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkKCdoZWFkbGVzcycsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIGhlYWRsZXNzVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQcmltZVRlbXBsYXRlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZDtcblxuICAgIF9oZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9mb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9yZWplY3RJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfYWNjZXB0SWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX21lc3NhZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9pY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfaGVhZGxlc3NUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbmZpcm1hdGlvbjogTnVsbGFibGU8Q29uZmlybWF0aW9uPjtcblxuICAgIF92aXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgX3N0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gICAgbWFza1Zpc2libGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBkaWFsb2c6IE51bGxhYmxlPERpYWxvZz47XG5cbiAgICB3cmFwcGVyOiBOdWxsYWJsZTxIVE1MRWxlbWVudD47XG5cbiAgICBjb250ZW50Q29udGFpbmVyOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByZVdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBfcG9zaXRpb246IHN0cmluZyA9ICdjZW50ZXInO1xuXG4gICAgdHJhbnNmb3JtT3B0aW9uczogYW55ID0gJ3NjYWxlKDAuNyknO1xuXG4gICAgc3R5bGVFbGVtZW50OiBhbnk7XG5cbiAgICBpZCA9IHV1aWQoJ3BuX2lkXycpO1xuXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IHRoaXMuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcblxuICAgIHRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgem9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLnJlcXVpcmVDb25maXJtYXRpb24kLnN1YnNjcmliZSgoY29uZmlybWF0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb24ua2V5ID09PSB0aGlzLmtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uID0gY29uZmlybWF0aW9uO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpcm1hdGlvbik7XG5cbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBjb25maXJtYXRpb25ba2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdEV2ZW50LnN1YnNjcmliZSh0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnJlamVjdEV2ZW50LnN1YnNjcmliZSh0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3QpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBpZiAodGhpcy5icmVha3BvaW50cykge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVTdHlsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uT2JzZXJ2ZXIuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvb3RlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdyZWplY3RpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVqZWN0SWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdhY2NlcHRpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWNjZXB0SWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdoZWFkbGVzcyc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRsZXNzVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXJpYUxhYmVsbGVkQnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlciAhPT0gbnVsbCA/IHV1aWQoJ3BuX2lkXycpICsgJ19oZWFkZXInIDogbnVsbDtcbiAgICB9XG5cbiAgICBvcHRpb24obmFtZTogc3RyaW5nLCBrPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHRoaXMgfHwgdGhpcztcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgaWYgKGspIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVtuYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0QnV0dG9uU3R5bGVDbGFzcyhjeDogc3RyaW5nLCBvcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGN4Q2xhc3MgPSB0aGlzLmN4KGN4KTtcbiAgICAgICAgY29uc3Qgb3B0aW9uQ2xhc3MgPSB0aGlzLm9wdGlvbihvcHQpO1xuXG4gICAgICAgIHJldHVybiBbY3hDbGFzcywgb3B0aW9uQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudFRvRm9jdXMoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5vcHRpb24oJ2RlZmF1bHRGb2N1cycpKSB7XG4gICAgICAgICAgICBjYXNlICdhY2NlcHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaW5kU2luZ2xlKHRoaXMuZGlhbG9nLmVsLm5hdGl2ZUVsZW1lbnQsICcucC1jb25maXJtLWRpYWxvZy1hY2NlcHQnKTtcblxuICAgICAgICAgICAgY2FzZSAncmVqZWN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmluZFNpbmdsZSh0aGlzLmRpYWxvZy5lbC5uYXRpdmVFbGVtZW50LCAnLnAtY29uZmlybS1kaWFsb2ctcmVqZWN0Jyk7XG5cbiAgICAgICAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmluZFNpbmdsZSh0aGlzLmRpYWxvZy5lbC5uYXRpdmVFbGVtZW50LCAnLnAtZGlhbG9nLWhlYWRlci1jbG9zZScpO1xuXG4gICAgICAgICAgICBjYXNlICdub25lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgLy9iYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmaW5kU2luZ2xlKHRoaXMuZGlhbG9nLmVsLm5hdGl2ZUVsZW1lbnQsICcucC1jb25maXJtLWRpYWxvZy1hY2NlcHQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVN0eWxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuc3R5bGVFbGVtZW50KTtcbiAgICAgICAgICAgIGxldCBpbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIGZvciAobGV0IGJyZWFrcG9pbnQgaW4gdGhpcy5icmVha3BvaW50cykge1xuICAgICAgICAgICAgICAgIGlubmVySFRNTCArPSBgXG4gICAgICAgICAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICR7YnJlYWtwb2ludH0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC5wLWRpYWxvZ1ske3RoaXMuaWR9XSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICR7dGhpcy5icmVha3BvaW50c1ticmVha3BvaW50XX0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZSh0aGlzLnN0eWxlRWxlbWVudCwgJ25vbmNlJywgdGhpcy5jb25maWc/LmNzcCgpPy5ub25jZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uPy5yZWplY3RFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQuZW1pdChDb25maXJtRXZlbnRUeXBlLkNBTkNFTCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGUoQ29uZmlybUV2ZW50VHlwZS5DQU5DRUwpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGhpZGUodHlwZT86IENvbmZpcm1FdmVudFR5cGUpIHtcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh0eXBlKTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBkZXN0cm95U3R5bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRlc3Ryb3lTdHlsZSgpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIG9uQWNjZXB0KCkge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24gJiYgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdEV2ZW50LmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpZGUoQ29uZmlybUV2ZW50VHlwZS5BQ0NFUFQpO1xuICAgIH1cblxuICAgIG9uUmVqZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24gJiYgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnJlamVjdEV2ZW50LmVtaXQoQ29uZmlybUV2ZW50VHlwZS5SRUpFQ1QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWRlKENvbmZpcm1FdmVudFR5cGUuUkVKRUNUKTtcbiAgICB9XG5cbiAgICBnZXQgYWNjZXB0QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKCdhY2NlcHRMYWJlbCcpIHx8IHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5BQ0NFUFQpO1xuICAgIH1cblxuICAgIGdldCByZWplY3RCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oJ3JlamVjdExhYmVsJykgfHwgdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLlJFSkVDVCk7XG4gICAgfVxuXG4gICAgZ2V0QWNjZXB0QnV0dG9uUHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbignYWNjZXB0QnV0dG9uUHJvcHMnKTtcbiAgICB9XG5cbiAgICBnZXRSZWplY3RCdXR0b25Qcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKCdyZWplY3RCdXR0b25Qcm9wcycpO1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHsgaW1wb3J0czogW0NvbmZpcm1EaWFsb2csIFNoYXJlZE1vZHVsZV0sIGV4cG9ydHM6IFtDb25maXJtRGlhbG9nLCBTaGFyZWRNb2R1bGVdIH0pXG5leHBvcnQgY2xhc3MgQ29uZmlybURpYWxvZ01vZHVsZSB7fVxuIl19