@simpleangularcontrols/sac-common 10.0.0-rc.2 → 10.0.0-rc.21
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.
- package/bundles/simpleangularcontrols-sac-common.umd.js +2232 -1604
- package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
- package/common/basedatetimecontrol.d.ts +100 -14
- package/common/baseinputcontrol.d.ts +0 -4
- package/common/basemodelcontrol.d.ts +55 -27
- package/common/baseuploadcontrol.d.ts +71 -55
- package/controls/checkbox/checkbox.d.ts +12 -3
- package/controls/checkbox/radiobutton.d.ts +61 -26
- package/controls/contextmenu/contextmenu.d.ts +26 -19
- package/controls/contextmenu/contextmenu.interface.d.ts +3 -0
- package/controls/contextmenu/contextmenuitem.d.ts +5 -0
- package/controls/contextmenu/contextmenuitembutton.d.ts +21 -20
- package/controls/datetime/date.d.ts +28 -31
- package/controls/datetime/datetime.d.ts +27 -31
- package/controls/datetime/time.d.ts +26 -30
- package/controls/dialog/dialog.d.ts +31 -43
- package/controls/grid/grid.d.ts +38 -36
- package/controls/grid/gridbutton.d.ts +13 -13
- package/controls/grid/gridcolumn.d.ts +8 -8
- package/controls/grid/gridcolumnaction.d.ts +3 -3
- package/controls/grid/gridcolumnbase.d.ts +45 -37
- package/controls/grid/gridimage.d.ts +2 -2
- package/controls/grid/model.d.ts +51 -42
- package/controls/grid/paging.d.ts +41 -43
- package/controls/input/input.d.ts +3 -3
- package/controls/input/inputarea.d.ts +5 -5
- package/controls/input/inputpassword.d.ts +7 -7
- package/controls/input/inputsearch.d.ts +13 -4
- package/controls/layout/formlayout.d.ts +17 -1
- package/controls/list/buildvaluestring.d.ts +6 -0
- package/controls/list/dropdown.d.ts +9 -51
- package/controls/list/dropdownoptions.d.ts +38 -0
- package/controls/multilanguage/multilanguageinput.d.ts +2 -2
- package/controls/multilanguage/multilanguageinputarea.d.ts +4 -4
- package/controls/static/formcontainer.d.ts +7 -3
- package/controls/tooltip/tooltip.d.ts +76 -69
- package/controls/treeview/treeview.d.ts +107 -107
- package/esm2015/common/basedatetimecontrol.js +185 -30
- package/esm2015/common/baseinputcontrol.js +2 -7
- package/esm2015/common/basemodelcontrol.js +109 -57
- package/esm2015/common/baseuploadcontrol.js +92 -59
- package/esm2015/controls/checkbox/checkbox.js +29 -6
- package/esm2015/controls/checkbox/radiobutton.js +94 -45
- package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
- package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
- package/esm2015/controls/contextmenu/contextmenu.js +22 -23
- package/esm2015/controls/contextmenu/contextmenuitem.js +13 -2
- package/esm2015/controls/contextmenu/contextmenuitembutton.js +34 -25
- package/esm2015/controls/datetime/date.js +44 -43
- package/esm2015/controls/datetime/datetime.js +43 -43
- package/esm2015/controls/datetime/time.js +43 -43
- package/esm2015/controls/dialog/dialog.js +41 -83
- package/esm2015/controls/grid/grid.js +21 -21
- package/esm2015/controls/grid/gridbutton.js +19 -13
- package/esm2015/controls/grid/gridcolumn.js +14 -7
- package/esm2015/controls/grid/gridcolumnaction.js +6 -5
- package/esm2015/controls/grid/gridcolumnbase.js +67 -55
- package/esm2015/controls/grid/gridimage.js +3 -3
- package/esm2015/controls/grid/model.js +51 -30
- package/esm2015/controls/grid/paging.js +40 -42
- package/esm2015/controls/input/input.js +6 -8
- package/esm2015/controls/input/inputarea.js +19 -12
- package/esm2015/controls/input/inputpassword.js +12 -12
- package/esm2015/controls/input/inputsearch.js +35 -6
- package/esm2015/controls/layout/formlayout.js +20 -8
- package/esm2015/controls/list/buildvaluestring.js +18 -0
- package/esm2015/controls/{treeview/ngtreeitemaction.ngfactory.js → list/buildvaluestring.ngfactory.js} +1 -1
- package/esm2015/controls/list/dropdown.js +16 -114
- package/esm2015/controls/list/dropdownoptions.js +72 -0
- package/esm2015/controls/{treeview/treeviewchild.ngfactory.js → list/dropdownoptions.ngfactory.js} +1 -1
- package/esm2015/controls/multilanguage/multilanguageinput.js +8 -14
- package/esm2015/controls/multilanguage/multilanguageinputarea.js +9 -15
- package/esm2015/controls/static/formcontainer.js +16 -5
- package/esm2015/controls/tooltip/tooltip.js +126 -245
- package/esm2015/controls/treeview/treeview.js +276 -231
- package/esm2015/interfaces/ISacConfigurationService.js +1 -1
- package/esm2015/interfaces/ISacIconService.js +1 -1
- package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -0
- package/esm2015/interfaces/ISacUploadEventCompleteState.ngfactory.js +7 -0
- package/esm2015/interfaces/ISacValidationKeyService.js +1 -1
- package/esm2015/interfaces/treeviewaction.interface.js +1 -0
- package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
- package/esm2015/public_api.js +15 -8
- package/esm2015/services/sac-configuration.service.js +31 -5
- package/esm2015/services/sac-icon.service.js +37 -1
- package/esm2015/services/sac-localisation.service.js +69 -180
- package/esm2015/services/sac-validationkey.service.js +12 -9
- package/esm2015/simpleangularcontrols-sac-common.js +1 -7
- package/esm2015/utilities/enums.js +5 -1
- package/esm2015/utilities/guid.js +4 -2
- package/esm2015/utilities/popuphelper.js +343 -0
- package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
- package/esm2015/validation/equals.validator.js +14 -0
- package/esm2015/validation/equals.validator.ngfactory.js +7 -0
- package/esm2015/validation/isDateValid.js +9 -1
- package/esm2015/validation/mintextlength.validator.js +23 -0
- package/esm2015/validation/mintextlength.validator.ngfactory.js +7 -0
- package/esm2015/validation/notequals.validator.js +14 -0
- package/esm2015/validation/{minlength.validator.ngfactory.js → notequals.validator.ngfactory.js} +1 -1
- package/esm2015/validation/validation.class.js +35 -6
- package/fesm2015/simpleangularcontrols-sac-common.js +2070 -1498
- package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
- package/interfaces/ISacConfigurationService.d.ts +20 -0
- package/interfaces/ISacIconService.d.ts +24 -0
- package/interfaces/ISacUploadEventCompleteState.d.ts +5 -0
- package/interfaces/ISacUploadEventCompleteState.ngfactory.d.ts +1 -0
- package/interfaces/ISacValidationKeyService.d.ts +2 -2
- package/interfaces/treeviewaction.interface.d.ts +4 -0
- package/interfaces/treeviewaction.interface.ngfactory.d.ts +1 -0
- package/package.json +2 -2
- package/public_api.d.ts +13 -6
- package/services/sac-configuration.service.d.ts +40 -0
- package/services/sac-icon.service.d.ts +49 -1
- package/services/sac-localisation.service.d.ts +10 -10
- package/services/sac-validationkey.service.d.ts +7 -7
- package/simpleangularcontrols-sac-common-10.0.0-rc.21.tgz +0 -0
- package/simpleangularcontrols-sac-common.d.ts +0 -6
- package/simpleangularcontrols-sac-common.metadata.json +1 -1
- package/utilities/enums.d.ts +3 -1
- package/utilities/popuphelper.d.ts +83 -0
- package/utilities/popuphelper.ngfactory.d.ts +1 -0
- package/validation/equals.validator.d.ts +2 -0
- package/validation/equals.validator.ngfactory.d.ts +1 -0
- package/validation/mintextlength.validator.d.ts +2 -0
- package/validation/mintextlength.validator.ngfactory.d.ts +1 -0
- package/validation/notequals.validator.d.ts +2 -0
- package/validation/notequals.validator.ngfactory.d.ts +1 -0
- package/validation/validation.class.d.ts +22 -3
- package/controls/treeview/ngtreeitemaction.d.ts +0 -40
- package/controls/treeview/treeviewchild.d.ts +0 -12
- package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
- package/esm2015/controls/treeview/treeviewchild.js +0 -18
- package/esm2015/validation/minlength.validator.js +0 -21
- package/simpleangularcontrols-sac-common-10.0.0-rc.2.tgz +0 -0
- package/validation/minlength.validator.d.ts +0 -2
- /package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → contextmenu/contextmenu.interface.ngfactory.d.ts} +0 -0
- /package/controls/{treeview/treeviewchild.ngfactory.d.ts → list/buildvaluestring.ngfactory.d.ts} +0 -0
- /package/{validation/minlength.validator.ngfactory.d.ts → controls/list/dropdownoptions.ngfactory.d.ts} +0 -0
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
1
|
import { Interpolation } from '../utilities/interpolation';
|
|
4
2
|
import { SACVALIDATIONKEY_SERVICE } from './sac-validationkey.service';
|
|
3
|
+
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "./sac-validationkey.service";
|
|
7
|
-
// #region
|
|
7
|
+
// #region Variables
|
|
8
|
+
/**
|
|
9
|
+
* injection token for localisation service
|
|
10
|
+
*/
|
|
11
|
+
export const SACLOCALISATION_SERVICE = new InjectionToken('SacLocalisationService');
|
|
12
|
+
// #endregion Variables
|
|
13
|
+
// #region Exported Classes
|
|
8
14
|
/**
|
|
9
15
|
* abstract class for localisation in components
|
|
10
16
|
* */
|
|
@@ -34,63 +40,45 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
34
40
|
// Set Languages
|
|
35
41
|
this.data.set('de', new Map());
|
|
36
42
|
// Validation
|
|
37
|
-
this.data
|
|
38
|
-
.get('de')
|
|
39
|
-
.set(validationKeyService.ValidationErrorRequired, this.VALIDATION_ERROR_REQUIRED.get('de'));
|
|
43
|
+
this.data.get('de').set(validationKeyService.ValidationErrorRequired, this.VALIDATION_ERROR_REQUIRED.get('de'));
|
|
40
44
|
this.data
|
|
41
45
|
.get('de')
|
|
42
46
|
.set(validationKeyService.ValidationErrorSummaryRequired, this.VALIDATION_ERROR_SUMMARY_REQUIRED.get('de'));
|
|
43
|
-
this.data
|
|
44
|
-
.get('de')
|
|
45
|
-
.set(validationKeyService.ValidationErrorMinValue, this.VALIDATION_ERROR_MINVALUE.get('de'));
|
|
47
|
+
this.data.get('de').set(validationKeyService.ValidationErrorMinValue, this.VALIDATION_ERROR_MINVALUE.get('de'));
|
|
46
48
|
this.data
|
|
47
49
|
.get('de')
|
|
48
50
|
.set(validationKeyService.ValidationErrorSummaryMinValue, this.VALIDATION_ERROR_SUMMARY_MINVALUE.get('de'));
|
|
49
|
-
this.data
|
|
50
|
-
.get('de')
|
|
51
|
-
.set(validationKeyService.ValidationErrorPattern, this.VALIDATION_ERROR_PATTERN.get('de'));
|
|
51
|
+
this.data.get('de').set(validationKeyService.ValidationErrorPattern, this.VALIDATION_ERROR_PATTERN.get('de'));
|
|
52
52
|
this.data
|
|
53
53
|
.get('de')
|
|
54
54
|
.set(validationKeyService.ValidationErrorSummaryPattern, this.VALIDATION_ERROR_SUMMARY_PATTERN.get('de'));
|
|
55
|
-
this.data
|
|
56
|
-
.get('de')
|
|
57
|
-
.set(validationKeyService.ValidationErrorMaxValue, this.VALIDATION_ERROR_MAXVALUE.get('de'));
|
|
55
|
+
this.data.get('de').set(validationKeyService.ValidationErrorMaxValue, this.VALIDATION_ERROR_MAXVALUE.get('de'));
|
|
58
56
|
this.data
|
|
59
57
|
.get('de')
|
|
60
58
|
.set(validationKeyService.ValidationErrorSummaryMaxValue, this.VALIDATION_ERROR_SUMMARY_MAXVALUE.get('de'));
|
|
61
|
-
this.data
|
|
62
|
-
.get('de')
|
|
63
|
-
.set(validationKeyService.ValidationErrorEmail, this.VALIDATION_ERROR_EMAIL.get('de'));
|
|
59
|
+
this.data.get('de').set(validationKeyService.ValidationErrorEmail, this.VALIDATION_ERROR_EMAIL.get('de'));
|
|
64
60
|
this.data
|
|
65
61
|
.get('de')
|
|
66
62
|
.set(validationKeyService.ValidationErrorSummaryEmail, this.VALIDATION_ERROR_SUMMARY_EMAIL.get('de'));
|
|
67
63
|
this.data
|
|
68
64
|
.get('de')
|
|
69
|
-
.set(validationKeyService.
|
|
70
|
-
this.data
|
|
71
|
-
.get('de')
|
|
72
|
-
.set(validationKeyService.ValidationErrorSummaryMinLength, this.VALIDATION_ERROR_SUMMARY_MINLENGTH.get('de'));
|
|
65
|
+
.set(validationKeyService.ValidationErrorMinTextLength, this.VALIDATION_ERROR_MINTEXTLENGTH.get('de'));
|
|
73
66
|
this.data
|
|
74
67
|
.get('de')
|
|
75
|
-
.set(validationKeyService.
|
|
68
|
+
.set(validationKeyService.ValidationErrorSummaryMinTextLength, this.VALIDATION_ERROR_SUMMARY_MINTEXTLENGTH.get('de'));
|
|
69
|
+
this.data.get('de').set(validationKeyService.ValidationErrorMinDate, this.VALIDATION_ERROR_MINDATE.get('de'));
|
|
76
70
|
this.data
|
|
77
71
|
.get('de')
|
|
78
72
|
.set(validationKeyService.ValidationErrorSummaryMinDate, this.VALIDATION_ERROR_SUMMARY_MINDATE.get('de'));
|
|
79
|
-
this.data
|
|
80
|
-
.get('de')
|
|
81
|
-
.set(validationKeyService.ValidationErrorMaxDate, this.VALIDATION_ERROR_MAXDATE.get('de'));
|
|
73
|
+
this.data.get('de').set(validationKeyService.ValidationErrorMaxDate, this.VALIDATION_ERROR_MAXDATE.get('de'));
|
|
82
74
|
this.data
|
|
83
75
|
.get('de')
|
|
84
76
|
.set(validationKeyService.ValidationErrorSummaryMaxDate, this.VALIDATION_ERROR_SUMMARY_MAXDATE.get('de'));
|
|
85
|
-
this.data
|
|
86
|
-
.get('de')
|
|
87
|
-
.set(validationKeyService.ValidationErrorMinTime, this.VALIDATION_ERROR_MINTIME.get('de'));
|
|
77
|
+
this.data.get('de').set(validationKeyService.ValidationErrorMinTime, this.VALIDATION_ERROR_MINTIME.get('de'));
|
|
88
78
|
this.data
|
|
89
79
|
.get('de')
|
|
90
80
|
.set(validationKeyService.ValidationErrorSummaryMinTime, this.VALIDATION_ERROR_SUMMARY_MINTIME.get('de'));
|
|
91
|
-
this.data
|
|
92
|
-
.get('de')
|
|
93
|
-
.set(validationKeyService.ValidationErrorMaxTime, this.VALIDATION_ERROR_MAXTIME.get('de'));
|
|
81
|
+
this.data.get('de').set(validationKeyService.ValidationErrorMaxTime, this.VALIDATION_ERROR_MAXTIME.get('de'));
|
|
94
82
|
this.data
|
|
95
83
|
.get('de')
|
|
96
84
|
.set(validationKeyService.ValidationErrorSummaryMaxTime, this.VALIDATION_ERROR_SUMMARY_MAXTIME.get('de'));
|
|
@@ -100,9 +88,7 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
100
88
|
this.data
|
|
101
89
|
.get('de')
|
|
102
90
|
.set(validationKeyService.ValidationErrorSummaryDatetimeFormat, this.VALIDATION_ERROR_SUMMARY_DATETIMEFORMAT.get('de'));
|
|
103
|
-
this.data
|
|
104
|
-
.get('de')
|
|
105
|
-
.set(validationKeyService.ValidationErrorFilesMin, this.VALIDATION_ERROR_FILESMIN.get('de'));
|
|
91
|
+
this.data.get('de').set(validationKeyService.ValidationErrorFilesMin, this.VALIDATION_ERROR_FILESMIN.get('de'));
|
|
106
92
|
this.data
|
|
107
93
|
.get('de')
|
|
108
94
|
.set(validationKeyService.ValidationErrorSummaryFilesMin, this.VALIDATION_ERROR_SUMMARY_FILESMIN.get('de'));
|
|
@@ -119,61 +105,29 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
119
105
|
.get('de')
|
|
120
106
|
.set(validationKeyService.ValidationErrorSummaryMultilanguageRequired, this.VALIDATION_ERROR_SUMMARY_MULTILANGUAGEREQUIRED.get('de'));
|
|
121
107
|
// Grid Component
|
|
122
|
-
this.data
|
|
123
|
-
|
|
124
|
-
.set(validationKeyService.PagingPageOf, this.PAGING_PAGEOFTEXT.get('de'));
|
|
125
|
-
this.data
|
|
126
|
-
.get('de')
|
|
127
|
-
.set(validationKeyService.PagingEntries, this.PAGING_PAGEENTRIESTEXT.get('de'));
|
|
108
|
+
this.data.get('de').set(validationKeyService.PagingPageOf, this.PAGING_PAGEOFTEXT.get('de'));
|
|
109
|
+
this.data.get('de').set(validationKeyService.PagingEntries, this.PAGING_PAGEENTRIESTEXT.get('de'));
|
|
128
110
|
// Upload Component
|
|
129
|
-
this.data
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
this.data
|
|
133
|
-
.get('de')
|
|
134
|
-
.set(validationKeyService.UploadButtonUpload, this.UPLOAD_BUTTON_UPLOAD.get('de'));
|
|
135
|
-
this.data
|
|
136
|
-
.get('de')
|
|
137
|
-
.set(validationKeyService.UploadButtonBrowse, this.UPLOAD_BUTTON_BROWSE.get('de'));
|
|
111
|
+
this.data.get('de').set(validationKeyService.UploadNoFilesSelected, this.UPLOAD_NO_FILE_SELECTED.get('de'));
|
|
112
|
+
this.data.get('de').set(validationKeyService.UploadButtonUpload, this.UPLOAD_BUTTON_UPLOAD.get('de'));
|
|
113
|
+
this.data.get('de').set(validationKeyService.UploadButtonBrowse, this.UPLOAD_BUTTON_BROWSE.get('de'));
|
|
138
114
|
// TinyMCE Component
|
|
139
|
-
this.data
|
|
140
|
-
|
|
141
|
-
.set(validationKeyService.TinyMceFileselectOk, this.TINYMCE_FILESELECT_OK.get('de'));
|
|
142
|
-
this.data
|
|
143
|
-
.get('de')
|
|
144
|
-
.set(validationKeyService.TinyMceFileselectCancel, this.TINYMCE_FILESELECT_CANCEL.get('de'));
|
|
115
|
+
this.data.get('de').set(validationKeyService.TinyMceFileselectOk, this.TINYMCE_FILESELECT_OK.get('de'));
|
|
116
|
+
this.data.get('de').set(validationKeyService.TinyMceFileselectCancel, this.TINYMCE_FILESELECT_CANCEL.get('de'));
|
|
145
117
|
this.data
|
|
146
118
|
.get('de')
|
|
147
119
|
.set(validationKeyService.TinyMceFileselectDialogtitle, this.TINYMCE_FILESELECT_DIALOGTITLE.get('de'));
|
|
148
120
|
// Confirm Dialog Component
|
|
149
|
-
this.data
|
|
150
|
-
|
|
151
|
-
.set(validationKeyService.ConfirmDefaultButtonYes, this.CONFIRM_BUTTON_YES.get('de'));
|
|
152
|
-
this.data
|
|
153
|
-
.get('de')
|
|
154
|
-
.set(validationKeyService.ConfirmDefaultButtonNo, this.CONFIRM_BUTTON_NO.get('de'));
|
|
121
|
+
this.data.get('de').set(validationKeyService.ConfirmDefaultButtonYes, this.CONFIRM_BUTTON_YES.get('de'));
|
|
122
|
+
this.data.get('de').set(validationKeyService.ConfirmDefaultButtonNo, this.CONFIRM_BUTTON_NO.get('de'));
|
|
155
123
|
// Browser Component
|
|
156
|
-
this.data
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
this.data
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
this.data
|
|
163
|
-
.get('de')
|
|
164
|
-
.set(validationKeyService.FilebrowserGridSize, this.FILEBROWSER_GRID_SIZE.get('de'));
|
|
165
|
-
this.data
|
|
166
|
-
.get('de')
|
|
167
|
-
.set(validationKeyService.FilebrowserButtonUpload, this.FILEBROWSER_UPLOAD.get('de'));
|
|
168
|
-
this.data
|
|
169
|
-
.get('de')
|
|
170
|
-
.set(validationKeyService.FilebrowserButtonNewFolder, this.FILEBROWSER_NEWFOLDER.get('de'));
|
|
171
|
-
this.data
|
|
172
|
-
.get('de')
|
|
173
|
-
.set(validationKeyService.FilebrowserButtonRefresh, this.FILEBROWSER_REFRESH.get('de'));
|
|
174
|
-
this.data
|
|
175
|
-
.get('de')
|
|
176
|
-
.set(validationKeyService.FilebrowserButtonDelete, this.FILEBROWSER_DELETE.get('de'));
|
|
124
|
+
this.data.get('de').set(validationKeyService.FilebrowserGridNoFiles, this.FILEBROWSER_NO_FILES.get('de'));
|
|
125
|
+
this.data.get('de').set(validationKeyService.FilebrowserGridFilename, this.FILEBROWSER_GRID_FILE.get('de'));
|
|
126
|
+
this.data.get('de').set(validationKeyService.FilebrowserGridSize, this.FILEBROWSER_GRID_SIZE.get('de'));
|
|
127
|
+
this.data.get('de').set(validationKeyService.FilebrowserButtonUpload, this.FILEBROWSER_UPLOAD.get('de'));
|
|
128
|
+
this.data.get('de').set(validationKeyService.FilebrowserButtonNewFolder, this.FILEBROWSER_NEWFOLDER.get('de'));
|
|
129
|
+
this.data.get('de').set(validationKeyService.FilebrowserButtonRefresh, this.FILEBROWSER_REFRESH.get('de'));
|
|
130
|
+
this.data.get('de').set(validationKeyService.FilebrowserButtonDelete, this.FILEBROWSER_DELETE.get('de'));
|
|
177
131
|
this.data
|
|
178
132
|
.get('de')
|
|
179
133
|
.set(this.validationKeyService.FilebrowserConfirmTextDeleteFolder, this.FILEBROWSER_CONFIRM_DELETEFOLDER.get('de'));
|
|
@@ -181,7 +135,7 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
181
135
|
.get('de')
|
|
182
136
|
.set(this.validationKeyService.FilebrowserConfirmTextDeleteFile, this.FILEBROWSER_CONFIRM_DELETEFILE.get('de'));
|
|
183
137
|
// EN
|
|
184
|
-
this.data.set('en', new Map());
|
|
138
|
+
// this.data.set('en', new Map<string, string>());
|
|
185
139
|
}
|
|
186
140
|
// #endregion Constructors
|
|
187
141
|
// #region Protected Getters And Setters
|
|
@@ -195,9 +149,7 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
195
149
|
return new Map([['de', 'Soll die Datei gelöscht werden?']]);
|
|
196
150
|
}
|
|
197
151
|
get FILEBROWSER_CONFIRM_DELETEFOLDER() {
|
|
198
|
-
return new Map([
|
|
199
|
-
['de', 'Soll der Ordner gelöscht werden?'],
|
|
200
|
-
]);
|
|
152
|
+
return new Map([['de', 'Soll der Ordner gelöscht werden?']]);
|
|
201
153
|
}
|
|
202
154
|
get FILEBROWSER_DELETE() {
|
|
203
155
|
return new Map([['de', 'Löschen']]);
|
|
@@ -218,17 +170,13 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
218
170
|
return new Map([['de', 'Aktualisieren']]);
|
|
219
171
|
}
|
|
220
172
|
get FILEBROWSER_UPLOAD() {
|
|
221
|
-
return new Map([
|
|
222
|
-
['de', 'Legen Sie Dateien hier ab um Sie hochzuladen'],
|
|
223
|
-
]);
|
|
173
|
+
return new Map([['de', 'Legen Sie Dateien hier ab um Sie hochzuladen']]);
|
|
224
174
|
}
|
|
225
175
|
get PAGING_PAGEENTRIESTEXT() {
|
|
226
176
|
return new Map([['de', 'Einträge pro Seite']]);
|
|
227
177
|
}
|
|
228
178
|
get PAGING_PAGEOFTEXT() {
|
|
229
|
-
return new Map([
|
|
230
|
-
['de', 'Seite {{CURRENTPAGE}} von {{TOTALPAGES}}'],
|
|
231
|
-
]);
|
|
179
|
+
return new Map([['de', 'Seite {{CURRENTPAGE}} von {{TOTALPAGES}}']]);
|
|
232
180
|
}
|
|
233
181
|
get TINYMCE_FILESELECT_CANCEL() {
|
|
234
182
|
return new Map([['de', 'Abbrechen']]);
|
|
@@ -255,135 +203,82 @@ export class SacDefaultLocalisationService extends SacAbstractLocalisationServic
|
|
|
255
203
|
return new Map([['de', 'Feld ist keine E-Mail Adresse']]);
|
|
256
204
|
}
|
|
257
205
|
get VALIDATION_ERROR_FILESMIN() {
|
|
258
|
-
return new Map([
|
|
259
|
-
['de', 'Es müssen min. {{MINFILES}} Dateien hochgeladen sein.'],
|
|
260
|
-
]);
|
|
206
|
+
return new Map([['de', 'Es müssen min. {{MINFILES}} Dateien hochgeladen sein.']]);
|
|
261
207
|
}
|
|
262
208
|
get VALIDATION_ERROR_MAXDATE() {
|
|
263
|
-
return new Map([
|
|
264
|
-
['de', 'Feld muss älter oder gleich {{MAXDATE}} sein.'],
|
|
265
|
-
]);
|
|
209
|
+
return new Map([['de', 'Feld muss älter oder gleich {{MAXDATE}} sein.']]);
|
|
266
210
|
}
|
|
267
211
|
get VALIDATION_ERROR_MAXTIME() {
|
|
268
|
-
return new Map([
|
|
269
|
-
['de', 'Feld muss älter oder gleich {{MAXTIME}} sein.'],
|
|
270
|
-
]);
|
|
212
|
+
return new Map([['de', 'Feld muss älter oder gleich {{MAXTIME}} sein.']]);
|
|
271
213
|
}
|
|
272
214
|
get VALIDATION_ERROR_MAXVALUE() {
|
|
273
|
-
return new Map([
|
|
274
|
-
['de', 'Feld "{{FIELD}}" darf nicht grösser als {{MAXVALUE}} sein.'],
|
|
275
|
-
]);
|
|
215
|
+
return new Map([['de', 'Feld "{{FIELD}}" darf nicht grösser als {{MAXVALUE}} sein.']]);
|
|
276
216
|
}
|
|
277
217
|
get VALIDATION_ERROR_MINDATE() {
|
|
278
|
-
return new Map([
|
|
279
|
-
['de', 'Feld muss neuer oder gleich {{MINDATE}} sein.'],
|
|
280
|
-
]);
|
|
218
|
+
return new Map([['de', 'Feld muss neuer oder gleich {{MINDATE}} sein.']]);
|
|
281
219
|
}
|
|
282
|
-
get
|
|
283
|
-
return new Map([
|
|
284
|
-
['de', 'Feld erfordert min. {{MINLENGTH}} Zeichen.'],
|
|
285
|
-
]);
|
|
220
|
+
get VALIDATION_ERROR_MINTEXTLENGTH() {
|
|
221
|
+
return new Map([['de', 'Feld erfordert min. {{MINTEXTLENGTH}} Zeichen.']]);
|
|
286
222
|
}
|
|
287
223
|
get VALIDATION_ERROR_MINTIME() {
|
|
288
|
-
return new Map([
|
|
289
|
-
['de', 'Feld muss neuer oder gleich {{MINTIME}} sein.'],
|
|
290
|
-
]);
|
|
224
|
+
return new Map([['de', 'Feld muss neuer oder gleich {{MINTIME}} sein.']]);
|
|
291
225
|
}
|
|
292
226
|
get VALIDATION_ERROR_MINVALUE() {
|
|
293
|
-
return new Map([
|
|
294
|
-
['de', 'Wert darf nicht kleiner als {{MINVALUE}} sein.'],
|
|
295
|
-
]);
|
|
227
|
+
return new Map([['de', 'Wert darf nicht kleiner als {{MINVALUE}} sein.']]);
|
|
296
228
|
}
|
|
297
229
|
get VALIDATION_ERROR_MULTILANGUAGEREQUIRED() {
|
|
298
|
-
return new Map([
|
|
299
|
-
['de', 'Es müssen alle Sprachen erfasst sein.'],
|
|
300
|
-
]);
|
|
230
|
+
return new Map([['de', 'Es müssen alle Sprachen erfasst sein.']]);
|
|
301
231
|
}
|
|
302
232
|
get VALIDATION_ERROR_MULTILANGUAGEREQUIREDANY() {
|
|
303
|
-
return new Map([
|
|
304
|
-
['de', 'Es muss min. 1 Sprache erfasst sein.'],
|
|
305
|
-
]);
|
|
233
|
+
return new Map([['de', 'Es muss min. 1 Sprache erfasst sein.']]);
|
|
306
234
|
}
|
|
307
235
|
get VALIDATION_ERROR_PATTERN() {
|
|
308
|
-
return new Map([
|
|
309
|
-
['de', 'Wert entspricht nicht der Format Vorlage.'],
|
|
310
|
-
]);
|
|
236
|
+
return new Map([['de', 'Wert entspricht nicht der Format Vorlage.']]);
|
|
311
237
|
}
|
|
312
238
|
get VALIDATION_ERROR_REQUIRED() {
|
|
313
239
|
return new Map([['de', 'Feld ist erforderlich.']]);
|
|
314
240
|
}
|
|
315
241
|
get VALIDATION_ERROR_SUMMARY_DATETIMEFORMAT() {
|
|
316
|
-
return new Map([
|
|
317
|
-
['de', 'Feld "{{FIELD}}" ist kein gültiges Datum.'],
|
|
318
|
-
]);
|
|
242
|
+
return new Map([['de', 'Feld "{{FIELD}}" ist kein gültiges Datum.']]);
|
|
319
243
|
}
|
|
320
244
|
get VALIDATION_ERROR_SUMMARY_EMAIL() {
|
|
321
|
-
return new Map([
|
|
322
|
-
['de', 'Feld "{{FIELD}}" ist keine E-Mail Adresse'],
|
|
323
|
-
]);
|
|
245
|
+
return new Map([['de', 'Feld "{{FIELD}}" ist keine E-Mail Adresse']]);
|
|
324
246
|
}
|
|
325
247
|
get VALIDATION_ERROR_SUMMARY_FILESMIN() {
|
|
326
|
-
return new Map([
|
|
327
|
-
[
|
|
328
|
-
'de',
|
|
329
|
-
'Feld "{{FIELD}}" muss min. {{MINFILES}} Dateien hochgeladen haben.',
|
|
330
|
-
],
|
|
331
|
-
]);
|
|
248
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss min. {{MINFILES}} Dateien hochgeladen haben.']]);
|
|
332
249
|
}
|
|
333
250
|
get VALIDATION_ERROR_SUMMARY_MAXDATE() {
|
|
334
|
-
return new Map([
|
|
335
|
-
['de', 'Feld "{{FIELD}}" muss älter oder gleich {{MAXDATE}} sein.'],
|
|
336
|
-
]);
|
|
251
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss älter oder gleich {{MAXDATE}} sein.']]);
|
|
337
252
|
}
|
|
338
253
|
get VALIDATION_ERROR_SUMMARY_MAXTIME() {
|
|
339
|
-
return new Map([
|
|
340
|
-
['de', 'Feld "{{FIELD}}" muss älter oder gleich {{MAXTIME}} sein.'],
|
|
341
|
-
]);
|
|
254
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss älter oder gleich {{MAXTIME}} sein.']]);
|
|
342
255
|
}
|
|
343
256
|
get VALIDATION_ERROR_SUMMARY_MAXVALUE() {
|
|
344
|
-
return new Map([
|
|
345
|
-
['de', 'Wert darf nicht grösser als {{MAXVALUE}} sein.'],
|
|
346
|
-
]);
|
|
257
|
+
return new Map([['de', 'Wert darf nicht grösser als {{MAXVALUE}} sein.']]);
|
|
347
258
|
}
|
|
348
259
|
get VALIDATION_ERROR_SUMMARY_MINDATE() {
|
|
349
|
-
return new Map([
|
|
350
|
-
['de', 'Feld "{{FIELD}}" muss neuer oder gleich {{MINDATE}} sein.'],
|
|
351
|
-
]);
|
|
260
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss neuer oder gleich {{MINDATE}} sein.']]);
|
|
352
261
|
}
|
|
353
|
-
get
|
|
354
|
-
return new Map([
|
|
355
|
-
['de', 'Feld "{{FIELD}}" erfordert min. {{MINLENGTH}} Zeichen.'],
|
|
356
|
-
]);
|
|
262
|
+
get VALIDATION_ERROR_SUMMARY_MINTEXTLENGTH() {
|
|
263
|
+
return new Map([['de', 'Feld "{{FIELD}}" erfordert min. {{MINTEXTLENGTH}} Zeichen.']]);
|
|
357
264
|
}
|
|
358
265
|
get VALIDATION_ERROR_SUMMARY_MINTIME() {
|
|
359
|
-
return new Map([
|
|
360
|
-
['de', 'Feld "{{FIELD}}" muss neuer oder gleich {{MINTIME}} sein.'],
|
|
361
|
-
]);
|
|
266
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss neuer oder gleich {{MINTIME}} sein.']]);
|
|
362
267
|
}
|
|
363
268
|
get VALIDATION_ERROR_SUMMARY_MINVALUE() {
|
|
364
|
-
return new Map([
|
|
365
|
-
['de', 'Feld "{{FIELD}}" darf nicht kleiner als {{MINVALUE}} sein.'],
|
|
366
|
-
]);
|
|
269
|
+
return new Map([['de', 'Feld "{{FIELD}}" darf nicht kleiner als {{MINVALUE}} sein.']]);
|
|
367
270
|
}
|
|
368
271
|
get VALIDATION_ERROR_SUMMARY_MULTILANGUAGEREQUIRED() {
|
|
369
|
-
return new Map([
|
|
370
|
-
['de', 'Feld "{{FIELD}}" muss alle Sprachen erfasst haben.'],
|
|
371
|
-
]);
|
|
272
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss alle Sprachen erfasst haben.']]);
|
|
372
273
|
}
|
|
373
274
|
get VALIDATION_ERROR_SUMMARY_MULTILANGUAGEREQUIREDANY() {
|
|
374
|
-
return new Map([
|
|
375
|
-
['de', 'Feld "{{FIELD}}" muss min. 1 Sprache erfasst haben.'],
|
|
376
|
-
]);
|
|
275
|
+
return new Map([['de', 'Feld "{{FIELD}}" muss min. 1 Sprache erfasst haben.']]);
|
|
377
276
|
}
|
|
378
277
|
get VALIDATION_ERROR_SUMMARY_PATTERN() {
|
|
379
|
-
return new Map([
|
|
380
|
-
['de', 'Feld "{{FIELD}}" entspricht nicht der Format Vorlage.'],
|
|
381
|
-
]);
|
|
278
|
+
return new Map([['de', 'Feld "{{FIELD}}" entspricht nicht der Format Vorlage.']]);
|
|
382
279
|
}
|
|
383
280
|
get VALIDATION_ERROR_SUMMARY_REQUIRED() {
|
|
384
|
-
return new Map([
|
|
385
|
-
['de', 'Feld "{{FIELD}}" ist erforderlich.'],
|
|
386
|
-
]);
|
|
281
|
+
return new Map([['de', 'Feld "{{FIELD}}" ist erforderlich.']]);
|
|
387
282
|
}
|
|
388
283
|
// #endregion Protected Getters And Setters
|
|
389
284
|
// #region Public Methods
|
|
@@ -451,10 +346,4 @@ SacDefaultLocalisationService.decorators = [
|
|
|
451
346
|
SacDefaultLocalisationService.ctorParameters = () => [
|
|
452
347
|
{ type: undefined, decorators: [{ type: Inject, args: [SACVALIDATIONKEY_SERVICE,] }] }
|
|
453
348
|
];
|
|
454
|
-
// #endregion Classes
|
|
455
|
-
// #region Variables
|
|
456
|
-
/**
|
|
457
|
-
* injection token for localisation service
|
|
458
|
-
*/
|
|
459
|
-
export const SACLOCALISATION_SERVICE = new InjectionToken('SacLocalisationService');
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUV2RSxrQkFBa0I7QUFFbEI7O0tBRUs7QUFFTCxNQUFNLE9BQWdCLDhCQUE4Qjs7OztZQURuRCxVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQWtIbEM7O0tBRUs7QUFFTCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsOEJBQThCO0lBVy9FLHdCQUF3QjtJQUV4Qix1QkFBdUI7SUFFdkI7O1NBRUs7SUFDTCxZQUVVLG9CQUE4QztRQUV0RCxLQUFLLEVBQUUsQ0FBQztRQUZBLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBMEI7UUFuQnhELHFCQUFxQjtRQUVyQjs7V0FFRztRQUNJLFNBQUksR0FBcUMsSUFBSSxHQUFHLEVBR3BELENBQUM7UUFlRixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUM7UUFFL0MsYUFBYTtRQUNiLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx1QkFB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bEQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDaEQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxzQkFBc0IsRUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDeEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyw2QkFBNkIsRUFDbEQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDaEQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxzQkFBc0IsRUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDeEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyw2QkFBNkIsRUFDbEQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDaEQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxzQkFBc0IsRUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDeEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyw2QkFBNkIsRUFDbEQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDaEQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyw2QkFBNkIsRUFDbEQsSUFBSSxDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDL0MsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxvQ0FBb0MsRUFDekQsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDdkQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx1QkFBdUIsRUFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDekMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyw4QkFBOEIsRUFDbkQsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDakQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx1Q0FBdUMsRUFDNUQsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDekQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyw4Q0FBOEMsRUFDbkUsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDakUsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxvQ0FBb0MsRUFDekQsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDdEQsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQywyQ0FBMkMsRUFDaEUsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDOUQsQ0FBQztRQUVKLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDVCxHQUFHLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDVCxHQUFHLENBQ0Ysb0JBQW9CLENBQUMsYUFBYSxFQUNsQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUN0QyxDQUFDO1FBRUosbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxxQkFBcUIsRUFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDdkMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxrQkFBa0IsRUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDcEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxrQkFBa0IsRUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDcEMsQ0FBQztRQUVKLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDVCxHQUFHLENBQ0Ysb0JBQW9CLENBQUMsbUJBQW1CLEVBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ3JDLENBQUM7UUFDSixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDVCxHQUFHLENBQ0Ysb0JBQW9CLENBQUMsdUJBQXVCLEVBQzVDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ3pDLENBQUM7UUFDSixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDVCxHQUFHLENBQ0Ysb0JBQW9CLENBQUMsNEJBQTRCLEVBQ2pELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQzlDLENBQUM7UUFFSiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUk7YUFDTixHQUFHLENBQUMsSUFBSSxDQUFDO2FBQ1QsR0FBRyxDQUNGLG9CQUFvQixDQUFDLHVCQUF1QixFQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUNsQyxDQUFDO1FBQ0osSUFBSSxDQUFDLElBQUk7YUFDTixHQUFHLENBQUMsSUFBSSxDQUFDO2FBQ1QsR0FBRyxDQUNGLG9CQUFvQixDQUFDLHNCQUFzQixFQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUNqQyxDQUFDO1FBRUosb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxzQkFBc0IsRUFDM0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDcEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx1QkFBdUIsRUFDNUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDckMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyxtQkFBbUIsRUFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDckMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx1QkFBdUIsRUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDbEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQywwQkFBMEIsRUFDL0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDckMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx3QkFBd0IsRUFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDbkMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixvQkFBb0IsQ0FBQyx1QkFBdUIsRUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FDbEMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQzthQUNULEdBQUcsQ0FDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsa0NBQWtDLEVBQzVELElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ2hELENBQUM7UUFDSixJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDVCxHQUFHLENBQ0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdDQUFnQyxFQUMxRCxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUFDO1FBRUosS0FBSztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBa0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCwwQkFBMEI7SUFFMUIsd0NBQXdDO0lBRXhDLElBQWMsaUJBQWlCO1FBQzdCLE9BQU8sSUFBSSxHQUFHLENBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFjLGtCQUFrQjtRQUM5QixPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBYyw4QkFBOEI7UUFDMUMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsSUFBYyxnQ0FBZ0M7UUFDNUMsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUM7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsa0JBQWtCO1FBQzlCLE9BQU8sSUFBSSxHQUFHLENBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFjLHFCQUFxQjtRQUNqQyxPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBYyxxQkFBcUI7UUFDakMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQWMscUJBQXFCO1FBQ2pDLE9BQU8sSUFBSSxHQUFHLENBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFjLG9CQUFvQjtRQUNoQyxPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFjLG1CQUFtQjtRQUMvQixPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBYyxrQkFBa0I7UUFDOUIsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsOENBQThDLENBQUM7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsc0JBQXNCO1FBQ2xDLE9BQU8sSUFBSSxHQUFHLENBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELElBQWMsaUJBQWlCO1FBQzdCLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLDBDQUEwQyxDQUFDO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLHlCQUF5QjtRQUNyQyxPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBYyw4QkFBOEI7UUFDMUMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBYyxxQkFBcUI7UUFDakMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQWMsb0JBQW9CO1FBQ2hDLE9BQU8sSUFBSSxHQUFHLENBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFjLG9CQUFvQjtRQUNoQyxPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBYyx1QkFBdUI7UUFDbkMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBYywrQkFBK0I7UUFDM0MsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBYyxzQkFBc0I7UUFDbEMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBYyx5QkFBeUI7UUFDckMsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsdURBQXVELENBQUM7U0FDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsd0JBQXdCO1FBQ3BDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLCtDQUErQyxDQUFDO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLHdCQUF3QjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSwrQ0FBK0MsQ0FBQztTQUN4RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyx5QkFBeUI7UUFDckMsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsNERBQTRELENBQUM7U0FDckUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsd0JBQXdCO1FBQ3BDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLCtDQUErQyxDQUFDO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLDBCQUEwQjtRQUN0QyxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSw0Q0FBNEMsQ0FBQztTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyx3QkFBd0I7UUFDcEMsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsK0NBQStDLENBQUM7U0FDeEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMseUJBQXlCO1FBQ3JDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLGdEQUFnRCxDQUFDO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLHNDQUFzQztRQUNsRCxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSx1Q0FBdUMsQ0FBQztTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyx5Q0FBeUM7UUFJckQsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsc0NBQXNDLENBQUM7U0FDL0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsd0JBQXdCO1FBQ3BDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLDJDQUEyQyxDQUFDO1NBQ3BELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLHlCQUF5QjtRQUNyQyxPQUFPLElBQUksR0FBRyxDQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFjLHVDQUF1QztRQUNuRCxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSwyQ0FBMkMsQ0FBQztTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyw4QkFBOEI7UUFDMUMsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsMkNBQTJDLENBQUM7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsaUNBQWlDO1FBQzdDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCO2dCQUNFLElBQUk7Z0JBQ0osb0VBQW9FO2FBQ3JFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsZ0NBQWdDO1FBQzVDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLDJEQUEyRCxDQUFDO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLGdDQUFnQztRQUM1QyxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSwyREFBMkQsQ0FBQztTQUNwRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyxpQ0FBaUM7UUFDN0MsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsZ0RBQWdELENBQUM7U0FDekQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsZ0NBQWdDO1FBQzVDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLDJEQUEyRCxDQUFDO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLGtDQUFrQztRQUM5QyxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSx3REFBd0QsQ0FBQztTQUNqRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyxnQ0FBZ0M7UUFDNUMsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUsMkRBQTJELENBQUM7U0FDcEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsaUNBQWlDO1FBQzdDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLDREQUE0RCxDQUFDO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLDhDQUE4QztRQUkxRCxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSxvREFBb0QsQ0FBQztTQUM3RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBYyxpREFBaUQ7UUFJN0QsT0FBTyxJQUFJLEdBQUcsQ0FBaUI7WUFDN0IsQ0FBQyxJQUFJLEVBQUUscURBQXFELENBQUM7U0FDOUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQWMsZ0NBQWdDO1FBQzVDLE9BQU8sSUFBSSxHQUFHLENBQWlCO1lBQzdCLENBQUMsSUFBSSxFQUFFLHVEQUF1RCxDQUFDO1NBQ2hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLGlDQUFpQztRQUM3QyxPQUFPLElBQUksR0FBRyxDQUFpQjtZQUM3QixDQUFDLElBQUksRUFBRSxvQ0FBb0MsQ0FBQztTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkNBQTJDO0lBRTNDLHlCQUF5QjtJQUV6Qjs7T0FFRztJQUNJLFNBQVMsQ0FBQyxHQUFXLEVBQUUsTUFBWTtRQUN4QyxPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUIsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUV0QyxtQ0FBbUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQixPQUFPO2lCQUNSO2FBQ0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtvQkFDM0MsTUFBTSxTQUFTLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ3JELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUM3RCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3BCLE9BQU87aUJBQ1I7cUJBQU07b0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQixPQUFPO2lCQUNSO2FBQ0Y7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixPQUFPO2FBQ1I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw0QkFBNEI7SUFFNUIsMEJBQTBCO0lBRTFCOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVztRQUNqQixNQUFNLFFBQVEsR0FBVyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBRTVDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLFFBQVEsQ0FBQztTQUNqQjtJQUNILENBQUM7Ozs7WUF2b0JGLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7Ozs0Q0FvQjdCLE1BQU0sU0FBQyx3QkFBd0I7O0FBd25CcEMscUJBQXFCO0FBRXJCLG9CQUFvQjtBQUVwQjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUNsQyxJQUFJLGNBQWMsQ0FBaUMsd0JBQXdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XHJcbmltcG9ydCB7IEludGVycG9sYXRpb24gfSBmcm9tICcuLi91dGlsaXRpZXMvaW50ZXJwb2xhdGlvbic7XHJcbmltcG9ydCB7IFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSB9IGZyb20gJy4vc2FjLXZhbGlkYXRpb25rZXkuc2VydmljZSc7XHJcblxyXG4vLyAjcmVnaW9uIENsYXNzZXNcclxuXHJcbi8qKlxyXG4gKiBhYnN0cmFjdCBjbGFzcyBmb3IgbG9jYWxpc2F0aW9uIGluIGNvbXBvbmVudHNcclxuICogKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0Fic3RyYWN0TG9jYWxpc2F0aW9uU2VydmljZVxyXG4gIGltcGxlbWVudHMgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2Vcclxue1xyXG4gIC8vICNyZWdpb24gUHJvdGVjdGVkIEFic3RyYWN0IEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBDT05GSVJNX0JVVFRPTl9OTygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgQ09ORklSTV9CVVRUT05fWUVTKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9DT05GSVJNX0RFTEVURUZJTEUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IEZJTEVCUk9XU0VSX0NPTkZJUk1fREVMRVRFRk9MREVSKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIHN0cmluZ1xyXG4gID47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9ERUxFVEUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IEZJTEVCUk9XU0VSX0dSSURfRklMRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgRklMRUJST1dTRVJfR1JJRF9TSVpFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9ORVdGT0xERVIoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IEZJTEVCUk9XU0VSX05PX0ZJTEVTKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9SRUZSRVNIKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9VUExPQUQoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFBBR0lOR19QQUdFRU5UUklFU1RFWFQoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFBBR0lOR19QQUdFT0ZURVhUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBUSU5ZTUNFX0ZJTEVTRUxFQ1RfQ0FOQ0VMKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBUSU5ZTUNFX0ZJTEVTRUxFQ1RfRElBTE9HVElUTEUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFRJTllNQ0VfRklMRVNFTEVDVF9PSygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVVBMT0FEX0JVVFRPTl9CUk9XU0UoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFVQTE9BRF9CVVRUT05fVVBMT0FEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBVUExPQURfTk9fRklMRV9TRUxFQ1RFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9EQVRFVElNRUZPUk1BVCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9FTUFJTCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9GSUxFU01JTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NQVhEQVRFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX01BWFRJTUUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfTUFYVkFMVUUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfTUlOREFURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5MRU5HVEgoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfTUlOVElNRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5WQUxVRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NVUxUSUxBTkdVQUdFUkVRVUlSRUQoKTogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgc3RyaW5nXHJcbiAgPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfTVVMVElMQU5HVUFHRVJFUVVJUkVEQU5ZKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIHN0cmluZ1xyXG4gID47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1BBVFRFUk4oKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfUkVRVUlSRUQoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9EQVRFVElNRUZPUk1BVCgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX0VNQUlMKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfRklMRVNNSU4oKTogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgc3RyaW5nXHJcbiAgPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NQVhEQVRFKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIHN0cmluZ1xyXG4gID47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUFYVElNRSgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01BWFZBTFVFKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIHN0cmluZ1xyXG4gID47XHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOREFURSgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTkxFTkdUSCgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTlRJTUUoKTogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgc3RyaW5nXHJcbiAgPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NSU5WQUxVRSgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01VTFRJTEFOR1VBR0VSRVFVSVJFRCgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01VTFRJTEFOR1VBR0VSRVFVSVJFREFOWSgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX1BBVFRFUk4oKTogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgc3RyaW5nXHJcbiAgPjtcclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9SRVFVSVJFRCgpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBzdHJpbmdcclxuICA+O1xyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByb3RlY3RlZCBBYnN0cmFjdCBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogRGllIE1ldGhvZGUgw7xiZXJzZXR6dCBkZW4gZWluZ2VnZWJlbmVuIFdvcnQvQmVncmlmZi4gVmVybGFuZ3Qga2V5IHVuZCBvcHRpb25lbGwgcGFyYW1zXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IEdldFN0cmluZyhrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBBYnN0cmFjdCBNZXRob2RzXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZWZhdWx0IGxvY2FsaXNhdGlvbiBzZXJ2aWNlXHJcbiAqICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSBleHRlbmRzIFNhY0Fic3RyYWN0TG9jYWxpc2F0aW9uU2VydmljZSB7XHJcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8qKlxyXG4gICAqIExhbmd1YWdlIFJlc291cmNlcyBmw7xyIENvbnRyb2xzIExpYnJhcnlcclxuICAgKi9cclxuICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4gPSBuZXcgTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgTWFwPHN0cmluZywgc3RyaW5nPlxyXG4gID4oKTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8qKlxyXG4gICAqIEtvbnN0cnVrdG9yXHJcbiAgICogKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoU0FDVkFMSURBVElPTktFWV9TRVJWSUNFKVxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIC8vIFNldCBMYW5ndWFnZXNcclxuICAgIHRoaXMuZGF0YS5zZXQoJ2RlJywgbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSk7XHJcblxyXG4gICAgLy8gVmFsaWRhdGlvblxyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JSZXF1aXJlZCxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfUkVRVUlSRUQuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlSZXF1aXJlZCxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9SRVFVSVJFRC5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yTWluVmFsdWUsXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX01JTlZBTFVFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWluVmFsdWUsXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVkFMVUUuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclBhdHRlcm4sXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1BBVFRFUk4uZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlQYXR0ZXJuLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX1BBVFRFUk4uZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1heFZhbHVlLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NQVhWQUxVRS5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeU1heFZhbHVlLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01BWFZBTFVFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JFbWFpbCxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfRU1BSUwuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlFbWFpbCxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9FTUFJTC5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yTWluTGVuZ3RoLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NSU5MRU5HVEguZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNaW5MZW5ndGgsXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOTEVOR1RILmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNaW5EYXRlLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NSU5EQVRFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWluRGF0ZSxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NSU5EQVRFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNYXhEYXRlLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NQVhEQVRFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWF4RGF0ZSxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NQVhEQVRFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNaW5UaW1lLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NSU5USU1FLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWluVGltZSxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NSU5USU1FLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNYXhUaW1lLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NQVhUSU1FLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWF4VGltZSxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NQVhUSU1FLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JEYXRldGltZUZvcm1hdCxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfREFURVRJTUVGT1JNQVQuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlEYXRldGltZUZvcm1hdCxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9EQVRFVElNRUZPUk1BVC5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yRmlsZXNNaW4sXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX0ZJTEVTTUlOLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5RmlsZXNNaW4sXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfRklMRVNNSU4uZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck11bHRpbGFuZ3VhZ2VSZXF1aXJlZEFueSxcclxuICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfTVVMVElMQU5HVUFHRVJFUVVJUkVEQU5ZLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TXVsdGlsYW5ndWFnZVJlcXVpcmVkQW55LFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01VTFRJTEFOR1VBR0VSRVFVSVJFREFOWS5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yTXVsdGlsYW5ndWFnZVJlcXVpcmVkLFxyXG4gICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NVUxUSUxBTkdVQUdFUkVRVUlSRUQuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNdWx0aWxhbmd1YWdlUmVxdWlyZWQsXHJcbiAgICAgICAgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTVVMVElMQU5HVUFHRVJFUVVJUkVELmdldCgnZGUnKVxyXG4gICAgICApO1xyXG5cclxuICAgIC8vIEdyaWQgQ29tcG9uZW50XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlBhZ2luZ1BhZ2VPZiwgdGhpcy5QQUdJTkdfUEFHRU9GVEVYVC5nZXQoJ2RlJykpO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5QYWdpbmdFbnRyaWVzLFxyXG4gICAgICAgIHRoaXMuUEFHSU5HX1BBR0VFTlRSSUVTVEVYVC5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuXHJcbiAgICAvLyBVcGxvYWQgQ29tcG9uZW50XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlVwbG9hZE5vRmlsZXNTZWxlY3RlZCxcclxuICAgICAgICB0aGlzLlVQTE9BRF9OT19GSUxFX1NFTEVDVEVELmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWRCdXR0b25VcGxvYWQsXHJcbiAgICAgICAgdGhpcy5VUExPQURfQlVUVE9OX1VQTE9BRC5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVXBsb2FkQnV0dG9uQnJvd3NlLFxyXG4gICAgICAgIHRoaXMuVVBMT0FEX0JVVFRPTl9CUk9XU0UuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcblxyXG4gICAgLy8gVGlueU1DRSBDb21wb25lbnRcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVGlueU1jZUZpbGVzZWxlY3RPayxcclxuICAgICAgICB0aGlzLlRJTllNQ0VfRklMRVNFTEVDVF9PSy5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVGlueU1jZUZpbGVzZWxlY3RDYW5jZWwsXHJcbiAgICAgICAgdGhpcy5USU5ZTUNFX0ZJTEVTRUxFQ1RfQ0FOQ0VMLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5UaW55TWNlRmlsZXNlbGVjdERpYWxvZ3RpdGxlLFxyXG4gICAgICAgIHRoaXMuVElOWU1DRV9GSUxFU0VMRUNUX0RJQUxPR1RJVExFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG5cclxuICAgIC8vIENvbmZpcm0gRGlhbG9nIENvbXBvbmVudFxyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5Db25maXJtRGVmYXVsdEJ1dHRvblllcyxcclxuICAgICAgICB0aGlzLkNPTkZJUk1fQlVUVE9OX1lFUy5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuQ29uZmlybURlZmF1bHRCdXR0b25ObyxcclxuICAgICAgICB0aGlzLkNPTkZJUk1fQlVUVE9OX05PLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG5cclxuICAgIC8vIEJyb3dzZXIgQ29tcG9uZW50XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyR3JpZE5vRmlsZXMsXHJcbiAgICAgICAgdGhpcy5GSUxFQlJPV1NFUl9OT19GSUxFUy5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJHcmlkRmlsZW5hbWUsXHJcbiAgICAgICAgdGhpcy5GSUxFQlJPV1NFUl9HUklEX0ZJTEUuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyR3JpZFNpemUsXHJcbiAgICAgICAgdGhpcy5GSUxFQlJPV1NFUl9HUklEX1NJWkUuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQnV0dG9uVXBsb2FkLFxyXG4gICAgICAgIHRoaXMuRklMRUJST1dTRVJfVVBMT0FELmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckJ1dHRvbk5ld0ZvbGRlcixcclxuICAgICAgICB0aGlzLkZJTEVCUk9XU0VSX05FV0ZPTERFUi5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25SZWZyZXNoLFxyXG4gICAgICAgIHRoaXMuRklMRUJST1dTRVJfUkVGUkVTSC5nZXQoJ2RlJylcclxuICAgICAgKTtcclxuICAgIHRoaXMuZGF0YVxyXG4gICAgICAuZ2V0KCdkZScpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25EZWxldGUsXHJcbiAgICAgICAgdGhpcy5GSUxFQlJPV1NFUl9ERUxFVEUuZ2V0KCdkZScpXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLmRhdGFcclxuICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJDb25maXJtVGV4dERlbGV0ZUZvbGRlcixcclxuICAgICAgICB0aGlzLkZJTEVCUk9XU0VSX0NPTkZJUk1fREVMRVRFRk9MREVSLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5kYXRhXHJcbiAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgLnNldChcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQ29uZmlybVRleHREZWxldGVGaWxlLFxyXG4gICAgICAgIHRoaXMuRklMRUJST1dTRVJfQ09ORklSTV9ERUxFVEVGSUxFLmdldCgnZGUnKVxyXG4gICAgICApO1xyXG5cclxuICAgIC8vIEVOXHJcbiAgICB0aGlzLmRhdGEuc2V0KCdlbicsIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQcm90ZWN0ZWQgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IENPTkZJUk1fQlVUVE9OX05PKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ05laW4nXV0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBDT05GSVJNX0JVVFRPTl9ZRVMoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnSmEnXV0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBGSUxFQlJPV1NFUl9DT05GSVJNX0RFTEVURUZJTEUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnU29sbCBkaWUgRGF0ZWkgZ2Vsw7ZzY2h0IHdlcmRlbj8nXV0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBGSUxFQlJPV1NFUl9DT05GSVJNX0RFTEVURUZPTERFUigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnU29sbCBkZXIgT3JkbmVyIGdlbMO2c2NodCB3ZXJkZW4/J10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfREVMRVRFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0zDtnNjaGVuJ11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfR1JJRF9GSUxFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0RhdGVpbmFtZSddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IEZJTEVCUk9XU0VSX0dSSURfU0laRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdHcsO2c3NlJ11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfTkVXRk9MREVSKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ05ldWVyIE9yZG5lciddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IEZJTEVCUk9XU0VSX05PX0ZJTEVTKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0tlaW5lIERhdGVpZW4gdm9yaGFuZGVuJ11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfUkVGUkVTSCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdBa3R1YWxpc2llcmVuJ11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfVVBMT0FEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdMZWdlbiBTaWUgRGF0ZWllbiBoaWVyIGFiIHVtIFNpZSBob2NoenVsYWRlbiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFBBR0lOR19QQUdFRU5UUklFU1RFWFQoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRWludHLDpGdlIHBybyBTZWl0ZSddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFBBR0lOR19QQUdFT0ZURVhUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdTZWl0ZSB7e0NVUlJFTlRQQUdFfX0gdm9uIHt7VE9UQUxQQUdFU319J10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVElOWU1DRV9GSUxFU0VMRUNUX0NBTkNFTCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdBYmJyZWNoZW4nXV0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBUSU5ZTUNFX0ZJTEVTRUxFQ1RfRElBTE9HVElUTEUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRGF0ZWkgYXVzd8OkaGxlbiddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFRJTllNQ0VfRklMRVNFTEVDVF9PSygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdPSyddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFVQTE9BRF9CVVRUT05fQlJPV1NFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0Jyb3dzZS4uLiddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFVQTE9BRF9CVVRUT05fVVBMT0FEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ1VwbG9hZCddXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFVQTE9BRF9OT19GSUxFX1NFTEVDVEVEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0tlaW5lIERhdGVpIGF1c2dld8OkaGx0J11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9EQVRFVElNRUZPUk1BVCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIGlzdCBrZWluIGfDvGx0aWdlcyBEYXR1bS4nXV0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX0VNQUlMKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgaXN0IGtlaW5lIEUtTWFpbCBBZHJlc3NlJ11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9GSUxFU01JTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRXMgbcO8c3NlbiBtaW4uIHt7TUlORklMRVN9fSBEYXRlaWVuIGhvY2hnZWxhZGVuIHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NQVhEQVRFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIG11c3Mgw6RsdGVyIG9kZXIgZ2xlaWNoIHt7TUFYREFURX19IHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NQVhUSU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIG11c3Mgw6RsdGVyIG9kZXIgZ2xlaWNoIHt7TUFYVElNRX19IHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NQVhWQUxVRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIGRhcmYgbmljaHQgZ3LDtnNzZXIgYWxzIHt7TUFYVkFMVUV9fSBzZWluLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfTUlOREFURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRmVsZCBtdXNzIG5ldWVyIG9kZXIgZ2xlaWNoIHt7TUlOREFURX19IHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5MRU5HVEgoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ0ZlbGQgZXJmb3JkZXJ0IG1pbi4ge3tNSU5MRU5HVEh9fSBaZWljaGVuLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfTUlOVElNRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRmVsZCBtdXNzIG5ldWVyIG9kZXIgZ2xlaWNoIHt7TUlOVElNRX19IHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5WQUxVRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnV2VydCBkYXJmIG5pY2h0IGtsZWluZXIgYWxzIHt7TUlOVkFMVUV9fSBzZWluLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfTVVMVElMQU5HVUFHRVJFUVVJUkVEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdFcyBtw7xzc2VuIGFsbGUgU3ByYWNoZW4gZXJmYXNzdCBzZWluLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfTVVMVElMQU5HVUFHRVJFUVVJUkVEQU5ZKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIHN0cmluZ1xyXG4gID4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdFcyBtdXNzIG1pbi4gMSBTcHJhY2hlIGVyZmFzc3Qgc2Vpbi4nXSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1BBVFRFUk4oKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ1dlcnQgZW50c3ByaWNodCBuaWNodCBkZXIgRm9ybWF0IFZvcmxhZ2UuJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9SRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIGlzdCBlcmZvcmRlcmxpY2guJ11dKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX0RBVEVUSU1FRk9STUFUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgaXN0IGtlaW4gZ8O8bHRpZ2VzIERhdHVtLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9FTUFJTCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIGlzdCBrZWluZSBFLU1haWwgQWRyZXNzZSddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9GSUxFU01JTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFtcclxuICAgICAgICAnZGUnLFxyXG4gICAgICAgICdGZWxkIFwie3tGSUVMRH19XCIgbXVzcyBtaW4uIHt7TUlORklMRVN9fSBEYXRlaWVuIGhvY2hnZWxhZGVuIGhhYmVuLicsXHJcbiAgICAgIF0sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01BWERBVEUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBtdXNzIMOkbHRlciBvZGVyIGdsZWljaCB7e01BWERBVEV9fSBzZWluLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NQVhUSU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgbXVzcyDDpGx0ZXIgb2RlciBnbGVpY2gge3tNQVhUSU1FfX0gc2Vpbi4nXSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUFYVkFMVUUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ1dlcnQgZGFyZiBuaWNodCBncsO2c3NlciBhbHMge3tNQVhWQUxVRX19IHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTkRBVEUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBtdXNzIG5ldWVyIG9kZXIgZ2xlaWNoIHt7TUlOREFURX19IHNlaW4uJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTkxFTkdUSCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIGVyZm9yZGVydCBtaW4uIHt7TUlOTEVOR1RIfX0gWmVpY2hlbi4nXSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVElNRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXHJcbiAgICAgIFsnZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIG11c3MgbmV1ZXIgb2RlciBnbGVpY2gge3tNSU5USU1FfX0gc2Vpbi4nXSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVkFMVUUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBkYXJmIG5pY2h0IGtsZWluZXIgYWxzIHt7TUlOVkFMVUV9fSBzZWluLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NVUxUSUxBTkdVQUdFUkVRVUlSRUQoKTogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgc3RyaW5nXHJcbiAgPiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xyXG4gICAgICBbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBtdXNzIGFsbGUgU3ByYWNoZW4gZXJmYXNzdCBoYWJlbi4nXSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTVVMVElMQU5HVUFHRVJFUVVJUkVEQU5ZKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIHN0cmluZ1xyXG4gID4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgbXVzcyBtaW4uIDEgU3ByYWNoZSBlcmZhc3N0IGhhYmVuLiddLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9QQVRURVJOKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgZW50c3ByaWNodCBuaWNodCBkZXIgRm9ybWF0IFZvcmxhZ2UuJ10sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX1JFUVVJUkVEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcclxuICAgICAgWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgaXN0IGVyZm9yZGVybGljaC4nXSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcm90ZWN0ZWQgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBNZXRob2RlIGVyZ2lidCBkaWUgc2VsZWN0ZSBTcHJhY2hlIChzdHJpbmcpICBhbmhhbmQgdm9uIEtleSB1bmQgUGFyYW1zXHJcbiAgICovXHJcbiAgcHVibGljIEdldFN0cmluZyhrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBsZXQgbGFuZ3VhZ2U6IHN0cmluZyA9IHRoaXMuR2V0TGFuZ3VhZ2UoKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhLmhhcyhsYW5ndWFnZSkpIHtcclxuICAgICAgICBsYW5ndWFnZSA9IHRoaXMuR2V0RmFsbGJhY2tMYW5ndWFnZSgpO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gS2V5IGlmIG5vIExhbmd1YWdlIGV4aXN0c1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmhhcyhsYW5ndWFnZSkpIHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQoa2V5KTtcclxuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhLmdldChsYW5ndWFnZSkuaGFzKGtleSkpIHtcclxuICAgICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZGF0YS5nZXQobGFuZ3VhZ2UpLmdldChrZXkpO1xyXG4gICAgICAgIGlmIChwYXJhbXMgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXMgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjogSW50ZXJwb2xhdGlvbiA9IG5ldyBJbnRlcnBvbGF0aW9uKCk7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGZvcm1hdHRlci5pbnRlcnBvbGF0ZVN0cmluZyhyZXNvdXJjZSwgcGFyYW1zKSk7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc291cmNlKTtcclxuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoa2V5KTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIERpZSBGdW5rdGlvbiBzZXR6dCBkaWUgZGVmYXVsdCBTcHJhY2hlIGF1ZiBERSwgZmFsbHMgZGllIFNwcmFjaC1TZXR6dW5nIG5pY2h0IG3DtmdsaWNoIGlzdC5cclxuICAgKi9cclxuICBwcml2YXRlIEdldEZhbGxiYWNrTGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZGUnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGllIEZ1bmt0aW9uIGVyZ2lidCBkaWUgYXVzZ2V3w6RobHRlIFNwcmFjaGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBHZXRMYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2U6IHN0cmluZyA9IG5hdmlnYXRvci5sYW5ndWFnZTtcclxuXHJcbiAgICBpZiAobGFuZ3VhZ2UuaW5kZXhPZignLScpID49IDApIHtcclxuICAgICAgcmV0dXJuIGxhbmd1YWdlLnNwbGl0KCctJylbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbGFuZ3VhZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG59XHJcblxyXG4vLyAjZW5kcmVnaW9uIENsYXNzZXNcclxuXHJcbi8vICNyZWdpb24gVmFyaWFibGVzXHJcblxyXG4vKipcclxuICogaW5qZWN0aW9uIHRva2VuIGZvciBsb2NhbGlzYXRpb24gc2VydmljZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFID1cclxuICBuZXcgSW5qZWN0aW9uVG9rZW48U2FjQWJzdHJhY3RMb2NhbGlzYXRpb25TZXJ2aWNlPignU2FjTG9jYWxpc2F0aW9uU2VydmljZScpO1xyXG5cclxuLy8gI2VuZHJlZ2lvbiBWYXJpYWJsZXNcclxuIl19
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUVsQyxvQkFBb0I7QUFFcEI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBaUMsd0JBQXdCLENBQUMsQ0FBQztBQUVwSCx1QkFBdUI7QUFFdkIsMkJBQTJCO0FBRTNCOztLQUVLO0FBRUwsTUFBTSxPQUFnQiw4QkFBOEI7Ozs7WUFEbkQsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUE4R2xDOztLQUVLO0FBRUwsTUFBTSxPQUFPLDZCQUE4QixTQUFRLDhCQUE4QjtJQVE3RSx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOztTQUVLO0lBQ0wsWUFFWSxvQkFBOEM7UUFFdEQsS0FBSyxFQUFFLENBQUM7UUFGQSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTBCO1FBaEIxRCxxQkFBcUI7UUFFckI7O1dBRUc7UUFDSSxTQUFJLEdBQXFDLElBQUksR0FBRyxFQUErQixDQUFDO1FBZW5GLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFH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LFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQzthQUFNO1lBQ0gsT0FBTyxRQUFRLENBQUM7U0FDbkI7SUFDTCxDQUFDOzs7O1lBMVpKLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7Ozs0Q0FpQnpCLE1BQU0sU0FBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XHJcbmltcG9ydCB7IEludGVycG9sYXRpb24gfSBmcm9tICcuLi91dGlsaXRpZXMvaW50ZXJwb2xhdGlvbic7XHJcbmltcG9ydCB7IFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSB9IGZyb20gJy4vc2FjLXZhbGlkYXRpb25rZXkuc2VydmljZSc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLy8gI3JlZ2lvbiBWYXJpYWJsZXNcclxuXHJcbi8qKlxyXG4gKiBpbmplY3Rpb24gdG9rZW4gZm9yIGxvY2FsaXNhdGlvbiBzZXJ2aWNlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2FjQWJzdHJhY3RMb2NhbGlzYXRpb25TZXJ2aWNlPignU2FjTG9jYWxpc2F0aW9uU2VydmljZScpO1xyXG5cclxuLy8gI2VuZHJlZ2lvbiBWYXJpYWJsZXNcclxuXHJcbi8vICNyZWdpb24gRXhwb3J0ZWQgQ2xhc3Nlc1xyXG5cclxuLyoqXHJcbiAqIGFic3RyYWN0IGNsYXNzIGZvciBsb2NhbGlzYXRpb24gaW4gY29tcG9uZW50c1xyXG4gKiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FjQWJzdHJhY3RMb2NhbGlzYXRpb25TZXJ2aWNlIGltcGxlbWVudHMgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2Uge1xyXG4gICAgLy8gI3JlZ2lvbiBQcm90ZWN0ZWQgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgQ09ORklSTV9CVVRUT05fTk8oKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IENPTkZJUk1fQlVUVE9OX1lFUygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgRklMRUJST1dTRVJfQ09ORklSTV9ERUxFVEVGSUxFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9DT05GSVJNX0RFTEVURUZPTERFUigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgRklMRUJST1dTRVJfREVMRVRFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9HUklEX0ZJTEUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IEZJTEVCUk9XU0VSX0dSSURfU0laRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgRklMRUJST1dTRVJfTkVXRk9MREVSKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBGSUxFQlJPV1NFUl9OT19GSUxFUygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgRklMRUJST1dTRVJfUkVGUkVTSCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgRklMRUJST1dTRVJfVVBMT0FEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBQQUdJTkdfUEFHRUVOVFJJRVNURVhUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBQQUdJTkdfUEFHRU9GVEVYVCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVElOWU1DRV9GSUxFU0VMRUNUX0NBTkNFTCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVElOWU1DRV9GSUxFU0VMRUNUX0RJQUxPR1RJVExFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBUSU5ZTUNFX0ZJTEVTRUxFQ1RfT0soKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFVQTE9BRF9CVVRUT05fQlJPV1NFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBVUExPQURfQlVUVE9OX1VQTE9BRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVVBMT0FEX05PX0ZJTEVfU0VMRUNURUQoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfREFURVRJTUVGT1JNQVQoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfRU1BSUwoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfRklMRVNNSU4oKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfTUFYREFURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NQVhUSU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX01BWFZBTFVFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX01JTkRBVEUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfTUlOVEVYVExFTkdUSCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5USU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX01JTlZBTFVFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX01VTFRJTEFOR1VBR0VSRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9NVUxUSUxBTkdVQUdFUkVRVUlSRURBTlkoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfUEFUVEVSTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9SRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX0RBVEVUSU1FRk9STUFUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfRU1BSUwoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9GSUxFU01JTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01BWERBVEUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NQVhUSU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUFYVkFMVUUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NSU5EQVRFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVEVYVExFTkdUSCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTlRJTUUoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NSU5WQUxVRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01VTFRJTEFOR1VBR0VSRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01VTFRJTEFOR1VBR0VSRVFVSVJFREFOWSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX1BBVFRFUk4oKTogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9SRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJvdGVjdGVkIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaWUgTWV0aG9kZSDDvGJlcnNldHp0IGRlbiBlaW5nZWdlYmVuZW4gV29ydC9CZWdyaWZmLiBWZXJsYW5ndCBrZXkgdW5kIG9wdGlvbmVsbCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic3RyYWN0IEdldFN0cmluZyhrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxufVxyXG5cclxuLyoqXHJcbiAqIGRlZmF1bHQgbG9jYWxpc2F0aW9uIHNlcnZpY2VcclxuICogKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlIGV4dGVuZHMgU2FjQWJzdHJhY3RMb2NhbGlzYXRpb25TZXJ2aWNlIHtcclxuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGFuZ3VhZ2UgUmVzb3VyY2VzIGbDvHIgQ29udHJvbHMgTGlicmFyeVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4gPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4oKTtcclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogS29uc3RydWt0b3JcclxuICAgICAqICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSlcclxuICAgICAgICBwcml2YXRlIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIC8vIFNldCBMYW5ndWFnZXNcclxuICAgICAgICB0aGlzLmRhdGEuc2V0KCdkZScsIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCkpO1xyXG5cclxuICAgICAgICAvLyBWYWxpZGF0aW9uXHJcbiAgICAgICAgdGhpcy5kYXRhLmdldCgnZGUnKS5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yUmVxdWlyZWQsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9SRVFVSVJFRC5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeVJlcXVpcmVkLCB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9SRVFVSVJFRC5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1pblZhbHVlLCB0aGlzLlZBTElEQVRJT05fRVJST1JfTUlOVkFMVUUuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGFcclxuICAgICAgICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAgICAgICAuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNaW5WYWx1ZSwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVkFMVUUuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JQYXR0ZXJuLCB0aGlzLlZBTElEQVRJT05fRVJST1JfUEFUVEVSTi5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeVBhdHRlcm4sIHRoaXMuVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX1BBVFRFUk4uZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JNYXhWYWx1ZSwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX01BWFZBTFVFLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWF4VmFsdWUsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01BWFZBTFVFLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhLmdldCgnZGUnKS5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yRW1haWwsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9FTUFJTC5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeUVtYWlsLCB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9FTUFJTC5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yTWluVGV4dExlbmd0aCwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX01JTlRFWFRMRU5HVEguZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGFcclxuICAgICAgICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAgICAgICAuc2V0KFxyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yU3VtbWFyeU1pblRleHRMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NSU5URVhUTEVOR1RILmdldCgnZGUnKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1pbkRhdGUsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NSU5EQVRFLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWluRGF0ZSwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOREFURS5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1heERhdGUsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NQVhEQVRFLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWF4RGF0ZSwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUFYREFURS5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1pblRpbWUsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NSU5USU1FLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWluVGltZSwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVElNRS5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck1heFRpbWUsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NQVhUSU1FLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5TWF4VGltZSwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUFYVElNRS5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuVmFsaWRhdGlvbkVycm9yRGF0ZXRpbWVGb3JtYXQsIHRoaXMuVkFMSURBVElPTl9FUlJPUl9EQVRFVElNRUZPUk1BVC5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQoXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5RGF0ZXRpbWVGb3JtYXQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9EQVRFVElNRUZPUk1BVC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JGaWxlc01pbiwgdGhpcy5WQUxJREFUSU9OX0VSUk9SX0ZJTEVTTUlOLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5WYWxpZGF0aW9uRXJyb3JTdW1tYXJ5RmlsZXNNaW4sIHRoaXMuVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX0ZJTEVTTUlOLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldChcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck11bHRpbGFuZ3VhZ2VSZXF1aXJlZEFueSxcclxuICAgICAgICAgICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NVUxUSUxBTkdVQUdFUkVRVUlSRURBTlkuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldChcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNdWx0aWxhbmd1YWdlUmVxdWlyZWRBbnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NVUxUSUxBTkdVQUdFUkVRVUlSRURBTlkuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldChcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvck11bHRpbGFuZ3VhZ2VSZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuVkFMSURBVElPTl9FUlJPUl9NVUxUSUxBTkdVQUdFUkVRVUlSRUQuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kYXRhXHJcbiAgICAgICAgICAgIC5nZXQoJ2RlJylcclxuICAgICAgICAgICAgLnNldChcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25LZXlTZXJ2aWNlLlZhbGlkYXRpb25FcnJvclN1bW1hcnlNdWx0aWxhbmd1YWdlUmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLlZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NVUxUSUxBTkdVQUdFUkVRVUlSRUQuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIEdyaWQgQ29tcG9uZW50XHJcbiAgICAgICAgdGhpcy5kYXRhLmdldCgnZGUnKS5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuUGFnaW5nUGFnZU9mLCB0aGlzLlBBR0lOR19QQUdFT0ZURVhULmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhLmdldCgnZGUnKS5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuUGFnaW5nRW50cmllcywgdGhpcy5QQUdJTkdfUEFHRUVOVFJJRVNURVhULmdldCgnZGUnKSk7XHJcblxyXG4gICAgICAgIC8vIFVwbG9hZCBDb21wb25lbnRcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWROb0ZpbGVzU2VsZWN0ZWQsIHRoaXMuVVBMT0FEX05PX0ZJTEVfU0VMRUNURUQuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWRCdXR0b25VcGxvYWQsIHRoaXMuVVBMT0FEX0JVVFRPTl9VUExPQUQuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWRCdXR0b25Ccm93c2UsIHRoaXMuVVBMT0FEX0JVVFRPTl9CUk9XU0UuZ2V0KCdkZScpKTtcclxuXHJcbiAgICAgICAgLy8gVGlueU1DRSBDb21wb25lbnRcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5UaW55TWNlRmlsZXNlbGVjdE9rLCB0aGlzLlRJTllNQ0VfRklMRVNFTEVDVF9PSy5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlRpbnlNY2VGaWxlc2VsZWN0Q2FuY2VsLCB0aGlzLlRJTllNQ0VfRklMRVNFTEVDVF9DQU5DRUwuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGFcclxuICAgICAgICAgICAgLmdldCgnZGUnKVxyXG4gICAgICAgICAgICAuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLlRpbnlNY2VGaWxlc2VsZWN0RGlhbG9ndGl0bGUsIHRoaXMuVElOWU1DRV9GSUxFU0VMRUNUX0RJQUxPR1RJVExFLmdldCgnZGUnKSk7XHJcblxyXG4gICAgICAgIC8vIENvbmZpcm0gRGlhbG9nIENvbXBvbmVudFxyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLkNvbmZpcm1EZWZhdWx0QnV0dG9uWWVzLCB0aGlzLkNPTkZJUk1fQlVUVE9OX1lFUy5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLkNvbmZpcm1EZWZhdWx0QnV0dG9uTm8sIHRoaXMuQ09ORklSTV9CVVRUT05fTk8uZ2V0KCdkZScpKTtcclxuXHJcbiAgICAgICAgLy8gQnJvd3NlciBDb21wb25lbnRcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckdyaWROb0ZpbGVzLCB0aGlzLkZJTEVCUk9XU0VSX05PX0ZJTEVTLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhLmdldCgnZGUnKS5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJHcmlkRmlsZW5hbWUsIHRoaXMuRklMRUJST1dTRVJfR1JJRF9GSUxFLmdldCgnZGUnKSk7XHJcbiAgICAgICAgdGhpcy5kYXRhLmdldCgnZGUnKS5zZXQodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJHcmlkU2l6ZSwgdGhpcy5GSUxFQlJPV1NFUl9HUklEX1NJWkUuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckJ1dHRvblVwbG9hZCwgdGhpcy5GSUxFQlJPV1NFUl9VUExPQUQuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckJ1dHRvbk5ld0ZvbGRlciwgdGhpcy5GSUxFQlJPV1NFUl9ORVdGT0xERVIuZ2V0KCdkZScpKTtcclxuICAgICAgICB0aGlzLmRhdGEuZ2V0KCdkZScpLnNldCh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckJ1dHRvblJlZnJlc2gsIHRoaXMuRklMRUJST1dTRVJfUkVGUkVTSC5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YS5nZXQoJ2RlJykuc2V0KHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQnV0dG9uRGVsZXRlLCB0aGlzLkZJTEVCUk9XU0VSX0RFTEVURS5nZXQoJ2RlJykpO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQ29uZmlybVRleHREZWxldGVGb2xkZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZJTEVCUk9XU0VSX0NPTkZJUk1fREVMRVRFRk9MREVSLmdldCgnZGUnKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGF0YVxyXG4gICAgICAgICAgICAuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgIC5zZXQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQ29uZmlybVRleHREZWxldGVGaWxlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5GSUxFQlJPV1NFUl9DT05GSVJNX0RFTEVURUZJTEUuZ2V0KCdkZScpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIEVOXHJcbiAgICAgICAgLy8gdGhpcy5kYXRhLnNldCgnZW4nLCBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHJvdGVjdGVkIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IENPTkZJUk1fQlVUVE9OX05PKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdOZWluJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IENPTkZJUk1fQlVUVE9OX1lFUygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnSmEnXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfQ09ORklSTV9ERUxFVEVGSUxFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdTb2xsIGRpZSBEYXRlaSBnZWzDtnNjaHQgd2VyZGVuPyddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBGSUxFQlJPV1NFUl9DT05GSVJNX0RFTEVURUZPTERFUigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnU29sbCBkZXIgT3JkbmVyIGdlbMO2c2NodCB3ZXJkZW4/J11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IEZJTEVCUk9XU0VSX0RFTEVURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnTMO2c2NoZW4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfR1JJRF9GSUxFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdEYXRlaW5hbWUnXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgRklMRUJST1dTRVJfR1JJRF9TSVpFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdHcsO2c3NlJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IEZJTEVCUk9XU0VSX05FV0ZPTERFUigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnTmV1ZXIgT3JkbmVyJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IEZJTEVCUk9XU0VSX05PX0ZJTEVTKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdLZWluZSBEYXRlaWVuIHZvcmhhbmRlbiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBGSUxFQlJPV1NFUl9SRUZSRVNIKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdBa3R1YWxpc2llcmVuJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IEZJTEVCUk9XU0VSX1VQTE9BRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnTGVnZW4gU2llIERhdGVpZW4gaGllciBhYiB1bSBTaWUgaG9jaHp1bGFkZW4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgUEFHSU5HX1BBR0VFTlRSSUVTVEVYVCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRWludHLDpGdlIHBybyBTZWl0ZSddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBQQUdJTkdfUEFHRU9GVEVYVCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnU2VpdGUge3tDVVJSRU5UUEFHRX19IHZvbiB7e1RPVEFMUEFHRVN9fSddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBUSU5ZTUNFX0ZJTEVTRUxFQ1RfQ0FOQ0VMKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdBYmJyZWNoZW4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVElOWU1DRV9GSUxFU0VMRUNUX0RJQUxPR1RJVExFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdEYXRlaSBhdXN3w6RobGVuJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IFRJTllNQ0VfRklMRVNFTEVDVF9PSygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnT0snXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVVBMT0FEX0JVVFRPTl9CUk9XU0UoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0Jyb3dzZS4uLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBVUExPQURfQlVUVE9OX1VQTE9BRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnVXBsb2FkJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IFVQTE9BRF9OT19GSUxFX1NFTEVDVEVEKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdLZWluZSBEYXRlaSBhdXNnZXfDpGhsdCddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX0RBVEVUSU1FRk9STUFUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIGlzdCBrZWluIGfDvGx0aWdlcyBEYXR1bS4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9FTUFJTCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBpc3Qga2VpbmUgRS1NYWlsIEFkcmVzc2UnXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9GSUxFU01JTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRXMgbcO8c3NlbiBtaW4uIHt7TUlORklMRVN9fSBEYXRlaWVuIGhvY2hnZWxhZGVuIHNlaW4uJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfTUFYREFURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBtdXNzIMOkbHRlciBvZGVyIGdsZWljaCB7e01BWERBVEV9fSBzZWluLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX01BWFRJTUUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgbXVzcyDDpGx0ZXIgb2RlciBnbGVpY2gge3tNQVhUSU1FfX0gc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NQVhWQUxVRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIGRhcmYgbmljaHQgZ3LDtnNzZXIgYWxzIHt7TUFYVkFMVUV9fSBzZWluLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX01JTkRBVEUoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgbXVzcyBuZXVlciBvZGVyIGdsZWljaCB7e01JTkRBVEV9fSBzZWluLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX01JTlRFWFRMRU5HVEgoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgZXJmb3JkZXJ0IG1pbi4ge3tNSU5URVhUTEVOR1RIfX0gWmVpY2hlbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5USU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIG11c3MgbmV1ZXIgb2RlciBnbGVpY2gge3tNSU5USU1FfX0gc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NSU5WQUxVRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnV2VydCBkYXJmIG5pY2h0IGtsZWluZXIgYWxzIHt7TUlOVkFMVUV9fSBzZWluLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX01VTFRJTEFOR1VBR0VSRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRXMgbcO8c3NlbiBhbGxlIFNwcmFjaGVuIGVyZmFzc3Qgc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9NVUxUSUxBTkdVQUdFUkVRVUlSRURBTlkoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0VzIG11c3MgbWluLiAxIFNwcmFjaGUgZXJmYXNzdCBzZWluLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1BBVFRFUk4oKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ1dlcnQgZW50c3ByaWNodCBuaWNodCBkZXIgRm9ybWF0IFZvcmxhZ2UuJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfUkVRVUlSRUQoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgaXN0IGVyZm9yZGVybGljaC4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX0RBVEVUSU1FRk9STUFUKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgaXN0IGtlaW4gZ8O8bHRpZ2VzIERhdHVtLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfRU1BSUwoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBpc3Qga2VpbmUgRS1NYWlsIEFkcmVzc2UnXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX0ZJTEVTTUlOKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgbXVzcyBtaW4uIHt7TUlORklMRVN9fSBEYXRlaWVuIGhvY2hnZWxhZGVuIGhhYmVuLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUFYREFURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIG11c3Mgw6RsdGVyIG9kZXIgZ2xlaWNoIHt7TUFYREFURX19IHNlaW4uJ11dKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IFZBTElEQVRJT05fRVJST1JfU1VNTUFSWV9NQVhUSU1FKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgbXVzcyDDpGx0ZXIgb2RlciBnbGVpY2gge3tNQVhUSU1FfX0gc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01BWFZBTFVFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdXZXJ0IGRhcmYgbmljaHQgZ3LDtnNzZXIgYWxzIHt7TUFYVkFMVUV9fSBzZWluLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOREFURSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIG11c3MgbmV1ZXIgb2RlciBnbGVpY2gge3tNSU5EQVRFfX0gc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTlRFWFRMRU5HVEgoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBlcmZvcmRlcnQgbWluLiB7e01JTlRFWFRMRU5HVEh9fSBaZWljaGVuLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTUlOVElNRSgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIG11c3MgbmV1ZXIgb2RlciBnbGVpY2gge3tNSU5USU1FfX0gc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01JTlZBTFVFKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgZGFyZiBuaWNodCBrbGVpbmVyIGFscyB7e01JTlZBTFVFfX0gc2Vpbi4nXV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgVkFMSURBVElPTl9FUlJPUl9TVU1NQVJZX01VTFRJTEFOR1VBR0VSRVFVSVJFRCgpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIG11c3MgYWxsZSBTcHJhY2hlbiBlcmZhc3N0IGhhYmVuLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfTVVMVElMQU5HVUFHRVJFUVVJUkVEQU5ZKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbWydkZScsICdGZWxkIFwie3tGSUVMRH19XCIgbXVzcyBtaW4uIDEgU3ByYWNoZSBlcmZhc3N0IGhhYmVuLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfUEFUVEVSTigpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZGUnLCAnRmVsZCBcInt7RklFTER9fVwiIGVudHNwcmljaHQgbmljaHQgZGVyIEZvcm1hdCBWb3JsYWdlLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBWQUxJREFUSU9OX0VSUk9SX1NVTU1BUllfUkVRVUlSRUQoKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtbJ2RlJywgJ0ZlbGQgXCJ7e0ZJRUxEfX1cIiBpc3QgZXJmb3JkZXJsaWNoLiddXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm90ZWN0ZWQgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpZSBNZXRob2RlIGVyZ2lidCBkaWUgc2VsZWN0ZSBTcHJhY2hlIChzdHJpbmcpICBhbmhhbmQgdm9uIEtleSB1bmQgUGFyYW1zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBHZXRTdHJpbmcoa2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsYW5ndWFnZTogc3RyaW5nID0gdGhpcy5HZXRMYW5ndWFnZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuaGFzKGxhbmd1YWdlKSkge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSB0aGlzLkdldEZhbGxiYWNrTGFuZ3VhZ2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gS2V5IGlmIG5vIExhbmd1YWdlIGV4aXN0c1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuaGFzKGxhbmd1YWdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5nZXQobGFuZ3VhZ2UpLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZGF0YS5nZXQobGFuZ3VhZ2UpLmdldChrZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcyAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjogSW50ZXJwb2xhdGlvbiA9IG5ldyBJbnRlcnBvbGF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChmb3JtYXR0ZXIuaW50ZXJwb2xhdGVTdHJpbmcocmVzb3VyY2UsIHBhcmFtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoa2V5KTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpZSBGdW5rdGlvbiBzZXR6dCBkaWUgZGVmYXVsdCBTcHJhY2hlIGF1ZiBERSwgZmFsbHMgZGllIFNwcmFjaC1TZXR6dW5nIG5pY2h0IG3DtmdsaWNoIGlzdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBHZXRGYWxsYmFja0xhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdkZSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaWUgRnVua3Rpb24gZXJnaWJ0IGRpZSBhdXNnZXfDpGhsdGUgU3ByYWNoZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBHZXRMYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGxhbmd1YWdlOiBzdHJpbmcgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XHJcblxyXG4gICAgICAgIGlmIChsYW5ndWFnZS5pbmRleE9mKCctJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2Uuc3BsaXQoJy0nKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuXHJcbi8vICNlbmRyZWdpb24gRXhwb3J0ZWQgQ2xhc3Nlc1xyXG4iXX0=
|