@finbourne/lusid-sdk-angular18 0.11.10068 → 0.11.10120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/esm2022/lib/.generated/api/allocationEvents.service.mjs +626 -0
  2. package/esm2022/lib/.generated/api/allocationMaps.service.mjs +700 -0
  3. package/esm2022/lib/.generated/api/api.mjs +6 -2
  4. package/esm2022/lib/.generated/api/compliance.service.mjs +66 -1
  5. package/esm2022/lib/.generated/api/entities.service.mjs +69 -1
  6. package/esm2022/lib/.generated/api/fundStructures.service.mjs +303 -1
  7. package/esm2022/lib/.generated/api/funds.service.mjs +5 -1
  8. package/esm2022/lib/.generated/api/identifierDefinitions.service.mjs +4 -4
  9. package/esm2022/lib/.generated/api/propertyDefinitions.service.mjs +8 -8
  10. package/esm2022/lib/.generated/api/recs.service.mjs +13 -1
  11. package/esm2022/lib/.generated/api/transfers.service.mjs +91 -1
  12. package/esm2022/lib/.generated/model/aggregateNumericTolerance.mjs +1 -1
  13. package/esm2022/lib/.generated/model/allocationEvent.mjs +2 -0
  14. package/esm2022/lib/.generated/model/allocationEventBookRequest.mjs +12 -0
  15. package/esm2022/lib/.generated/model/allocationEventReallocateRequest.mjs +2 -0
  16. package/esm2022/lib/.generated/model/allocationEventRequest.mjs +2 -0
  17. package/esm2022/lib/.generated/model/allocationMap.mjs +2 -0
  18. package/esm2022/lib/.generated/model/allocationMapAllocation.mjs +12 -0
  19. package/esm2022/lib/.generated/model/allocationMapBasis.mjs +2 -0
  20. package/esm2022/lib/.generated/model/allocationMapBasisValue.mjs +12 -0
  21. package/esm2022/lib/.generated/model/allocationMapEventBasis.mjs +2 -0
  22. package/esm2022/lib/.generated/model/allocationMapException.mjs +12 -0
  23. package/esm2022/lib/.generated/model/allocationMapFixedFactor.mjs +12 -0
  24. package/esm2022/lib/.generated/model/allocationMapParticipants.mjs +2 -0
  25. package/esm2022/lib/.generated/model/allocationMapRequest.mjs +2 -0
  26. package/esm2022/lib/.generated/model/allocationMapResolution.mjs +2 -0
  27. package/esm2022/lib/.generated/model/allocationMapResolveRequest.mjs +2 -0
  28. package/esm2022/lib/.generated/model/bondForwardModelOptions.mjs +3 -2
  29. package/esm2022/lib/.generated/model/bondLookupModelOptions.mjs +3 -2
  30. package/esm2022/lib/.generated/model/bucketSetResult.mjs +1 -1
  31. package/esm2022/lib/.generated/model/cashFlowDetail.mjs +1 -1
  32. package/esm2022/lib/.generated/model/cdsIndex.mjs +1 -1
  33. package/esm2022/lib/.generated/model/cdsModelOptions.mjs +3 -2
  34. package/esm2022/lib/.generated/model/consentEvent.mjs +1 -1
  35. package/esm2022/lib/.generated/model/coreAttributeOptionalityTolerance.mjs +1 -1
  36. package/esm2022/lib/.generated/model/coreDateTolerance.mjs +1 -1
  37. package/esm2022/lib/.generated/model/coreStringCrossTolerance.mjs +1 -1
  38. package/esm2022/lib/.generated/model/corporateActionSource.mjs +1 -1
  39. package/esm2022/lib/.generated/model/corporateActionSourceEntity.mjs +2 -0
  40. package/esm2022/lib/.generated/model/createDerivedPropertyDefinitionRequest.mjs +3 -2
  41. package/esm2022/lib/.generated/model/createIdentifierDefinitionRequest.mjs +3 -2
  42. package/esm2022/lib/.generated/model/createMatchingRulesetRequest.mjs +1 -1
  43. package/esm2022/lib/.generated/model/createPropertyDefinitionRequest.mjs +3 -2
  44. package/esm2022/lib/.generated/model/createRecDefinitionRequest.mjs +1 -1
  45. package/esm2022/lib/.generated/model/creditDefaultSwap.mjs +1 -1
  46. package/esm2022/lib/.generated/model/decoratedComplianceRunSummaryRequest.mjs +2 -0
  47. package/esm2022/lib/.generated/model/emptyModelOptions.mjs +3 -2
  48. package/esm2022/lib/.generated/model/equityModelOptions.mjs +3 -2
  49. package/esm2022/lib/.generated/model/feeAccrual.mjs +1 -1
  50. package/esm2022/lib/.generated/model/fixedSchedule.mjs +1 -1
  51. package/esm2022/lib/.generated/model/flexibleLoan.mjs +1 -1
  52. package/esm2022/lib/.generated/model/flexibleLoanPricerOptions.mjs +3 -2
  53. package/esm2022/lib/.generated/model/floatSchedule.mjs +1 -1
  54. package/esm2022/lib/.generated/model/fund.mjs +1 -1
  55. package/esm2022/lib/.generated/model/fundDefinitionRequest.mjs +1 -1
  56. package/esm2022/lib/.generated/model/fundRequest.mjs +1 -1
  57. package/esm2022/lib/.generated/model/fundStructure.mjs +1 -1
  58. package/esm2022/lib/.generated/model/fundStructureAllocationBasis.mjs +2 -0
  59. package/esm2022/lib/.generated/model/fundStructureEdge.mjs +1 -1
  60. package/esm2022/lib/.generated/model/fundStructureEdgeTarget.mjs +1 -1
  61. package/esm2022/lib/.generated/model/fundStructureMemberRequest.mjs +2 -0
  62. package/esm2022/lib/.generated/model/fundStructureNode.mjs +1 -11
  63. package/esm2022/lib/.generated/model/fundStructureRequest.mjs +1 -1
  64. package/esm2022/lib/.generated/model/fundingLegModelOptions.mjs +3 -2
  65. package/esm2022/lib/.generated/model/fxForwardModelOptions.mjs +3 -2
  66. package/esm2022/lib/.generated/model/fxForwardPipsCurveData.mjs +1 -1
  67. package/esm2022/lib/.generated/model/fxForwardTenorPipsCurveData.mjs +1 -1
  68. package/esm2022/lib/.generated/model/hullWhiteModelOptions.mjs +3 -2
  69. package/esm2022/lib/.generated/model/identifierDefinition.mjs +3 -2
  70. package/esm2022/lib/.generated/model/indexModelOptions.mjs +3 -2
  71. package/esm2022/lib/.generated/model/inflationLinkedBond.mjs +1 -1
  72. package/esm2022/lib/.generated/model/matchingRuleset.mjs +1 -1
  73. package/esm2022/lib/.generated/model/modelOptions.mjs +3 -2
  74. package/esm2022/lib/.generated/model/modelOptionsType.mjs +3 -2
  75. package/esm2022/lib/.generated/model/models.mjs +29 -1
  76. package/esm2022/lib/.generated/model/navType.mjs +1 -1
  77. package/esm2022/lib/.generated/model/navTypeDefinition.mjs +1 -1
  78. package/esm2022/lib/.generated/model/opaqueModelOptions.mjs +3 -2
  79. package/esm2022/lib/.generated/model/pagedResourceListOfAllocationEvent.mjs +2 -0
  80. package/esm2022/lib/.generated/model/pagedResourceListOfAllocationMap.mjs +2 -0
  81. package/esm2022/lib/.generated/model/pikSchedule.mjs +1 -1
  82. package/esm2022/lib/.generated/model/placementUpdateRequest.mjs +1 -1
  83. package/esm2022/lib/.generated/model/propertyDefinition.mjs +3 -2
  84. package/esm2022/lib/.generated/model/propertyDefinitionSearchResult.mjs +3 -2
  85. package/esm2022/lib/.generated/model/propertyDomain.mjs +3 -2
  86. package/esm2022/lib/.generated/model/queryBucketCashFlowDrillDownRequest.mjs +1 -1
  87. package/esm2022/lib/.generated/model/recDatasetSchema.mjs +1 -1
  88. package/esm2022/lib/.generated/model/recDefSource.mjs +1 -1
  89. package/esm2022/lib/.generated/model/recDefinition.mjs +1 -1
  90. package/esm2022/lib/.generated/model/recResultHoldingItem.mjs +1 -1
  91. package/esm2022/lib/.generated/model/recResultItem.mjs +1 -1
  92. package/esm2022/lib/.generated/model/recResultSettlementActivityItem.mjs +1 -1
  93. package/esm2022/lib/.generated/model/recResultTransactionItem.mjs +1 -1
  94. package/esm2022/lib/.generated/model/recReviewRequirementRule.mjs +1 -1
  95. package/esm2022/lib/.generated/model/settleExpectedActivityRuleNames.mjs +12 -0
  96. package/esm2022/lib/.generated/model/settleExpectedActivityWritebackConfiguration.mjs +2 -0
  97. package/esm2022/lib/.generated/model/settleExpectedActivityWritebackSuggestion.mjs +2 -0
  98. package/esm2022/lib/.generated/model/simpleModelOptions.mjs +19 -0
  99. package/esm2022/lib/.generated/model/subscriptionDefinition.mjs +1 -1
  100. package/esm2022/lib/.generated/model/totalReturnSwap.mjs +1 -1
  101. package/esm2022/lib/.generated/model/transactionEntityLink.mjs +1 -1
  102. package/esm2022/lib/.generated/model/updateIdentifierDefinitionRequest.mjs +1 -1
  103. package/esm2022/lib/.generated/model/updateMatchingRulesetRequest.mjs +1 -1
  104. package/esm2022/lib/.generated/model/updateRecDefinitionRequest.mjs +1 -1
  105. package/esm2022/lib/.generated/model/valuationPointDataResponse.mjs +1 -1
  106. package/esm2022/lib/.generated/model/writebackConfiguration.mjs +2 -0
  107. package/esm2022/lib/.generated/model/writebackResultPattern.mjs +12 -0
  108. package/esm2022/lib/.generated/model/writebackSuggestion.mjs +2 -0
  109. package/fesm2022/finbourne-lusid-sdk-angular18.mjs +2380 -426
  110. package/fesm2022/finbourne-lusid-sdk-angular18.mjs.map +2 -2
  111. package/lib/.generated/api/allocationEvents.service.d.ts +242 -0
  112. package/lib/.generated/api/allocationMaps.service.d.ts +277 -0
  113. package/lib/.generated/api/api.d.ts +5 -1
  114. package/lib/.generated/api/compliance.service.d.ts +27 -0
  115. package/lib/.generated/api/entities.service.d.ts +31 -0
  116. package/lib/.generated/api/fundStructures.service.d.ts +131 -1
  117. package/lib/.generated/api/funds.service.d.ts +2 -0
  118. package/lib/.generated/api/identifierDefinitions.service.d.ts +6 -6
  119. package/lib/.generated/api/propertyDefinitions.service.d.ts +14 -14
  120. package/lib/.generated/api/recs.service.d.ts +5 -1
  121. package/lib/.generated/api/transfers.service.d.ts +37 -0
  122. package/lib/.generated/model/aggregateNumericTolerance.d.ts +4 -4
  123. package/lib/.generated/model/allocationEvent.d.ts +71 -0
  124. package/lib/.generated/model/allocationEventBookRequest.d.ts +19 -0
  125. package/lib/.generated/model/allocationEventReallocateRequest.d.ts +24 -0
  126. package/lib/.generated/model/allocationEventRequest.d.ts +50 -0
  127. package/lib/.generated/model/allocationMap.d.ts +42 -0
  128. package/lib/.generated/model/allocationMapAllocation.d.ts +35 -0
  129. package/lib/.generated/model/allocationMapBasis.d.ts +30 -0
  130. package/lib/.generated/model/allocationMapBasisValue.d.ts +23 -0
  131. package/lib/.generated/model/allocationMapEventBasis.d.ts +21 -0
  132. package/lib/.generated/model/allocationMapException.d.ts +35 -0
  133. package/lib/.generated/model/allocationMapFixedFactor.d.ts +23 -0
  134. package/lib/.generated/model/allocationMapParticipants.d.ts +33 -0
  135. package/lib/.generated/model/allocationMapRequest.d.ts +41 -0
  136. package/lib/.generated/model/allocationMapResolution.d.ts +56 -0
  137. package/lib/.generated/model/allocationMapResolveRequest.d.ts +32 -0
  138. package/lib/.generated/model/bondForwardModelOptions.d.ts +3 -2
  139. package/lib/.generated/model/bondLookupModelOptions.d.ts +4 -3
  140. package/lib/.generated/model/bucketSetResult.d.ts +4 -0
  141. package/lib/.generated/model/cashFlowDetail.d.ts +9 -1
  142. package/lib/.generated/model/cdsIndex.d.ts +1 -1
  143. package/lib/.generated/model/cdsModelOptions.d.ts +3 -2
  144. package/lib/.generated/model/consentEvent.d.ts +2 -2
  145. package/lib/.generated/model/coreAttributeOptionalityTolerance.d.ts +1 -1
  146. package/lib/.generated/model/coreDateTolerance.d.ts +2 -2
  147. package/lib/.generated/model/coreStringCrossTolerance.d.ts +1 -1
  148. package/lib/.generated/model/corporateActionSource.d.ts +2 -0
  149. package/lib/.generated/model/corporateActionSourceEntity.d.ts +54 -0
  150. package/lib/.generated/model/createDerivedPropertyDefinitionRequest.d.ts +3 -2
  151. package/lib/.generated/model/createIdentifierDefinitionRequest.d.ts +3 -2
  152. package/lib/.generated/model/createMatchingRulesetRequest.d.ts +5 -0
  153. package/lib/.generated/model/createPropertyDefinitionRequest.d.ts +3 -2
  154. package/lib/.generated/model/createRecDefinitionRequest.d.ts +8 -1
  155. package/lib/.generated/model/creditDefaultSwap.d.ts +1 -1
  156. package/lib/.generated/model/decoratedComplianceRunSummaryRequest.d.ts +20 -0
  157. package/lib/.generated/model/emptyModelOptions.d.ts +3 -2
  158. package/lib/.generated/model/equityModelOptions.d.ts +3 -2
  159. package/lib/.generated/model/feeAccrual.d.ts +1 -1
  160. package/lib/.generated/model/fixedSchedule.d.ts +16 -0
  161. package/lib/.generated/model/flexibleLoan.d.ts +4 -0
  162. package/lib/.generated/model/flexibleLoanPricerOptions.d.ts +3 -2
  163. package/lib/.generated/model/floatSchedule.d.ts +16 -0
  164. package/lib/.generated/model/fund.d.ts +5 -1
  165. package/lib/.generated/model/fundDefinitionRequest.d.ts +5 -1
  166. package/lib/.generated/model/fundRequest.d.ts +1 -1
  167. package/lib/.generated/model/fundStructure.d.ts +8 -3
  168. package/lib/.generated/model/fundStructureAllocationBasis.d.ts +25 -0
  169. package/lib/.generated/model/fundStructureEdge.d.ts +8 -2
  170. package/lib/.generated/model/fundStructureEdgeTarget.d.ts +4 -4
  171. package/lib/.generated/model/fundStructureMemberRequest.d.ts +22 -0
  172. package/lib/.generated/model/fundStructureNode.d.ts +9 -1
  173. package/lib/.generated/model/fundStructureRequest.d.ts +13 -9
  174. package/lib/.generated/model/fundingLegModelOptions.d.ts +3 -2
  175. package/lib/.generated/model/fxForwardModelOptions.d.ts +3 -2
  176. package/lib/.generated/model/fxForwardPipsCurveData.d.ts +4 -0
  177. package/lib/.generated/model/fxForwardTenorPipsCurveData.d.ts +4 -0
  178. package/lib/.generated/model/hullWhiteModelOptions.d.ts +3 -2
  179. package/lib/.generated/model/identifierDefinition.d.ts +3 -2
  180. package/lib/.generated/model/indexModelOptions.d.ts +3 -2
  181. package/lib/.generated/model/inflationLinkedBond.d.ts +16 -0
  182. package/lib/.generated/model/matchingRuleset.d.ts +5 -0
  183. package/lib/.generated/model/modelOptions.d.ts +3 -2
  184. package/lib/.generated/model/modelOptionsType.d.ts +2 -1
  185. package/lib/.generated/model/models.d.ts +28 -0
  186. package/lib/.generated/model/navType.d.ts +4 -0
  187. package/lib/.generated/model/navTypeDefinition.d.ts +4 -0
  188. package/lib/.generated/model/opaqueModelOptions.d.ts +3 -2
  189. package/lib/.generated/model/pagedResourceListOfAllocationEvent.d.ts +19 -0
  190. package/lib/.generated/model/pagedResourceListOfAllocationMap.d.ts +19 -0
  191. package/lib/.generated/model/pikSchedule.d.ts +3 -1
  192. package/lib/.generated/model/placementUpdateRequest.d.ts +1 -1
  193. package/lib/.generated/model/propertyDefinition.d.ts +3 -2
  194. package/lib/.generated/model/propertyDefinitionSearchResult.d.ts +3 -2
  195. package/lib/.generated/model/propertyDomain.d.ts +2 -1
  196. package/lib/.generated/model/queryBucketCashFlowDrillDownRequest.d.ts +4 -0
  197. package/lib/.generated/model/recDatasetSchema.d.ts +1 -1
  198. package/lib/.generated/model/recDefSource.d.ts +1 -1
  199. package/lib/.generated/model/recDefinition.d.ts +8 -1
  200. package/lib/.generated/model/recResultHoldingItem.d.ts +5 -0
  201. package/lib/.generated/model/recResultSettlementActivityItem.d.ts +5 -0
  202. package/lib/.generated/model/recResultTransactionItem.d.ts +5 -0
  203. package/lib/.generated/model/recReviewRequirementRule.d.ts +1 -1
  204. package/lib/.generated/model/settleExpectedActivityRuleNames.d.ts +27 -0
  205. package/lib/.generated/model/settleExpectedActivityWritebackConfiguration.d.ts +30 -0
  206. package/lib/.generated/model/settleExpectedActivityWritebackSuggestion.d.ts +25 -0
  207. package/lib/.generated/model/simpleModelOptions.d.ts +46 -0
  208. package/lib/.generated/model/subscriptionDefinition.d.ts +1 -1
  209. package/lib/.generated/model/totalReturnSwap.d.ts +1 -1
  210. package/lib/.generated/model/transactionEntityLink.d.ts +1 -1
  211. package/lib/.generated/model/updateIdentifierDefinitionRequest.d.ts +4 -0
  212. package/lib/.generated/model/updateMatchingRulesetRequest.d.ts +5 -0
  213. package/lib/.generated/model/updateRecDefinitionRequest.d.ts +8 -1
  214. package/lib/.generated/model/valuationPointDataResponse.d.ts +4 -0
  215. package/lib/.generated/model/writebackConfiguration.d.ts +10 -0
  216. package/lib/.generated/model/writebackResultPattern.d.ts +27 -0
  217. package/lib/.generated/model/writebackSuggestion.d.ts +10 -0
  218. package/package.json +1 -1
@@ -79,6 +79,88 @@ export class FundStructuresService {
79
79
  }
80
80
  return httpParams;
81
81
  }
82
+ addFundStructureMember(requestParameters, observe = 'body', reportProgress = false, options) {
83
+ const scope = requestParameters?.scope;
84
+ if (scope === null || scope === undefined) {
85
+ throw new Error('Required parameter scope was null or undefined when calling addFundStructureMember.');
86
+ }
87
+ const code = requestParameters?.code;
88
+ if (code === null || code === undefined) {
89
+ throw new Error('Required parameter code was null or undefined when calling addFundStructureMember.');
90
+ }
91
+ const fundStructureMemberRequest = requestParameters?.fundStructureMemberRequest;
92
+ if (fundStructureMemberRequest === null || fundStructureMemberRequest === undefined) {
93
+ throw new Error('Required parameter fundStructureMemberRequest was null or undefined when calling addFundStructureMember.');
94
+ }
95
+ const effectiveAt = requestParameters?.effectiveAt;
96
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
97
+ if (effectiveAt !== undefined && effectiveAt !== null) {
98
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
99
+ }
100
+ let localVarHeaders = this.defaultHeaders;
101
+ let localVarCredential;
102
+ // authentication (oauth2) required
103
+ localVarCredential = this.configuration.lookupCredential('oauth2');
104
+ if (localVarCredential) {
105
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
106
+ }
107
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
108
+ if (localVarHttpHeaderAcceptSelected === undefined) {
109
+ // to determine the Accept header
110
+ const httpHeaderAccepts = [
111
+ 'text/plain',
112
+ 'application/json',
113
+ 'text/json'
114
+ ];
115
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
116
+ }
117
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
118
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
119
+ }
120
+ let localVarHttpContext = options && options.context;
121
+ if (localVarHttpContext === undefined) {
122
+ localVarHttpContext = new HttpContext();
123
+ }
124
+ let localVarTransferCache = options && options.transferCache;
125
+ if (localVarTransferCache === undefined) {
126
+ localVarTransferCache = true;
127
+ }
128
+ // to determine the Content-Type header
129
+ const consumes = [
130
+ 'application/json-patch+json',
131
+ 'application/json',
132
+ 'text/json',
133
+ 'application/*+json'
134
+ ];
135
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
136
+ if (httpContentTypeSelected !== undefined) {
137
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
138
+ }
139
+ let responseType_ = 'json';
140
+ if (localVarHttpHeaderAcceptSelected) {
141
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
142
+ responseType_ = 'text';
143
+ }
144
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
145
+ responseType_ = 'json';
146
+ }
147
+ else {
148
+ responseType_ = 'blob';
149
+ }
150
+ }
151
+ let localVarPath = `/api/fundstructures/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/members`;
152
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
153
+ context: localVarHttpContext,
154
+ body: fundStructureMemberRequest,
155
+ params: localVarQueryParameters,
156
+ responseType: responseType_,
157
+ withCredentials: this.configuration.withCredentials,
158
+ headers: localVarHeaders,
159
+ observe: observe,
160
+ transferCache: localVarTransferCache,
161
+ reportProgress: reportProgress
162
+ });
163
+ }
82
164
  createFundStructure(requestParameters, observe = 'body', reportProgress = false, options) {
83
165
  const scope = requestParameters?.scope;
84
166
  if (scope === null || scope === undefined) {
@@ -151,6 +233,72 @@ export class FundStructuresService {
151
233
  reportProgress: reportProgress
152
234
  });
153
235
  }
236
+ deleteFundStructure(requestParameters, observe = 'body', reportProgress = false, options) {
237
+ const scope = requestParameters?.scope;
238
+ if (scope === null || scope === undefined) {
239
+ throw new Error('Required parameter scope was null or undefined when calling deleteFundStructure.');
240
+ }
241
+ const code = requestParameters?.code;
242
+ if (code === null || code === undefined) {
243
+ throw new Error('Required parameter code was null or undefined when calling deleteFundStructure.');
244
+ }
245
+ const effectiveAt = requestParameters?.effectiveAt;
246
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
247
+ if (effectiveAt !== undefined && effectiveAt !== null) {
248
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
249
+ }
250
+ let localVarHeaders = this.defaultHeaders;
251
+ let localVarCredential;
252
+ // authentication (oauth2) required
253
+ localVarCredential = this.configuration.lookupCredential('oauth2');
254
+ if (localVarCredential) {
255
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
256
+ }
257
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
258
+ if (localVarHttpHeaderAcceptSelected === undefined) {
259
+ // to determine the Accept header
260
+ const httpHeaderAccepts = [
261
+ 'text/plain',
262
+ 'application/json',
263
+ 'text/json'
264
+ ];
265
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
266
+ }
267
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
268
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
269
+ }
270
+ let localVarHttpContext = options && options.context;
271
+ if (localVarHttpContext === undefined) {
272
+ localVarHttpContext = new HttpContext();
273
+ }
274
+ let localVarTransferCache = options && options.transferCache;
275
+ if (localVarTransferCache === undefined) {
276
+ localVarTransferCache = true;
277
+ }
278
+ let responseType_ = 'json';
279
+ if (localVarHttpHeaderAcceptSelected) {
280
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
281
+ responseType_ = 'text';
282
+ }
283
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
284
+ responseType_ = 'json';
285
+ }
286
+ else {
287
+ responseType_ = 'blob';
288
+ }
289
+ }
290
+ let localVarPath = `/api/fundstructures/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
291
+ return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, {
292
+ context: localVarHttpContext,
293
+ params: localVarQueryParameters,
294
+ responseType: responseType_,
295
+ withCredentials: this.configuration.withCredentials,
296
+ headers: localVarHeaders,
297
+ observe: observe,
298
+ transferCache: localVarTransferCache,
299
+ reportProgress: reportProgress
300
+ });
301
+ }
154
302
  getFundStructure(requestParameters, observe = 'body', reportProgress = false, options) {
155
303
  const scope = requestParameters?.scope;
156
304
  if (scope === null || scope === undefined) {
@@ -160,9 +308,13 @@ export class FundStructuresService {
160
308
  if (code === null || code === undefined) {
161
309
  throw new Error('Required parameter code was null or undefined when calling getFundStructure.');
162
310
  }
311
+ const effectiveAt = requestParameters?.effectiveAt;
163
312
  const asAt = requestParameters?.asAt;
164
313
  const propertyKeys = requestParameters?.propertyKeys;
165
314
  let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
315
+ if (effectiveAt !== undefined && effectiveAt !== null) {
316
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
317
+ }
166
318
  if (asAt !== undefined && asAt !== null) {
167
319
  localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, asAt, 'asAt');
168
320
  }
@@ -224,6 +376,7 @@ export class FundStructuresService {
224
376
  });
225
377
  }
226
378
  listFundStructures(requestParameters, observe = 'body', reportProgress = false, options) {
379
+ const effectiveAt = requestParameters?.effectiveAt;
227
380
  const asAt = requestParameters?.asAt;
228
381
  const page = requestParameters?.page;
229
382
  const limit = requestParameters?.limit;
@@ -231,6 +384,9 @@ export class FundStructuresService {
231
384
  const sortBy = requestParameters?.sortBy;
232
385
  const propertyKeys = requestParameters?.propertyKeys;
233
386
  let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
387
+ if (effectiveAt !== undefined && effectiveAt !== null) {
388
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
389
+ }
234
390
  if (asAt !== undefined && asAt !== null) {
235
391
  localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, asAt, 'asAt');
236
392
  }
@@ -305,6 +461,152 @@ export class FundStructuresService {
305
461
  reportProgress: reportProgress
306
462
  });
307
463
  }
464
+ removeFundStructureMember(requestParameters, observe = 'body', reportProgress = false, options) {
465
+ const scope = requestParameters?.scope;
466
+ if (scope === null || scope === undefined) {
467
+ throw new Error('Required parameter scope was null or undefined when calling removeFundStructureMember.');
468
+ }
469
+ const code = requestParameters?.code;
470
+ if (code === null || code === undefined) {
471
+ throw new Error('Required parameter code was null or undefined when calling removeFundStructureMember.');
472
+ }
473
+ const nodeCode = requestParameters?.nodeCode;
474
+ if (nodeCode === null || nodeCode === undefined) {
475
+ throw new Error('Required parameter nodeCode was null or undefined when calling removeFundStructureMember.');
476
+ }
477
+ const effectiveAt = requestParameters?.effectiveAt;
478
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
479
+ if (effectiveAt !== undefined && effectiveAt !== null) {
480
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
481
+ }
482
+ let localVarHeaders = this.defaultHeaders;
483
+ let localVarCredential;
484
+ // authentication (oauth2) required
485
+ localVarCredential = this.configuration.lookupCredential('oauth2');
486
+ if (localVarCredential) {
487
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
488
+ }
489
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
490
+ if (localVarHttpHeaderAcceptSelected === undefined) {
491
+ // to determine the Accept header
492
+ const httpHeaderAccepts = [
493
+ 'text/plain',
494
+ 'application/json',
495
+ 'text/json'
496
+ ];
497
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
498
+ }
499
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
500
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
501
+ }
502
+ let localVarHttpContext = options && options.context;
503
+ if (localVarHttpContext === undefined) {
504
+ localVarHttpContext = new HttpContext();
505
+ }
506
+ let localVarTransferCache = options && options.transferCache;
507
+ if (localVarTransferCache === undefined) {
508
+ localVarTransferCache = true;
509
+ }
510
+ let responseType_ = 'json';
511
+ if (localVarHttpHeaderAcceptSelected) {
512
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
513
+ responseType_ = 'text';
514
+ }
515
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
516
+ responseType_ = 'json';
517
+ }
518
+ else {
519
+ responseType_ = 'blob';
520
+ }
521
+ }
522
+ let localVarPath = `/api/fundstructures/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/members/${this.configuration.encodeParam({ name: "nodeCode", value: nodeCode, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
523
+ return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, {
524
+ context: localVarHttpContext,
525
+ params: localVarQueryParameters,
526
+ responseType: responseType_,
527
+ withCredentials: this.configuration.withCredentials,
528
+ headers: localVarHeaders,
529
+ observe: observe,
530
+ transferCache: localVarTransferCache,
531
+ reportProgress: reportProgress
532
+ });
533
+ }
534
+ upsertFundStructure(requestParameters, observe = 'body', reportProgress = false, options) {
535
+ const scope = requestParameters?.scope;
536
+ if (scope === null || scope === undefined) {
537
+ throw new Error('Required parameter scope was null or undefined when calling upsertFundStructure.');
538
+ }
539
+ const code = requestParameters?.code;
540
+ if (code === null || code === undefined) {
541
+ throw new Error('Required parameter code was null or undefined when calling upsertFundStructure.');
542
+ }
543
+ const fundStructureRequest = requestParameters?.fundStructureRequest;
544
+ if (fundStructureRequest === null || fundStructureRequest === undefined) {
545
+ throw new Error('Required parameter fundStructureRequest was null or undefined when calling upsertFundStructure.');
546
+ }
547
+ let localVarHeaders = this.defaultHeaders;
548
+ let localVarCredential;
549
+ // authentication (oauth2) required
550
+ localVarCredential = this.configuration.lookupCredential('oauth2');
551
+ if (localVarCredential) {
552
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
553
+ }
554
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
555
+ if (localVarHttpHeaderAcceptSelected === undefined) {
556
+ // to determine the Accept header
557
+ const httpHeaderAccepts = [
558
+ 'text/plain',
559
+ 'application/json',
560
+ 'text/json'
561
+ ];
562
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
563
+ }
564
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
565
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
566
+ }
567
+ let localVarHttpContext = options && options.context;
568
+ if (localVarHttpContext === undefined) {
569
+ localVarHttpContext = new HttpContext();
570
+ }
571
+ let localVarTransferCache = options && options.transferCache;
572
+ if (localVarTransferCache === undefined) {
573
+ localVarTransferCache = true;
574
+ }
575
+ // to determine the Content-Type header
576
+ const consumes = [
577
+ 'application/json-patch+json',
578
+ 'application/json',
579
+ 'text/json',
580
+ 'application/*+json'
581
+ ];
582
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
583
+ if (httpContentTypeSelected !== undefined) {
584
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
585
+ }
586
+ let responseType_ = 'json';
587
+ if (localVarHttpHeaderAcceptSelected) {
588
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
589
+ responseType_ = 'text';
590
+ }
591
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
592
+ responseType_ = 'json';
593
+ }
594
+ else {
595
+ responseType_ = 'blob';
596
+ }
597
+ }
598
+ let localVarPath = `/api/fundstructures/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
599
+ return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, {
600
+ context: localVarHttpContext,
601
+ body: fundStructureRequest,
602
+ responseType: responseType_,
603
+ withCredentials: this.configuration.withCredentials,
604
+ headers: localVarHeaders,
605
+ observe: observe,
606
+ transferCache: localVarTransferCache,
607
+ reportProgress: reportProgress
608
+ });
609
+ }
308
610
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FundStructuresService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
309
611
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FundStructuresService, providedIn: 'root' });
310
612
  }
@@ -321,4 +623,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
321
623
  }] }, { type: i2.Configuration, decorators: [{
322
624
  type: Optional
323
625
  }] }] });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZFN0cnVjdHVyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvZnVuZFN0cnVjdHVyZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWMvRSxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBMEIsY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUF3Q3JGLE1BQU0sT0FBTyxxQkFBcUI7SUFPUjtJQUxaLFFBQVEsR0FBRywyQkFBMkIsQ0FBQztJQUMxQyxjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNwQyxPQUFPLENBQXFCO0lBRW5DLFlBQXNCLFVBQXNCLEVBQWdDLFFBQXlCLEVBQWMsYUFBNEI7UUFBekgsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFR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LE1BQU07aUJBQ25COzswQkFRa0QsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBOEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTFVTSUQgQVBJXG4gKiAjIEludHJvZHVjdGlvbiAgVGhpcyBwYWdlIGRvY3VtZW50cyB0aGUgW0xVU0lEIEFQSXNdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyKSwgd2hpY2ggYWxsb3dzIGF1dGhvcmlzZWQgY2xpZW50cyB0byBxdWVyeSBhbmQgdXBkYXRlIHRoZWlyIGRhdGEgd2l0aGluIHRoZSBMVVNJRCBwbGF0Zm9ybS4gIFNES3MgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgTFVTSUQgQVBJcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2VzIGFuZCBmcmFtZXdvcmtzOiAgKiBbQyNdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWNzaGFycCkgKiBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstamF2YSkgKiBbSmF2YVNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstanMpICogW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstcHl0aG9uKSAqIFtBbmd1bGFyXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyKSAgVGhlIExVU0lEIHBsYXRmb3JtIGlzIG1hZGUgdXAgb2YgYSBudW1iZXIgb2Ygc3ViLWFwcGxpY2F0aW9ucy4gWW91IGNhbiBmaW5kIHRoZSBBUEkgLyBzd2FnZ2VyIGRvY3VtZW50YXRpb24gYnkgZm9sbG93aW5nIHRoZSBsaW5rcyBpbiB0aGUgdGFibGUgYmVsb3cuICAgfCBBcHBsaWNhdGlvbiAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJIC8gU3dhZ2dlciBEb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8IExVU0lEICAgICAgICAgfCBPcGVuLCBBUEktZmlyc3QsIGRldmVsb3Blci1mcmllbmRseSBpbnZlc3RtZW50IGRhdGEgcGxhdGZvcm0uICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYXBpL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICAgIHwgfCBXZWIgYXBwICAgICAgIHwgVXNlci1mYWNpbmcgZnJvbnQgZW5kIGZvciBMVVNJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwcC9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgU2NoZWR1bGVyICAgICB8IEF1dG9tYXRlZCBqb2Igc2NoZWR1bGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9zY2hlZHVsZXIyL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgfCB8IEluc2lnaHRzICAgICAgfCBNb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3Rpbmcgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vaW5zaWdodHMvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgIHwgfCBJZGVudGl0eSAgICAgIHwgSWRlbnRpdHkgbWFuYWdlbWVudCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggQWNjZXNzKSAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2lkZW50aXR5L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgQWNjZXNzICAgICAgICB8IEFjY2VzcyBjb250cm9sIGZvciBMVVNJRCAoaW4gY29uanVuY3Rpb24gd2l0aCBJZGVudGl0eSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hY2Nlc3Mvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgfCB8IERyaXZlICAgICAgICAgfCBTZWN1cmUgZmlsZSByZXBvc2l0b3J5IGFuZCBtYW5hZ2VyIGZvciBjb2xsYWJvcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vZHJpdmUvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgIHwgfCBMdW1pbmVzY2UgICAgIHwgRGF0YSB2aXJ0dWFsaXNhdGlvbiBzZXJ2aWNlIChxdWVyeSBkYXRhIGZyb20gbXVsdGlwbGUgcHJvdmlkZXJzLCBpbmNsdWRpbmcgTFVTSUQpIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2hvbmV5Y29tYi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICB8IHwgTm90aWZpY2F0aW9uICB8IE5vdGlmaWNhdGlvbiBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ub3RpZmljYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSAgfCB8IENvbmZpZ3VyYXRpb24gfCBGaWxlIHN0b3JlIGZvciBzZWNyZXRzIGFuZCBvdGhlciBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vY29uZmlndXJhdGlvbi9zd2FnZ2VyL2luZGV4Lmh0bWwpIHwgfCBXb3JrZmxvdyAgICAgIHwgV29ya2Zsb3cgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL3dvcmtmbG93L3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8ICAgIyBFcnJvciBDb2RlcyAgfCBDb2RlfE5hbWV8RGVzY3JpcHRpb24gfCB8IC0tLXwtLS18LS0tIHwgfCA8YSBuYW1lPVxcXCItMTBcXFwiPi0xMDwvYT58U2VydmVyIENvbmZpZ3VyYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiLTFcXFwiPi0xPC9hPnxVbmtub3duIGVycm9yfEFuIHVuZXhwZWN0ZWQgZXJyb3Igd2FzIGVuY291bnRlcmVkIG9uIG91ciBzaWRlLiB8IHwgPGEgbmFtZT1cXFwiMTAyXFxcIj4xMDI8L2E+fFZlcnNpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwM1xcXCI+MTAzPC9hPnxBcGkgUmF0ZSBMaW1pdCBWaW9sYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMTA0XFxcIj4xMDQ8L2E+fEluc3RydW1lbnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNVxcXCI+MTA1PC9hPnxQcm9wZXJ0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA2XFxcIj4xMDY8L2E+fFBvcnRmb2xpbyBSZWN1cnNpb24gRGVwdGh8ICB8IHwgPGEgbmFtZT1cXFwiMTA4XFxcIj4xMDg8L2E+fEdyb3VwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDlcXFwiPjEwOTwvYT58UG9ydGZvbGlvIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTBcXFwiPjExMDwvYT58UHJvcGVydHkgU2NoZW1hIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTFcXFwiPjExMTwvYT58UG9ydGZvbGlvIEFuY2VzdHJ5IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMTJcXFwiPjExMjwvYT58UG9ydGZvbGlvIFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTEzXFxcIj4xMTM8L2E+fE9ycGhhbmVkIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCIxMTlcXFwiPjExOTwvYT58TWlzc2luZyBCYXNlIENsYWltc3wgIHwgfCA8YSBuYW1lPVxcXCIxMjFcXFwiPjEyMTwvYT58UHJvcGVydHkgTm90IERlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTIyXFxcIj4xMjI8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFByb3BlcnR5fCAgfCB8IDxhIG5hbWU9XFxcIjEyM1xcXCI+MTIzPC9hPnxDYW5ub3QgTW9kaWZ5IEltbXV0YWJsZSBQcm9wZXJ0eSBGaWVsZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjRcXFwiPjEyNDwvYT58UHJvcGVydHkgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTI1XFxcIj4xMjU8L2E+fEludmFsaWQgUHJvcGVydHkgTGlmZSBUaW1lfCAgfCB8IDxhIG5hbWU9XFxcIjEyNlxcXCI+MTI2PC9hPnxQcm9wZXJ0eSBDb25zdHJhaW50IFN0eWxlIEV4Y2x1ZGVzIFByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTI3XFxcIj4xMjc8L2E+fENhbm5vdCBNb2RpZnkgRGVmYXVsdCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTI4XFxcIj4xMjg8L2E+fEdyb3VwIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyOVxcXCI+MTI5PC9hPnxObyBTdWNoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzBcXFwiPjEzMDwvYT58VW5kZWZpbmVkIFZhbHVlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMxXFxcIj4xMzE8L2E+fFVuc3VwcG9ydGVkIFZhbHVlIFR5cGUgRGVmaW5lZCBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMyXFxcIj4xMzI8L2E+fFZhbGlkYXRpb24gRXJyb3J8ICB8IHwgPGEgbmFtZT1cXFwiMTMzXFxcIj4xMzM8L2E+fExvb3AgRGV0ZWN0ZWQgSW4gR3JvdXAgSGllcmFyY2h5fCAgfCB8IDxhIG5hbWU9XFxcIjEzNFxcXCI+MTM0PC9hPnxVbmRlZmluZWQgQWNjZXB0YWJsZSBWYWx1ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMTM1XFxcIj4xMzU8L2E+fFN1YiBHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMzhcXFwiPjEzODwvYT58UHJpY2UgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMzlcXFwiPjEzOTwvYT58QW5hbHl0aWMgU3RvcmUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0MVxcXCI+MTQxPC9hPnxBbmFseXRpYyBTdG9yZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNDNcXFwiPjE0MzwvYT58Q2xpZW50IEluc3RydW1lbnQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQ0XFxcIj4xNDQ8L2E+fER1cGxpY2F0ZSBJbiBQYXJhbWV0ZXIgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0N1xcXCI+MTQ3PC9hPnxSZXN1bHRzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDhcXFwiPjE0ODwvYT58T3JkZXIgRmllbGQgTm90IEluIFJlc3VsdCBTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ5XFxcIj4xNDk8L2E+fE9wZXJhdGlvbiBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTUwXFxcIj4xNTA8L2E+fEVsYXN0aWMgU2VhcmNoIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjE1MVxcXCI+MTUxPC9hPnxJbnZhbGlkIFBhcmFtZXRlciBWYWx1ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTNcXFwiPjE1MzwvYT58Q29tbWFuZCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU0XFxcIj4xNTQ8L2E+fEVudGl0eSBTdGF0ZSBDb25zdHJ1Y3Rpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTVcXFwiPjE1NTwvYT58RW50aXR5IFRpbWVsaW5lIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1NlxcXCI+MTU2PC9hPnxDb25jdXJyZW5jeSBDb25mbGljdCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1N1xcXCI+MTU3PC9hPnxJbnZhbGlkIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTU4XFxcIj4xNTg8L2E+fEV2ZW50IFB1Ymxpc2ggVW5rbm93bnwgIHwgfCA8YSBuYW1lPVxcXCIxNTlcXFwiPjE1OTwvYT58RXZlbnQgUXVlcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjBcXFwiPjE2MDwvYT58QmxvYiBEaWQgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE2MlxcXCI+MTYyPC9hPnxTdWIgU3lzdGVtIFJlcXVlc3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjNcXFwiPjE2MzwvYT58U3ViIFN5c3RlbSBDb25maWd1cmF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY1XFxcIj4xNjU8L2E+fEZhaWxlZCBUbyBEZWxldGV8ICB8IHwgPGEgbmFtZT1cXFwiMTY2XFxcIj4xNjY8L2E+fFVwc2VydCBDbGllbnQgSW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2N1xcXCI+MTY3PC9hPnxJbGxlZ2FsIEFzIEF0IEludGVydmFsfCAgfCB8IDxhIG5hbWU9XFxcIjE2OFxcXCI+MTY4PC9hPnxJbGxlZ2FsIEJpdGVtcG9yYWwgUXVlcnl8ICB8IHwgPGEgbmFtZT1cXFwiMTY5XFxcIj4xNjk8L2E+fEludmFsaWQgQWx0ZXJuYXRlIElkfCAgfCB8IDxhIG5hbWU9XFxcIjE3MFxcXCI+MTcwPC9hPnxDYW5ub3QgQWRkIE5vbi1Xcml0YWJsZSBQcm9wZXJ0aWVzIFRvIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCIxNzFcXFwiPjE3MTwvYT58RW50aXR5IEFscmVhZHkgRXhpc3RzIEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3MlxcXCI+MTcyPC9hPnxFbnRpdHkgV2l0aCBJZCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzNcXFwiPjE3MzwvYT58RW50aXR5IFdpdGggSWQgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc0XFxcIj4xNzQ8L2E+fERlcml2ZWQgUG9ydGZvbGlvIERldGFpbHMgRG8gTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3NVxcXCI+MTc1PC9hPnxFbnRpdHkgTm90IEluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjE3NlxcXCI+MTc2PC9hPnxQb3J0Zm9saW8gV2l0aCBOYW1lIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3N1xcXCI+MTc3PC9hPnxJbnZhbGlkIFRyYW5zYWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIxNzhcXFwiPjE3ODwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTc5XFxcIj4xNzk8L2E+fER1cGxpY2F0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxODBcXFwiPjE4MDwvYT58Q29tbWFuZCBSZXRyaWV2YWwgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODFcXFwiPjE4MTwvYT58RGF0YSBGaWx0ZXIgQXBwbGljYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODJcXFwiPjE4MjwvYT58U2VhcmNoIEZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxODNcXFwiPjE4MzwvYT58TW92ZW1lbnRzIEVuZ2luZSBDb25maWd1cmF0aW9uIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4NFxcXCI+MTg0PC9hPnxGeCBSYXRlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg1XFxcIj4xODU8L2E+fEFjY3J1YWwgU291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODZcXFwiPjE4NjwvYT58QWNjZXNzIERlbmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxODdcXFwiPjE4NzwvYT58SW52YWxpZCBJZGVudGl0eSBUb2tlbnwgIHwgfCA8YSBuYW1lPVxcXCIxODhcXFwiPjE4ODwvYT58SW52YWxpZCBSZXF1ZXN0IEhlYWRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiMTg5XFxcIj4xODk8L2E+fFByaWNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTBcXFwiPjE5MDwvYT58SW52YWxpZCBTdWIgSG9sZGluZyBLZXlzIFByb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MVxcXCI+MTkxPC9hPnxEdXBsaWNhdGUgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTJcXFwiPjE5MjwvYT58Q3V0IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE5M1xcXCI+MTkzPC9hPnxDdXQgRGVmaW5pdGlvbiBJbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NFxcXCI+MTk0PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgRGVsZXRpb24gRGF0ZSBVbnNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTVcXFwiPjE5NTwvYT58UGVycGV0dWFsIFByb3BlcnR5IERlbGV0aW9uIERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5NlxcXCI+MTk2PC9hPnxUaW1lIFZhcmlhbnQgUHJvcGVydHkgVXBzZXJ0IERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk3XFxcIj4xOTc8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBVcHNlcnQgRGF0ZSBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjAwXFxcIj4yMDA8L2E+fEludmFsaWQgVW5pdCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMVxcXCI+MjAxPC9hPnxJbnZhbGlkIFR5cGUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDJcXFwiPjIwMjwvYT58SW52YWxpZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwM1xcXCI+MjAzPC9hPnxVbml0IE5vdCBEZWZpbmVkIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA0XFxcIj4yMDQ8L2E+fFVuaXRzIE5vdCBTdXBwb3J0ZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNVxcXCI+MjA1PC9hPnxDYW5ub3QgU3BlY2lmeSBVbml0cyBPbiBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA2XFxcIj4yMDY8L2E+fFVuaXQgU2NoZW1hIEluY29uc2lzdGVudCBXaXRoIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDdcXFwiPjIwNzwvYT58VW5pdCBEZWZpbml0aW9uIE5vdCBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA4XFxcIj4yMDg8L2E+fER1cGxpY2F0ZSBVbml0IERlZmluaXRpb25zIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDlcXFwiPjIwOTwvYT58SW52YWxpZCBVbml0cyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxMFxcXCI+MjEwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgSWRlbnRpZmllciBVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMVxcXCI+MjExPC9hPnxIb2xkaW5ncyBBZGp1c3RtZW50IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMlxcXCI+MjEyPC9hPnxDb3VsZCBOb3QgQnVpbGQgRXhjZWwgVXJsfCAgfCB8IDxhIG5hbWU9XFxcIjIxM1xcXCI+MjEzPC9hPnxDb3VsZCBOb3QgR2V0IEV4Y2VsIFZlcnNpb258ICB8IHwgPGEgbmFtZT1cXFwiMjE0XFxcIj4yMTQ8L2E+fEluc3RydW1lbnQgQnkgQ29kZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjE1XFxcIj4yMTU8L2E+fEVudGl0eSBTY2hlbWEgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjE2XFxcIj4yMTY8L2E+fEZlYXR1cmUgTm90IFN1cHBvcnRlZCBPbiBQb3J0Zm9saW8gVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMTdcXFwiPjIxNzwvYT58UXVvdGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxOFxcXCI+MjE4PC9hPnxJbnZhbGlkIFF1b3RlIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiMjE5XFxcIj4yMTk8L2E+fEludmFsaWQgTWV0cmljIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjIwXFxcIj4yMjA8L2E+fEludmFsaWQgSW5zdHJ1bWVudCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIyMVxcXCI+MjIxPC9hPnxJbnN0cnVtZW50IFVwc2VydCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMlxcXCI+MjIyPC9hPnxSZWZlcmVuY2UgUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjNcXFwiPjIyMzwvYT58VHJhbnNhY3Rpb24gUG9ydGZvbGlvIFJlcXVlc3QgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjRcXFwiPjIyNDwvYT58SW52YWxpZCBQcm9wZXJ0eSBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzMFxcXCI+MjMwPC9hPnxUcmFuc2FjdGlvbiBUeXBlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMzFcXFwiPjIzMTwvYT58VHJhbnNhY3Rpb24gVHlwZSBEdXBsaWNhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMzJcXFwiPjIzMjwvYT58UG9ydGZvbGlvIERvZXMgTm90IEV4aXN0IEF0IEdpdmVuIERhdGV8ICB8IHwgPGEgbmFtZT1cXFwiMjMzXFxcIj4yMzM8L2E+fFF1ZXJ5IFBhcnNlciBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjIzNFxcXCI+MjM0PC9hPnxEdXBsaWNhdGUgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM1XFxcIj4yMzU8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBDb25zdGl0dWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzZcXFwiPjIzNjwvYT58VW5yZXNvbHZlZCBJbnN0cnVtZW50IEluIFRyYW5zaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjM3XFxcIj4yMzc8L2E+fE1pc3NpbmcgU2lkZSBEZWZpbml0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCIyNDBcXFwiPjI0MDwvYT58RHVwbGljYXRlIENhbGN1bGF0aW9ucyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjI5OVxcXCI+Mjk5PC9hPnxJbnZhbGlkIFJlY2lwZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDBcXFwiPjMwMDwvYT58TWlzc2luZyBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAxXFxcIj4zMDE8L2E+fERlcGVuZGVuY2llc3wgIHwgfCA8YSBuYW1lPVxcXCIzMDRcXFwiPjMwNDwvYT58UG9ydGZvbGlvIFByZXByb2Nlc3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTBcXFwiPjMxMDwvYT58VmFsdWF0aW9uIEVuZ2luZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMVxcXCI+MzExPC9hPnxUYXNrIEZhY3RvcnkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTJcXFwiPjMxMjwvYT58VGFzayBFdmFsdWF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEzXFxcIj4zMTM8L2E+fFRhc2sgR2VuZXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNFxcXCI+MzE0PC9hPnxFbmdpbmUgQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxNVxcXCI+MzE1PC9hPnxNb2RlbCBTcGVjaWZpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIwXFxcIj4zMjA8L2E+fE1hcmtldCBEYXRhIEtleSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMVxcXCI+MzIxPC9hPnxNYXJrZXQgUmVzb2x2ZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjJcXFwiPjMyMjwvYT58TWFya2V0IERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzBcXFwiPjMzMDwvYT58Q3VydmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMzFcXFwiPjMzMTwvYT58Vm9sYXRpbGl0eSBTdXJmYWNlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMyXFxcIj4zMzI8L2E+fFZvbGF0aWxpdHkgQ3ViZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MFxcXCI+MzUwPC9hPnxJbnN0cnVtZW50IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUxXFxcIj4zNTE8L2E+fENhc2ggRmxvd3MgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTJcXFwiPjM1MjwvYT58UmVmZXJlbmNlIERhdGEgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjBcXFwiPjM2MDwvYT58QWdncmVnYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNjFcXFwiPjM2MTwvYT58QWdncmVnYXRpb24gTWVhc3VyZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MFxcXCI+MzcwPC9hPnxSZXN1bHQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcxXFxcIj4zNzE8L2E+fFJlc3VsdCBQcm9jZXNzaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcyXFxcIj4zNzI8L2E+fFZlbmRvciBSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3M1xcXCI+MzczPC9hPnxWZW5kb3IgUmVzdWx0IE1hcHBpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzRcXFwiPjM3NDwvYT58VmVuZG9yIExpYnJhcnkgVW5hdXRob3Jpc2VkfCAgfCB8IDxhIG5hbWU9XFxcIjM3NVxcXCI+Mzc1PC9hPnxWZW5kb3IgQ29ubmVjdGl2aXR5IEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3NlxcXCI+Mzc2PC9hPnxWZW5kb3IgSW50ZXJmYWNlIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjM3N1xcXCI+Mzc3PC9hPnxWZW5kb3IgUHJpY2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3OFxcXCI+Mzc4PC9hPnxWZW5kb3IgVHJhbnNsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzlcXFwiPjM3OTwvYT58VmVuZG9yIEtleSBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgwXFxcIj4zODA8L2E+fFZlbmRvciBSZWZsZWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgxXFxcIj4zODE8L2E+fFZlbmRvciBQcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzgyXFxcIj4zODI8L2E+fFZlbmRvciBTeXN0ZW0gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzOTBcXFwiPjM5MDwvYT58QXR0ZW1wdCBUbyBVcHNlcnQgRHVwbGljYXRlIFF1b3Rlc3wgIHwgfCA8YSBuYW1lPVxcXCIzOTFcXFwiPjM5MTwvYT58Q29ycG9yYXRlIEFjdGlvbiBTb3VyY2UgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMzkyXFxcIj4zOTI8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjM5M1xcXCI+MzkzPC9hPnxJbnN0cnVtZW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiMzk0XFxcIj4zOTQ8L2E+fFByb3BlcnRpZXMgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjM5NVxcXCI+Mzk1PC9hPnxCYXRjaCBPcGVyYXRpb24gQWJvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDBcXFwiPjQwMDwvYT58SW52YWxpZCBJc280MjE3IEN1cnJlbmN5IENvZGV8ICB8IHwgPGEgbmFtZT1cXFwiNDAxXFxcIj40MDE8L2E+fENhbm5vdCBBc3NpZ24gSW5zdHJ1bWVudCBJZGVudGlmaWVyIFRvIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwMlxcXCI+NDAyPC9hPnxDYW5ub3QgQXNzaWduIEN1cnJlbmN5IElkZW50aWZpZXIgVG8gTm9uIEN1cnJlbmN5fCAgfCB8IDxhIG5hbWU9XFxcIjQwM1xcXCI+NDAzPC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBCZSBEZWxldGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwNFxcXCI+NDA0PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIEVjb25vbWljIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNDA1XFxcIj40MDU8L2E+fEN1cnJlbmN5IEluc3RydW1lbnQgQ2Fubm90IEhhdmUgTG9va3Rocm91Z2ggUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjQwNlxcXCI+NDA2PC9hPnxDYW5ub3QgQ3JlYXRlIEN1cnJlbmN5IEluc3RydW1lbnQgV2l0aCBNdWx0aXBsZSBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MDdcXFwiPjQwNzwvYT58U3BlY2lmaWVkIEN1cnJlbmN5IElzIFVuZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI0MTBcXFwiPjQxMDwvYT58SW5kZXggRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDExXFxcIj40MTE8L2E+fFNvcnQgRmllbGQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDEzXFxcIj40MTM8L2E+fE5lZ2F0aXZlIFBhZ2luYXRpb24gUGFyYW1ldGVyc3wgIHwgfCA8YSBuYW1lPVxcXCI0MTRcXFwiPjQxNDwvYT58SW52YWxpZCBTZWFyY2ggU3ludGF4fCAgfCB8IDxhIG5hbWU9XFxcIjQxNVxcXCI+NDE1PC9hPnxGaWx0ZXIgRXhlY3V0aW9uIFRpbWVvdXR8ICB8IHwgPGEgbmFtZT1cXFwiNDIwXFxcIj40MjA8L2E+fFNpZGUgRGVmaW5pdGlvbiBJbmNvbnNpc3RlbnR8ICB8IHwgPGEgbmFtZT1cXFwiNDUwXFxcIj40NTA8L2E+fEludmFsaWQgUXVvdGUgQWNjZXNzIE1ldGFkYXRhIFJ1bGV8ICB8IHwgPGEgbmFtZT1cXFwiNDUxXFxcIj40NTE8L2E+fEFjY2VzcyBNZXRhZGF0YSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDUyXFxcIj40NTI8L2E+fEludmFsaWQgQWNjZXNzIE1ldGFkYXRhIElkZW50aWZpZXJ8ICB8IHwgPGEgbmFtZT1cXFwiNDYwXFxcIj40NjA8L2E+fFN0YW5kYXJkIFJlc291cmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjFcXFwiPjQ2MTwvYT58U3RhbmRhcmQgUmVzb3VyY2UgQ29uZmxpY3R8ICB8IHwgPGEgbmFtZT1cXFwiNDYyXFxcIj40NjI8L2E+fENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjNcXFwiPjQ2MzwvYT58RGF0ZSBJbiBBIENhbGVuZGFyIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI0NjRcXFwiPjQ2NDwvYT58SW52YWxpZCBEYXRlIFNvdXJjZSBEYXRhfCAgfCB8IDxhIG5hbWU9XFxcIjQ2NVxcXCI+NDY1PC9hPnxJbnZhbGlkIFRpbWV6b25lfCAgfCB8IDxhIG5hbWU9XFxcIjYwMVxcXCI+NjAxPC9hPnxQZXJzb24gSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDJcXFwiPjYwMjwvYT58UGVyc29uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2MDNcXFwiPjYwMzwvYT58Q2Fubm90IFNldCBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjYxN1xcXCI+NjE3PC9hPnxJbnZhbGlkIFJlY2lwZSBTcGVjaWZpY2F0aW9uIEluIFJlcXVlc3R8ICB8IHwgPGEgbmFtZT1cXFwiNjE4XFxcIj42MTg8L2E+fElubGluZSBSZWNpcGUgRGVzZXJpYWxpc2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjE5XFxcIj42MTk8L2E+fElkZW50aWZpZXIgVHlwZXMgTm90IFNldCBGb3IgRW50aXR5fCAgfCB8IDxhIG5hbWU9XFxcIjYyMFxcXCI+NjIwPC9hPnxDYW5ub3QgRGVsZXRlIEFsbCBDbGllbnQgRGVmaW5lZCBJZGVudGlmaWVyc3wgIHwgfCA8YSBuYW1lPVxcXCI2NTBcXFwiPjY1MDwvYT58VGhlIE9yZGVyIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTRcXFwiPjY1NDwvYT58VGhlIEFsbG9jYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjY1NVxcXCI+NjU1PC9hPnxDYW5ub3QgYnVpbGQgdGhlIGZ4IGZvcndhcmQgdGFyZ2V0IHdpdGggdGhlIGdpdmVuIGhvbGRpbmdzLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTZcXFwiPjY1NjwvYT58R3JvdXAgZG9lcyBub3QgY29udGFpbiBleHBlY3RlZCBlbnRpdGllcy58ICB8IHwgPGEgbmFtZT1cXFwiNjY1XFxcIj42NjU8L2E+fERlc3RpbmF0aW9uIGRpcmVjdG9yeSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjY3XFxcIj42Njc8L2E+fFJlbGF0aW9uIGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjcyXFxcIj42NzI8L2E+fENvdWxkIG5vdCByZXRyaWV2ZSBmaWxlIGNvbnRlbnRzfCAgfCB8IDxhIG5hbWU9XFxcIjY3M1xcXCI+NjczPC9hPnxNaXNzaW5nIGVudGl0bGVtZW50cyBmb3IgZW50aXRpZXMgaW4gR3JvdXB8ICB8IHwgPGEgbmFtZT1cXFwiNjc0XFxcIj42NzQ8L2E+fE5leHQgQmVzdCBBY3Rpb24gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY3NlxcXCI+Njc2PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIG5vdCBkZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjY3N1xcXCI+Njc3PC9hPnxJbnZhbGlkIGVudGl0eSBpZGVudGlmaWVyIGZvciByZWxhdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI2ODFcXFwiPjY4MTwvYT58U29ydGluZyBieSBzcGVjaWZpZWQgZmllbGQgbm90IHN1cHBvcnRlZHxPbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlkZWQgZmllbGRzIHRvIG9yZGVyIGJ5IHdlcmUgZWl0aGVyIGludmFsaWQgb3Igbm90IHN1cHBvcnRlZC4gfCB8IDxhIG5hbWU9XFxcIjY4MlxcXCI+NjgyPC9hPnxUb28gbWFueSBmaWVsZHMgdG8gc29ydCBieXxUaGUgbnVtYmVyIG9mIGZpZWxkcyB0byBzb3J0IHRoZSBkYXRhIGJ5IGV4Y2VlZHMgdGhlIG51bWJlciBhbGxvd2VkIGJ5IHRoZSBlbmRwb2ludCB8IHwgPGEgbmFtZT1cXFwiNjg0XFxcIj42ODQ8L2E+fFNlcXVlbmNlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODVcXFwiPjY4NTwvYT58U2VxdWVuY2UgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNjg2XFxcIj42ODY8L2E+fE5vbi1jeWNsaW5nIHNlcXVlbmNlIGhhcyBiZWVuIGV4aGF1c3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI2ODdcXFwiPjY4NzwvYT58TGVnYWwgRW50aXR5IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjg4XFxcIj42ODg8L2E+fExlZ2FsIEVudGl0eSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg5XFxcIj42ODk8L2E+fFRoZSBzdXBwbGllZCBwYWdpbmF0aW9uIHRva2VuIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkwXFxcIj42OTA8L2E+fFByb3BlcnR5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTFcXFwiPjY5MTwvYT58TXVsdGlwbGUgVGF4LWxvdHMgRm9yIEN1cnJlbmN5IFR5cGUgSXMgTm90IFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTJcXFwiPjY5MjwvYT58VGhpcyBlbmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IGltcGVyc29uYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjkzXFxcIj42OTM8L2E+fEVudGl0eSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJlbGF0aW9uc2hpcHwgIHwgfCA8YSBuYW1lPVxcXCI2OTRcXFwiPjY5NDwvYT58UmVsYXRpb25zaGlwIFZhbGlkYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI2OTVcXFwiPjY5NTwvYT58UmVsYXRpb25zaGlwIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2OTdcXFwiPjY5NzwvYT58RGVyaXZlZCBQcm9wZXJ0eSBGb3JtdWxhIE5vIExvbmdlciBWYWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI2OThcXFwiPjY5ODwvYT58U3RvcnkgaXMgbm90IGF2YWlsYWJsZXwgIHwgfCA8YSBuYW1lPVxcXCI3MDNcXFwiPjcwMzwvYT58Q29ycG9yYXRlIEFjdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI3MjBcXFwiPjcyMDwvYT58VGhlIHByb3ZpZGVkIHNvcnQgYW5kIGZpbHRlciBjb21iaW5hdGlvbiBpcyBub3QgdmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIxXFxcIj43MjE8L2E+fEEyQiBnZW5lcmF0aW9uIGZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCI3MjJcXFwiPjcyMjwvYT58QWdncmVnYXRlZCBSZXR1cm4gQ2FsY3VsYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCI3MjNcXFwiPjcyMzwvYT58Q3VzdG9tIEVudGl0eSBEZWZpbml0aW9uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNzI0XFxcIj43MjQ8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzI1XFxcIj43MjU8L2E+fFRoZSBQbGFjZW1lbnQgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyNlxcXCI+NzI2PC9hPnxUaGUgRXhlY3V0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjdcXFwiPjcyNzwvYT58VGhlIEJsb2NrIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjhcXFwiPjcyODwvYT58VGhlIFBhcnRpY2lwYXRpb24gcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjcyOVxcXCI+NzI5PC9hPnxUaGUgUGFja2FnZSByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMwXFxcIj43MzA8L2E+fFRoZSBPcmRlckluc3RydWN0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzJcXFwiPjczMjwvYT58Q3VzdG9tIEVudGl0eSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczM1xcXCI+NzMzPC9hPnxDdXN0b20gRW50aXR5IElkZW50aWZpZXIgYWxyZWFkeSBpbiB1c2UufCAgfCB8IDxhIG5hbWU9XFxcIjczNVxcXCI+NzM1PC9hPnxDYWxjdWxhdGlvbiBGYWlsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjczNlxcXCI+NzM2PC9hPnxBbiBleHBlY3RlZCBrZXkgb24gSHR0cFJlc3BvbnNlIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczN1xcXCI+NzM3PC9hPnxBIHJlcXVpcmVkIGZlZSBkZXRhaWwgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzM4XFxcIj43Mzg8L2E+fFplcm8gcm93cyB3ZXJlIHJldHVybmVkIGZyb20gTHVtaW5lc2NlfCAgfCB8IDxhIG5hbWU9XFxcIjczOVxcXCI+NzM5PC9hPnxQcm92aWRlZCBXZWVrZW5kIE1hc2sgd2FzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNzQyXFxcIj43NDI8L2E+fEN1c3RvbSBFbnRpdHkgZmllbGRzIGRvIG5vdCBtYXRjaCB0aGUgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3NDZcXFwiPjc0NjwvYT58VGhlIHByb3ZpZGVkIHNlcXVlbmNlIGlzIG5vdCB2YWxpZC58ICB8IHwgPGEgbmFtZT1cXFwiNzUxXFxcIj43NTE8L2E+fFRoZSB0eXBlIG9mIHRoZSBDdXN0b20gRW50aXR5IGlzIGRpZmZlcmVudCB0aGFuIHRoZSB0eXBlIHByb3ZpZGVkIGluIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTJcXFwiPjc1MjwvYT58THVtaW5lc2NlIHByb2Nlc3MgcmV0dXJuZWQgYW4gZXJyb3IufCAgfCB8IDxhIG5hbWU9XFxcIjc1M1xcXCI+NzUzPC9hPnxGaWxlIG5hbWUgb3IgY29udGVudCBpbmNvbXBhdGlibGUgd2l0aCBvcGVyYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjc1NVxcXCI+NzU1PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBEcml2ZSBpcyBub3QgYXMgZXhwZWN0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1N1xcXCI+NzU3PC9hPnxTY2hlbWEgb2YgcmVzcG9uc2UgZnJvbSBMdW1pbmVzY2UgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NThcXFwiPjc1ODwvYT58THVtaW5lc2NlIHRpbWVkIG91dC58ICB8IHwgPGEgbmFtZT1cXFwiNzYzXFxcIj43NjM8L2E+fEludmFsaWQgTHVzaWQgRW50aXR5IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCI3NjhcXFwiPjc2ODwvYT58RmVlIHJ1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3NjlcXFwiPjc2OTwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgYmFzZSBjdXJyZW5jeSBvZiBhIHBvcnRmb2xpbyB3aXRoIHRyYW5zYWN0aW9ucyBsb2FkZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzcxXFxcIj43NzE8L2E+fFRyYW5zYWN0aW9uIGNvbmZpZ3VyYXRpb24gc291cmNlIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI3NzRcXFwiPjc3NDwvYT58Q29tcGxpYW5jZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc1XFxcIj43NzU8L2E+fEZ1bmQgYWNjb3VudGluZyBkb2N1bWVudCBjYW5ub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NzhcXFwiPjc3ODwvYT58VW5hYmxlIHRvIGxvb2sgdXAgRlggcmF0ZSBmcm9tIHRyYWRlIGNjeSB0byBwb3J0Zm9saW8gY2N5IGZvciBzb21lIG9mIHRoZSB0cmFkZXMufCAgfCB8IDxhIG5hbWU9XFxcIjc4MlxcXCI+NzgyPC9hPnxUaGUgUHJvcGVydHkgZGVmaW5pdGlvbiBkYXRhVHlwZSBpcyBub3QgbWF0Y2hpbmcgdGhlIGRlcml2YXRpb24gZm9ybXVsYSBkYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCI3ODNcXFwiPjc4MzwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZG9tYWluIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlcml2ZWQgcHJvcGVydGllc3wgIHwgfCA8YSBuYW1lPVxcXCI3ODhcXFwiPjc4ODwvYT58Q29tcGxpYW5jZSBydW4gbm90IGZvdW5kIGZhaWx1cmUufCAgfCB8IDxhIG5hbWU9XFxcIjc5MFxcXCI+NzkwPC9hPnxDdXN0b20gRW50aXR5IGhhcyBtaXNzaW5nIG9yIGludmFsaWQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNzkxXFxcIj43OTE8L2E+fEN1c3RvbSBFbnRpdHkgZGVmaW5pdGlvbiBhbHJlYWR5IGV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCI3OTJcXFwiPjc5MjwvYT58Q29tcGxpYW5jZSBQcm9wZXJ0eUtleSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTNcXFwiPjc5MzwvYT58Q29tcGxpYW5jZSBDcml0ZXJpYSBWYWx1ZSBmb3IgbWF0Y2hpbmcgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzk1XFxcIj43OTU8L2E+fENhbm5vdCBkZWxldGUgaWRlbnRpZmllciBkZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjc5NlxcXCI+Nzk2PC9hPnxUYXggcnVsZSBzZXQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTdcXFwiPjc5NzwvYT58QSB0YXggcnVsZSBzZXQgd2l0aCB0aGlzIGlkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI3OThcXFwiPjc5ODwvYT58TXVsdGlwbGUgcnVsZSBzZXRzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBrZXkgYXJlIGFwcGxpY2FibGUufCAgfCB8IDxhIG5hbWU9XFxcIjc5OVxcXCI+Nzk5PC9hPnxUaGUgcmVxdWVzdCBtdXN0IGNvbnRhaW4gYSBkYXRlIG9yIGRpYXJ5IGVudHJ5LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDBcXFwiPjgwMDwvYT58Q2FuIG5vdCB1cHNlcnQgYW4gaW5zdHJ1bWVudCBldmVudCBvZiB0aGlzIHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgwMVxcXCI+ODAxPC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODAyXFxcIj44MDI8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGlzIG1pc3Npbmcgc2FsaWVudCBpbmZvcm1hdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODAzXFxcIj44MDM8L2E+fFRoZSBJbnN0cnVtZW50IGV2ZW50IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgwNFxcXCI+ODA0PC9hPnxTb21lIGRhdGEgcmVxdWVzdGVkIGRvZXMgbm90IGZvbGxvdyB0aGUgb3JkZXIgZ3JhcGggYXNzdW1wdGlvbnMufCAgfCB8IDxhIG5hbWU9XFxcIjgwNVxcXCI+ODA1PC9hPnxUaGUgaW5zdHJ1bWVudCBldmVudCB0eXBlIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDZcXFwiPjgwNjwvYT58VGhlIHRyYW5zYWN0aW9uIHRlbXBsYXRlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwN1xcXCI+ODA3PC9hPnxUaGUgZGVmYXVsdCB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA4XFxcIj44MDg8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODExXFxcIj44MTE8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBvcmRlci58ICB8IHwgPGEgbmFtZT1cXFwiODEyXFxcIj44MTI8L2E+fEEgcHJpY2UgY291bGQgbm90IGJlIGZvdW5kIGZvciBhbiBhbGxvY2F0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTNcXFwiPjgxMzwvYT58Q2hhcnQgb2YgQWNjb3VudHMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTRcXFwiPjgxNDwvYT58QWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNVxcXCI+ODE1PC9hPnxBYm9yIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE2XFxcIj44MTY8L2E+fEFib3IgQ29uZmlndXJhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxN1xcXCI+ODE3PC9hPnxSZWNvbmNpbGlhdGlvbiBtYXBwaW5nIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MThcXFwiPjgxODwvYT58QXR0cmlidXRlIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxOVxcXCI+ODE5PC9hPnxSZWNvbmNpbGlhdGlvbiBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMFxcXCI+ODIwPC9hPnxDdXN0b2RpYW4gQWNjb3VudCBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgyMVxcXCI+ODIxPC9hPnxBbGxvY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiODIyXFxcIj44MjI8L2E+fFJlY29uY2lsaWF0aW9uIHJ1biBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODIzXFxcIj44MjM8L2E+fFJlY29uY2lsaWF0aW9uIGJyZWFrIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI4MjRcXFwiPjgyNDwvYT58RW50aXR5IGxpbmsgdHlwZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IGRvZXNuXFwndCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODI4XFxcIj44Mjg8L2E+fEFkZHJlc3Mga2V5IGRlZmluaXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjlcXFwiPjgyOTwvYT58Q29tcGxpYW5jZSB0ZW1wbGF0ZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgzMFxcXCI+ODMwPC9hPnxBY3Rpb24gbm90IHN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCI4MzFcXFwiPjgzMTwvYT58UmVmZXJlbmNlIGxpc3Qgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzJcXFwiPjgzMjwvYT58UG9zdGluZyBNb2R1bGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzNcXFwiPjgzMzwvYT58VGhlIHR5cGUgb2YgcGFyYW1ldGVyIHByb3ZpZGVkIGRpZCBub3QgbWF0Y2ggdGhhdCByZXF1aXJlZCBieSB0aGUgY29tcGxpYW5jZSBydWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzRcXFwiPjgzNDwvYT58VGhlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgYSBydWxlIGRpZCBub3QgbWF0Y2ggdGhvc2UgcmVxdWlyZWQgYnkgaXRzIHRlbXBsYXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzVcXFwiPjgzNTwvYT58VGhlIGVudGl0eSBoYXMgYSBwcm9wZXJ0eSBpbiBhIGRvbWFpbiB0aGF0IGlzIG5vdCBzdXBwcnRlZCBmb3IgdGhhdCBlbnRpdHkgdHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiODM2XFxcIj44MzY8L2E+fFN0cnVjdHVyZWQgcmVzdWx0IGRhdGEgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzdcXFwiPjgzNzwvYT58RGlhcnkgZW50cnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzhcXFwiPjgzODwvYT58RGlhcnkgZW50cnkgY291bGQgbm90IGJlIGNyZWF0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjgzOVxcXCI+ODM5PC9hPnxEaWFyeSBlbnRyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODYxXFxcIj44NjE8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4NjlcXFwiPjg2OTwvYT58Q29uZmxpY3RpbmcgaW5zdHJ1bWVudCBwcm9wZXJ0aWVzIGluIGJhdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzBcXFwiPjg3MDwvYT58Q29tcGxpYW5jZSBydW4gc3VtbWFyeSBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiODcxXFxcIj44NzE8L2E+fFRoZSBzcGVjaWZpZWQgaW1wZXJzb25hdGVkIHVzZXIgZG9lcyBub3QgZXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiODc0XFxcIj44NzQ8L2E+fFByb3ZpZGVkIFByb3BlcnR5IERvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBlbnRpdHkgZmlsdGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI4NzVcXFwiPjg3NTwvYT58Q2Fubm90IERlbGV0ZSBTeXN0ZW0gUmVmZXJlbmNlIExpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjg3NlxcXCI+ODc2PC9hPnxDbGVhcmRvd24gTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODc5XFxcIj44Nzk8L2E+fFBvcnRmb2xpb3MgZG8gbm90IGhhdmUgdGhlIHNhbWUgYmFzZSBjdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI4ODBcXFwiPjg4MDwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjb21wbGlhbmNlIGV4cHJlc3Npb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg4MVxcXCI+ODgxPC9hPnxCbG9jayBvdmVycGxhY2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODJcXFwiPjg4MjwvYT58T3JkZXIgbm90IGFwcHJvdmVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODNcXFwiPjg4MzwvYT58Q2Fubm90IHVwZGF0ZSB0aGUgc2hhcmVkIGZpZWxkcyBvZiBhIGJsb2NrIHdpdGggYXNzb2NpYXRlZCBvcmRlcnMufCAgfCB8IDxhIG5hbWU9XFxcIjg4NlxcXCI+ODg2PC9hPnxDYW5ub3QgbG9jayB0aGUgcGVyaW9kLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODdcXFwiPjg4NzwvYT58Q2Fubm90IGFwcGx5IGNsZWFyIGRvd24gbW9kdWxlLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODhcXFwiPjg4ODwvYT58Q2Fubm90IHVwc2VydCBJbnN0cnVtZW50IEV2ZW50IEluc3RydWN0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODlcXFwiPjg4OTwvYT58Q2Fubm90IHJlYWQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODk1XFxcIj44OTU8L2E+fFRoZSBDYXBpdGFsIFJhdGlvIENhbGN1bGF0aW9uIElzIFdyb25nLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTBcXFwiPjkxMDwvYT58Q2Fubm90IHVwZGF0ZSBhIGJsb2NrIHJlZmVyZW5jZWQgYnkgYSBwbGFjZW1lbnQufCAgfCB8IDxhIG5hbWU9XFxcIjkxMVxcXCI+OTExPC9hPnxBIEZ1bmQgdGhhdCByZWZlcmVuY2VzIHRoaXMgQWJvciBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTEyXFxcIj45MTI8L2E+fENhbm5vdCBhZGQgZGVjaXNpb24gdG8gU3RhZ2VkIE1vZGlmaWNhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTEzXFxcIj45MTM8L2E+fFRoZSBTdGFnZWQgTW9kaWZpY2F0aW9uIGNvdWxkIG5vdCBiZSBhcHBsaWVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTRcXFwiPjkxNDwvYT58QWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE1XFxcIj45MTU8L2E+fENhbm5vdCB1cHNlcnQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcHJvcGVydHkgaW4gb25lIHJlcXVlc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkxNlxcXCI+OTE2PC9hPnxQbGFjZW1lbnQgYW5kIGRpcmVjdCBkZXNjZW5kZW50cyBoYXZlIG1vcmUgZXhlY3V0ZWQgcXVhbnRpdHkgdGhhbiB0b3RhbCBwbGFjZW1lbnQgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjkxN1xcXCI+OTE3PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBFbnRyeVR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOFxcXCI+OTE4PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IGluIHRoaXMgU3RhdGUufCAgfCB8IDxhIG5hbWU9XFxcIjkxOVxcXCI+OTE5PC9hPnxQbGFjZW1lbnQgY291bGQgbm90IGJlIGNhbmNlbGxlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTIwXFxcIj45MjA8L2E+fFNoYXJlIENsYXNzIG5vdCBjb25maWd1cmVkIGluIEZ1bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTIxXFxcIj45MjE8L2E+fFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleSBub3QgY29uZmlndXJlZCBpbiBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiOTIyXFxcIj45MjI8L2E+fENvdWxkIG5vdCB1cGRhdGUgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjkyM1xcXCI+OTIzPC9hPnxNdWx0aXBsZSBzZXRzIG9mIFNoYXJlIENsYXNzIFN1YiBIb2xkaW5nIEtleXMgY29uZmlndXJlZCBhY3Jvc3MgdGhlIFBvcnRmb2xpb3Mgb2YgYSBGdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjRcXFwiPjkyNDwvYT58T25lIG9yIG1vcmUgbWF0cml4IGNlbGxzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbWF0cml4LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjVcXFwiPjkyNTwvYT58VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlZCBtYXRyaXggZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiOTI2XFxcIj45MjY8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjdcXFwiPjkyNzwvYT58TWF0cml4IGRlZmluaXRpb24gY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjkyOFxcXCI+OTI4PC9hPnxEYXRhVHlwZSB3aXRoIElkIGFscmVhZHkgZXhpc3RzLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjlcXFwiPjkyOTwvYT58U3F1YXJlIG1hdHJpeCBpcyBpbmNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzBcXFwiPjkzMDwvYT58QSBjb25kaXRpb25hbCBsaWNlbnNlIHRlcm0gaGFzIGJlZW4gZXhjZWVkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMVxcXCI+OTMxPC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgcmVxdWVzdGVkIGlzIG5vdCBpbnRlbmRlZCBmb3IgdGhlIGVudGl0eSBwcm92aWRlZC58ICB8IHwgPGEgbmFtZT1cXFwiOTMyXFxcIj45MzI8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzNcXFwiPjkzMzwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBoYXMgYSBwcm9wZXJ0eSBub3QgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWVkIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzRcXFwiPjkzNDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBoYXZlIGEgbWFuZGF0b3J5IGlkZW50aWZpZXIgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM1XFxcIj45MzU8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGFuIGlkZW50aWZpZXIgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM2XFxcIj45MzY8L2E+fFRoZSBDdXN0b20gRGF0YSBNb2RlbCBpbmNsdWRlZCBhbiBhbGlhcyBvciBzb3J0LWJ5IGF0dHJpYnV0ZSB0aGF0IHdhcyBub3Qgb24gdGhlIGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkzN1xcXCI+OTM3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5MzhcXFwiPjkzODwvYT58VGhlIG5ldyBDbG9zZWQgUGVyaW9kIHdvdWxkIGNhdXNlIHRoZSBUaW1lbGluZSB0byBoYXZlIG5vbi1jb250aWd1b3VzIENsb3NlZCBQZXJpb2RzfCAgfCB8IDxhIG5hbWU9XFxcIjkzOVxcXCI+OTM5PC9hPnxCbG9ja2VkIGJ5IGEgTmV0d29yayBab25lfCAgfCB8IDxhIG5hbWU9XFxcIjk0MFxcXCI+OTQwPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEN1c3RvbSBEYXRhIE1vZGVsLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDFcXFwiPjk0MTwvYT58T3JkZXIgbm90IGNvbXBsaWFudC58ICB8IHwgPGEgbmFtZT1cXFwiOTQyXFxcIj45NDI8L2E+fEFjdGlvbiB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBkZXBlbmRlbmN5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NDRcXFwiPjk0NDwvYT58RGVyaXZlZCBQcm9wZXJ0eSBjYWxjdWxhdGlvbiBub3QgY29tcGxldGUufCAgfCB8IDxhIG5hbWU9XFxcIjk0NVxcXCI+OTQ1PC9hPnxEZXJpdmVkIFByb3BlcnR5IGlzIG5vdCBmaWx0ZXJhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDZcXFwiPjk0NjwvYT58VGhlIGNvbmRpdGlvbnMgcHJvdmlkZWQgaGF2ZSBvbmUgb3IgbW9yZSBlcnJvcnMufCAgfCB8IDxhIG5hbWU9XFxcIjk0N1xcXCI+OTQ3PC9hPnxUaGUgcHJvcGVydHkvaWRlbnRpZmllciBkb21haW4gYW5kIGVudGl0eSBkb21haW4gZG8gbm90IG1hdGNoLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDhcXFwiPjk0ODwvYT58SW52YWxpZCBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDlcXFwiPjk0OTwvYT58RmlsdGVyYWJsZSBEZXJpdmVkIFByb3BlcnR5IGxpbWl0IHJlYWNoZWQufCAgfCB8IDxhIG5hbWU9XFxcIjk1MFxcXCI+OTUwPC9hPnxJbnZlc3RvciBSZWNvcmQgSWRlbnRpZmllciBBbHJlYWR5IEluIFVzZXwgIHwgfCA8YSBuYW1lPVxcXCI5NTFcXFwiPjk1MTwvYT58SW52ZXN0b3IgUmVjb3JkIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTJcXFwiPjk1MjwvYT58SW52ZXN0bWVudCBBY2NvdW50IElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUzXFxcIj45NTM8L2E+fEludmVzdG1lbnQgQWNjb3VudCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTU0XFxcIj45NTQ8L2E+fENvdWxkIE5vdCBTd2VlcCBCbG9ja3wgIHwgfCA8YSBuYW1lPVxcXCI5NTVcXFwiPjk1NTwvYT58RW50aXR5IFVuaXF1ZSBJZCBoYXMgdGhlIHdyb25nIGZvcm1hdHwgIHwgfCA8YSBuYW1lPVxcXCI5NTZcXFwiPjk1NjwvYT58UG9zdCBDbG9zZSBBY3Rpdml0eSBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk1N1xcXCI+OTU3PC9hPnxUaGUgQ2xvc2VkUGVyaW9kIHdpdGggdGhlIElkIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBUaW1lbGluZXwgIHwgfCA8YSBuYW1lPVxcXCI5NThcXFwiPjk1ODwvYT58SW52YWxpZCBTZXR0bGVtZW50IEluc3RydWN0aW9uc3wgIHwgfCA8YSBuYW1lPVxcXCI5NTlcXFwiPjk1OTwvYT58T3JkZXIgcmVxdWlyZXMgcXVhbnRpdHkufCAgfCB8IDxhIG5hbWU9XFxcIjk2MFxcXCI+OTYwPC9hPnxJbnZhbGlkIERhdGFQb2ludCBWYWx1ZSBBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjk2MVxcXCI+OTYxPC9hPnxJbnZhbGlkIFJlbGF0aW9uYWwgRGF0YXNldCBGaWVsZCBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2MlxcXCI+OTYyPC9hPnxSZWxhdGlvbmFsIERhdGFzZXQgRGVmaW5pdGlvbiBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCI5NjNcXFwiPjk2MzwvYT58VGltZWxpbmUgQm9va21hcmsgTm90IEluIE9wZW4gUGVyaW9kfCAgfCB8IDxhIG5hbWU9XFxcIjk2NFxcXCI+OTY0PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgc3BlY2lmaWVkIGlkZW50aWZpZXJzIGJ1dCB0aGUgZW50aXR5IGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY1XFxcIj45NjU8L2E+fFRoZSBzb3J0IGJ5IHByb3ZpZGVkIGhhcyBvbmUgb3IgbW9yZSBlcnJvcnN8ICB8IHwgPGEgbmFtZT1cXFwiOTY2XFxcIj45NjY8L2E+fEludmFsaWQgQ3VzdG9tIERhdGEgTW9kZWwgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjdcXFwiPjk2NzwvYT58UnVsZSBzZXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIENoZWNrIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY4XFxcIj45Njg8L2E+fFRoZSBDbG9zZWQgUGVyaW9kIGlzIGludmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiOTY5XFxcIj45Njk8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGlzIFN0b3AgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MFxcXCI+OTcwPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBMaW1pdCBQcmljZS58ICB8IHwgPGEgbmFtZT1cXFwiOTcxXFxcIj45NzE8L2E+fENhbm5vdCB1cGRhdGUgYSBwbGFjZW1lbnQgd2l0aCB0aGUgY3VycmVudCBUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzRcXFwiPjk3NDwvYT58Q2Fubm90IFBsYWNlQmxvY2tzIGFnYWluc3QgYW4gXFwnVW5zb2xpY2l0ZWRcXCcgQmxvY2sgKGJsb2NrIGNvbnRhaW5pbmcgMCBPcmRlcnMpLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzVcXFwiPjk3NTwvYT58Tm8gUG9ydGZvbGlvIEdyb3VwIFNlbGVjdGVkfCAgfCB8IDxhIG5hbWU9XFxcIjk3NlxcXCI+OTc2PC9hPnxBbWJpZ3VvdXMgU2NvcGV8ICB8IFxuICpcbiAqIENvbnRhY3Q6IGluZm9AZmluYm91cm5lLmNvbVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRnVuZFN0cnVjdHVyZSB9IGZyb20gJy4uL21vZGVsL2Z1bmRTdHJ1Y3R1cmUnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRnVuZFN0cnVjdHVyZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9mdW5kU3RydWN0dXJlUmVxdWVzdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBMdXNpZFByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRQcm9ibGVtRGV0YWlscyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBMdXNpZFZhbGlkYXRpb25Qcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uL21vZGVsL2x1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBhZ2VkUmVzb3VyY2VMaXN0T2ZGdW5kU3RydWN0dXJlIH0gZnJvbSAnLi4vbW9kZWwvcGFnZWRSZXNvdXJjZUxpc3RPZkZ1bmRTdHJ1Y3R1cmUnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBGdW5kIFN0cnVjdHVyZS4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgZnVuZFN0cnVjdHVyZVJlcXVlc3Q6IEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBGdW5kIFN0cnVjdHVyZS4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29kZSBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgYXNBdCBkYXRldGltZSBhdCB3aGljaCB0byByZXRyaWV2ZSB0aGUgRnVuZCBTdHJ1Y3R1cmUuIERlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBBIGxpc3Qgb2YgcHJvcGVydHkga2V5cyBmcm9tIHRoZSBcXCYjMzk7RnVuZFN0cnVjdHVyZVxcJiMzOTsgZG9tYWluIHRvIGRlY29yYXRlIG9udG8gdGhlIEZ1bmQgU3RydWN0dXJlLiAgICAgICAgICAgICAgVGhlc2UgbXVzdCB0YWtlIHRoZSBmb3JtYXQge2RvbWFpbn0ve3Njb3BlfS97Y29kZX0sIGZvciBleGFtcGxlIFxcJiMzOTtGdW5kU3RydWN0dXJlL01hbmFnZXIvSWRcXCYjMzk7LiBJZiBubyBwcm9wZXJ0aWVzIGFyZSBzcGVjaWZpZWQsIHRoZW4gbm8gcHJvcGVydGllcyB3aWxsIGJlIHJldHVybmVkLiAqL1xuICAgIHByb3BlcnR5S2V5cz86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEZ1bmRTdHJ1Y3R1cmVzUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgRnVuZCBTdHJ1Y3R1cmVzLiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggRnVuZCBTdHJ1Y3R1cmUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBhc0F0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgcGFnaW5hdGlvbiB0b2tlbiB0byB1c2UgdG8gY29udGludWUgbGlzdGluZyBGdW5kIFN0cnVjdHVyZXM7IHRoaXMgdmFsdWUgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcHJldmlvdXMgY2FsbC4gSWYgYSBwYWdpbmF0aW9uIHRva2VuIGlzIHByb3ZpZGVkLCB0aGUgZmlsdGVyIGFuZCBhc0F0IGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIG9yaWdpbmFsIHJlcXVlc3QuICovXG4gICAgcGFnZT86IHN0cmluZztcbiAgICAvKiogV2hlbiBwYWdpbmF0aW5nLCBsaW1pdCB0aGUgcmVzdWx0cyB0byB0aGlzIG51bWJlci4gRGVmYXVsdHMgdG8gMTAwIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgLyoqIEV4cHJlc3Npb24gdG8gZmlsdGVyIHRoZSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgdG8gZmlsdGVyIG9uIHRoZSBGdW5kIFN0cnVjdHVyZSBjb2RlLCBzcGVjaWZ5IFxcJnF1b3Q7aWQuQ29kZSBlcSBcXCYjMzk7U3RydWN0dXJlMVxcJiMzOTtcXCZxdW90Oy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZmlsdGVyaW5nIHJlc3VsdHMsIHNlZSBodHRwczovL3N1cHBvcnQubHVzaWQuY29tL2RvY3MvZmlsdGVyaW5nLWluZm9ybWF0aW9uLXJldHJpZXZlZC1mcm9tLWx1c2lkLiAqL1xuICAgIGZpbHRlcj86IHN0cmluZztcbiAgICAvKiogQSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7LiAqL1xuICAgIHNvcnRCeT86IEFycmF5PHN0cmluZz47XG4gICAgLyoqIEEgbGlzdCBvZiBwcm9wZXJ0eSBrZXlzIGZyb20gdGhlIFxcJiMzOTtGdW5kU3RydWN0dXJlXFwmIzM5OyBkb21haW4gdG8gZGVjb3JhdGUgb250byBlYWNoIEZ1bmQgU3RydWN0dXJlLiAgICAgICAgICAgICAgVGhlc2UgbXVzdCB0YWtlIHRoZSBmb3JtYXQge2RvbWFpbn0ve3Njb3BlfS97Y29kZX0sIGZvciBleGFtcGxlIFxcJiMzOTtGdW5kU3RydWN0dXJlL01hbmFnZXIvSWRcXCYjMzk7LiAqL1xuICAgIHByb3BlcnR5S2V5cz86IEFycmF5PHN0cmluZz47XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRnVuZFN0cnVjdHVyZXNTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL3d3dy5sdXNpZC5jb20vYXBpJztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKUBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nfHN0cmluZ1tdLCBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IGZpcnN0QmFzZVBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICAgIH1cblxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VYUEVSSU1FTlRBTF0gQ3JlYXRlRnVuZFN0cnVjdHVyZTogQ3JlYXRlIGEgRnVuZCBTdHJ1Y3R1cmUuXG4gICAgICogQ3JlYXRlIGEgbmV3IEZ1bmQgU3RydWN0dXJlIE1vZGVsLiBUaGUgc2NvcGUgYW5kIGNvZGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlIGFyZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlRnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxGdW5kU3RydWN0dXJlPjtcbiAgICBwdWJsaWMgY3JlYXRlRnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZUZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxGdW5kU3RydWN0dXJlPj47XG4gICAgcHVibGljIGNyZWF0ZUZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEZ1bmRTdHJ1Y3R1cmU+PjtcbiAgICBwdWJsaWMgY3JlYXRlRnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZUZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVGdW5kU3RydWN0dXJlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0O1xuICAgICAgICBpZiAoZnVuZFN0cnVjdHVyZVJlcXVlc3QgPT09IG51bGwgfHwgZnVuZFN0cnVjdHVyZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZnVuZFN0cnVjdHVyZVJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVGdW5kU3RydWN0dXJlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2Z1bmRzdHJ1Y3R1cmVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RnVuZFN0cnVjdHVyZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VYUEVSSU1FTlRBTF0gR2V0RnVuZFN0cnVjdHVyZTogR2V0IGEgRnVuZCBTdHJ1Y3R1cmUuXG4gICAgICogUmV0cmlldmUgdGhlIGRlZmluaXRpb24gb2YgYSBwYXJ0aWN1bGFyIEZ1bmQgU3RydWN0dXJlLCBpbmNsdWRpbmcgaXRzIG5vZGVzLCBlZGdlcywgYW5kIGFueSBpbmxpbmUgZnVuZCBkZWZpbml0aW9ucy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IEdldEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8RnVuZFN0cnVjdHVyZT47XG4gICAgcHVibGljIGdldEZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RnVuZFN0cnVjdHVyZT4+O1xuICAgIHB1YmxpYyBnZXRGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0RnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxGdW5kU3RydWN0dXJlPj47XG4gICAgcHVibGljIGdldEZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RnVuZFN0cnVjdHVyZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZ1bmRTdHJ1Y3R1cmUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXNBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hc0F0O1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSByZXF1ZXN0UGFyYW1ldGVycz8ucHJvcGVydHlLZXlzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGFzQXQgIT09IHVuZGVmaW5lZCAmJiBhc0F0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+YXNBdCwgJ2FzQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlLZXlzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdwcm9wZXJ0eUtleXMnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEZ1bmRTdHJ1Y3R1cmU+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBMaXN0RnVuZFN0cnVjdHVyZXM6IExpc3QgRnVuZCBTdHJ1Y3R1cmVzLlxuICAgICAqIExpc3QgYWxsIHRoZSBGdW5kIFN0cnVjdHVyZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIGNyaXRlcmlhLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsaXN0RnVuZFN0cnVjdHVyZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0RnVuZFN0cnVjdHVyZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8UGFnZWRSZXNvdXJjZUxpc3RPZkZ1bmRTdHJ1Y3R1cmU+O1xuICAgIHB1YmxpYyBsaXN0RnVuZFN0cnVjdHVyZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0RnVuZFN0cnVjdHVyZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdlZFJlc291cmNlTGlzdE9mRnVuZFN0cnVjdHVyZT4+O1xuICAgIHB1YmxpYyBsaXN0RnVuZFN0cnVjdHVyZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0RnVuZFN0cnVjdHVyZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnZWRSZXNvdXJjZUxpc3RPZkZ1bmRTdHJ1Y3R1cmU+PjtcbiAgICBwdWJsaWMgbGlzdEZ1bmRTdHJ1Y3R1cmVzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdEZ1bmRTdHJ1Y3R1cmVzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5S2V5cyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wcm9wZXJ0eUtleXM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlLZXlzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdwcm9wZXJ0eUtleXMnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mRnVuZFN0cnVjdHVyZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZFN0cnVjdHVyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcjE4L3NyYy9saWIvLmdlbmVyYXRlZC9hcGkvZnVuZFN0cnVjdHVyZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQWtCL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQTBCLGNBQWMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBb0ZyRixNQUFNLE9BQU8scUJBQXFCO0lBT1I7SUFMWixRQUFRLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFB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cGFnZSBkb2N1bWVudHMgdGhlIFtMVVNJRCBBUElzXSguLi8uLi8uLi9hcGkvc3dhZ2dlciksIHdoaWNoIGFsbG93cyBhdXRob3Jpc2VkIGNsaWVudHMgdG8gcXVlcnkgYW5kIHVwZGF0ZSB0aGVpciBkYXRhIHdpdGhpbiB0aGUgTFVTSUQgcGxhdGZvcm0uICBTREtzIHRvIGludGVyYWN0IHdpdGggdGhlIExVU0lEIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcyBhbmQgZnJhbWV3b3JrczogICogW0MjXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1jc2hhcnApICogW0phdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWphdmEpICogW0phdmFTY3JpcHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWpzKSAqIFtQeXRob25dKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLXB5dGhvbikgKiBbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcikgIFRoZSBMVVNJRCBwbGF0Zm9ybSBpcyBtYWRlIHVwIG9mIGEgbnVtYmVyIG9mIHN1Yi1hcHBsaWNhdGlvbnMuIFlvdSBjYW4gZmluZCB0aGUgQVBJIC8gc3dhZ2dlciBkb2N1bWVudGF0aW9uIGJ5IGZvbGxvd2luZyB0aGUgbGlua3MgaW4gdGhlIHRhYmxlIGJlbG93LiAgIHwgQXBwbGljYXRpb24gICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFQSSAvIFN3YWdnZXIgRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBMVVNJRCAgICAgICAgIHwgT3BlbiwgQVBJLWZpcnN0LCBkZXZlbG9wZXItZnJpZW5kbHkgaW52ZXN0bWVudCBkYXRhIHBsYXRmb3JtLiAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgV2ViIGFwcCAgICAgICB8IFVzZXItZmFjaW5nIGZyb250IGVuZCBmb3IgTFVTSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hcHAvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgICAgfCB8IFNjaGVkdWxlciAgICAgfCBBdXRvbWF0ZWQgam9iIHNjaGVkdWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vc2NoZWR1bGVyMi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgIHwgfCBJbnNpZ2h0cyAgICAgIHwgTW9uaXRvcmluZyBhbmQgdHJvdWJsZXNob290aW5nIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2luc2lnaHRzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgSWRlbnRpdHkgICAgICB8IElkZW50aXR5IG1hbmFnZW1lbnQgZm9yIExVU0lEIChpbiBjb25qdW5jdGlvbiB3aXRoIEFjY2VzcykgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9pZGVudGl0eS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCB8IEFjY2VzcyAgICAgICAgfCBBY2Nlc3MgY29udHJvbCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggSWRlbnRpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYWNjZXNzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgIHwgfCBEcml2ZSAgICAgICAgIHwgU2VjdXJlIGZpbGUgcmVwb3NpdG9yeSBhbmQgbWFuYWdlciBmb3IgY29sbGFib3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2RyaXZlL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICB8IHwgTHVtaW5lc2NlICAgICB8IERhdGEgdmlydHVhbGlzYXRpb24gc2VydmljZSAocXVlcnkgZGF0YSBmcm9tIG11bHRpcGxlIHByb3ZpZGVycywgaW5jbHVkaW5nIExVU0lEKSB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ob25leWNvbWIvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgfCB8IE5vdGlmaWNhdGlvbiAgfCBOb3RpZmljYXRpb24gc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vbm90aWZpY2F0aW9uL3N3YWdnZXIvaW5kZXguaHRtbCkgIHwgfCBDb25maWd1cmF0aW9uIHwgRmlsZSBzdG9yZSBmb3Igc2VjcmV0cyBhbmQgb3RoZXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSB8IHwgV29ya2Zsb3cgICAgICB8IFdvcmtmbG93IHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi93b3JrZmxvdy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCAgICMgRXJyb3IgQ29kZXMgIHwgQ29kZXxOYW1lfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgPGEgbmFtZT1cXFwiLTEwXFxcIj4tMTA8L2E+fFNlcnZlciBDb25maWd1cmF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIi0xXFxcIj4tMTwvYT58VW5rbm93biBlcnJvcnxBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBvbiBvdXIgc2lkZS4gfCB8IDxhIG5hbWU9XFxcIjEwMlxcXCI+MTAyPC9hPnxWZXJzaW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDNcXFwiPjEwMzwvYT58QXBpIFJhdGUgTGltaXQgVmlvbGF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjEwNFxcXCI+MTA0PC9hPnxJbnN0cnVtZW50IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDVcXFwiPjEwNTwvYT58UHJvcGVydHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNlxcXCI+MTA2PC9hPnxQb3J0Zm9saW8gUmVjdXJzaW9uIERlcHRofCAgfCB8IDxhIG5hbWU9XFxcIjEwOFxcXCI+MTA4PC9hPnxHcm91cCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA5XFxcIj4xMDk8L2E+fFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEwXFxcIj4xMTA8L2E+fFByb3BlcnR5IFNjaGVtYSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTExXFxcIj4xMTE8L2E+fFBvcnRmb2xpbyBBbmNlc3RyeSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEyXFxcIj4xMTI8L2E+fFBvcnRmb2xpbyBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjExM1xcXCI+MTEzPC9hPnxPcnBoYW5lZCBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiMTE5XFxcIj4xMTk8L2E+fE1pc3NpbmcgQmFzZSBDbGFpbXN8ICB8IHwgPGEgbmFtZT1cXFwiMTIxXFxcIj4xMjE8L2E+fFByb3BlcnR5IE5vdCBEZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjEyMlxcXCI+MTIyPC9hPnxDYW5ub3QgRGVsZXRlIFN5c3RlbSBQcm9wZXJ0eXwgIHwgfCA8YSBuYW1lPVxcXCIxMjNcXFwiPjEyMzwvYT58Q2Fubm90IE1vZGlmeSBJbW11dGFibGUgUHJvcGVydHkgRmllbGR8ICB8IHwgPGEgbmFtZT1cXFwiMTI0XFxcIj4xMjQ8L2E+fFByb3BlcnR5IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyNVxcXCI+MTI1PC9hPnxJbnZhbGlkIFByb3BlcnR5IExpZmUgVGltZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjZcXFwiPjEyNjwvYT58UHJvcGVydHkgQ29uc3RyYWludCBTdHlsZSBFeGNsdWRlcyBQcm9wZXJ0aWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEyN1xcXCI+MTI3PC9hPnxDYW5ub3QgTW9kaWZ5IERlZmF1bHQgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEyOFxcXCI+MTI4PC9hPnxHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjlcXFwiPjEyOTwvYT58Tm8gU3VjaCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMwXFxcIj4xMzA8L2E+fFVuZGVmaW5lZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMVxcXCI+MTMxPC9hPnxVbnN1cHBvcnRlZCBWYWx1ZSBUeXBlIERlZmluZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMlxcXCI+MTMyPC9hPnxWYWxpZGF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjEzM1xcXCI+MTMzPC9hPnxMb29wIERldGVjdGVkIEluIEdyb3VwIEhpZXJhcmNoeXwgIHwgfCA8YSBuYW1lPVxcXCIxMzRcXFwiPjEzNDwvYT58VW5kZWZpbmVkIEFjY2VwdGFibGUgVmFsdWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEzNVxcXCI+MTM1PC9hPnxTdWIgR3JvdXAgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTM4XFxcIj4xMzg8L2E+fFByaWNlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTM5XFxcIj4xMzk8L2E+fEFuYWx5dGljIFN0b3JlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDFcXFwiPjE0MTwvYT58QW5hbHl0aWMgU3RvcmUgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQzXFxcIj4xNDM8L2E+fENsaWVudCBJbnN0cnVtZW50IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0NFxcXCI+MTQ0PC9hPnxEdXBsaWNhdGUgSW4gUGFyYW1ldGVyIFNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDdcXFwiPjE0NzwvYT58UmVzdWx0cyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ4XFxcIj4xNDg8L2E+fE9yZGVyIEZpZWxkIE5vdCBJbiBSZXN1bHQgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0OVxcXCI+MTQ5PC9hPnxPcGVyYXRpb24gRmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE1MFxcXCI+MTUwPC9hPnxFbGFzdGljIFNlYXJjaCBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIxNTFcXFwiPjE1MTwvYT58SW52YWxpZCBQYXJhbWV0ZXIgVmFsdWV8ICB8IHwgPGEgbmFtZT1cXFwiMTUzXFxcIj4xNTM8L2E+fENvbW1hbmQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NFxcXCI+MTU0PC9hPnxFbnRpdHkgU3RhdGUgQ29uc3RydWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU1XFxcIj4xNTU8L2E+fEVudGl0eSBUaW1lbGluZSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNTZcXFwiPjE1NjwvYT58Q29uY3VycmVuY3kgQ29uZmxpY3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTdcXFwiPjE1NzwvYT58SW52YWxpZCBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1OFxcXCI+MTU4PC9hPnxFdmVudCBQdWJsaXNoIFVua25vd258ICB8IHwgPGEgbmFtZT1cXFwiMTU5XFxcIj4xNTk8L2E+fEV2ZW50IFF1ZXJ5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYwXFxcIj4xNjA8L2E+fEJsb2IgRGlkIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNjJcXFwiPjE2MjwvYT58U3ViIFN5c3RlbSBSZXF1ZXN0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYzXFxcIj4xNjM8L2E+fFN1YiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NVxcXCI+MTY1PC9hPnxGYWlsZWQgVG8gRGVsZXRlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NlxcXCI+MTY2PC9hPnxVcHNlcnQgQ2xpZW50IEluc3RydW1lbnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjdcXFwiPjE2NzwvYT58SWxsZWdhbCBBcyBBdCBJbnRlcnZhbHwgIHwgfCA8YSBuYW1lPVxcXCIxNjhcXFwiPjE2ODwvYT58SWxsZWdhbCBCaXRlbXBvcmFsIFF1ZXJ5fCAgfCB8IDxhIG5hbWU9XFxcIjE2OVxcXCI+MTY5PC9hPnxJbnZhbGlkIEFsdGVybmF0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzBcXFwiPjE3MDwvYT58Q2Fubm90IEFkZCBOb24tV3JpdGFibGUgUHJvcGVydGllcyBUbyBFbnRpdHl8ICB8IHwgPGEgbmFtZT1cXFwiMTcxXFxcIj4xNzE8L2E+fEVudGl0eSBBbHJlYWR5IEV4aXN0cyBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzJcXFwiPjE3MjwvYT58RW50aXR5IFdpdGggSWQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTczXFxcIj4xNzM8L2E+fEVudGl0eSBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3NFxcXCI+MTc0PC9hPnxEZXJpdmVkIFBvcnRmb2xpbyBEZXRhaWxzIERvIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzVcXFwiPjE3NTwvYT58RW50aXR5IE5vdCBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzZcXFwiPjE3NjwvYT58UG9ydGZvbGlvIFdpdGggTmFtZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzdcXFwiPjE3NzwvYT58SW52YWxpZCBUcmFuc2FjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMTc4XFxcIj4xNzg8L2E+fFJlZmVyZW5jZSBQb3J0Zm9saW8gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE3OVxcXCI+MTc5PC9hPnxEdXBsaWNhdGUgSWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgwXFxcIj4xODA8L2E+fENvbW1hbmQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgxXFxcIj4xODE8L2E+fERhdGEgRmlsdGVyIEFwcGxpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgyXFxcIj4xODI8L2E+fFNlYXJjaCBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgzXFxcIj4xODM8L2E+fE1vdmVtZW50cyBFbmdpbmUgQ29uZmlndXJhdGlvbiBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODRcXFwiPjE4NDwvYT58RnggUmF0ZSBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NVxcXCI+MTg1PC9hPnxBY2NydWFsIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg2XFxcIj4xODY8L2E+fEFjY2VzcyBEZW5pZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTg3XFxcIj4xODc8L2E+fEludmFsaWQgSWRlbnRpdHkgVG9rZW58ICB8IHwgPGEgbmFtZT1cXFwiMTg4XFxcIj4xODg8L2E+fEludmFsaWQgUmVxdWVzdCBIZWFkZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjE4OVxcXCI+MTg5PC9hPnxQcmljZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkwXFxcIj4xOTA8L2E+fEludmFsaWQgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTFcXFwiPjE5MTwvYT58RHVwbGljYXRlIFN1YiBIb2xkaW5nIEtleXMgUHJvdmlkZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTkyXFxcIj4xOTI8L2E+fEN1dCBEZWZpbml0aW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTNcXFwiPjE5MzwvYT58Q3V0IERlZmluaXRpb24gSW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTRcXFwiPjE5NDwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IERlbGV0aW9uIERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk1XFxcIj4xOTU8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBEZWxldGlvbiBEYXRlIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTZcXFwiPjE5NjwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IFVwc2VydCBEYXRlIFVuc3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5N1xcXCI+MTk3PC9hPnxQZXJwZXR1YWwgUHJvcGVydHkgVXBzZXJ0IERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwMFxcXCI+MjAwPC9hPnxJbnZhbGlkIFVuaXQgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDFcXFwiPjIwMTwvYT58SW52YWxpZCBUeXBlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAyXFxcIj4yMDI8L2E+fEludmFsaWQgVmFsdWUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDNcXFwiPjIwMzwvYT58VW5pdCBOb3QgRGVmaW5lZCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNFxcXCI+MjA0PC9hPnxVbml0cyBOb3QgU3VwcG9ydGVkIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDVcXFwiPjIwNTwvYT58Q2Fubm90IFNwZWNpZnkgVW5pdHMgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNlxcXCI+MjA2PC9hPnxVbml0IFNjaGVtYSBJbmNvbnNpc3RlbnQgV2l0aCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA3XFxcIj4yMDc8L2E+fFVuaXQgRGVmaW5pdGlvbiBOb3QgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOFxcXCI+MjA4PC9hPnxEdXBsaWNhdGUgVW5pdCBEZWZpbml0aW9ucyBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA5XFxcIj4yMDk8L2E+fEludmFsaWQgVW5pdHMgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMTBcXFwiPjIxMDwvYT58SW52YWxpZCBJbnN0cnVtZW50IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTFcXFwiPjIxMTwvYT58SG9sZGluZ3MgQWRqdXN0bWVudCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTJcXFwiPjIxMjwvYT58Q291bGQgTm90IEJ1aWxkIEV4Y2VsIFVybHwgIHwgfCA8YSBuYW1lPVxcXCIyMTNcXFwiPjIxMzwvYT58Q291bGQgTm90IEdldCBFeGNlbCBWZXJzaW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxNFxcXCI+MjE0PC9hPnxJbnN0cnVtZW50IEJ5IENvZGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxNVxcXCI+MjE1PC9hPnxFbnRpdHkgU2NoZW1hIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxNlxcXCI+MjE2PC9hPnxGZWF0dXJlIE5vdCBTdXBwb3J0ZWQgT24gUG9ydGZvbGlvIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjE3XFxcIj4yMTc8L2E+fFF1b3RlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMThcXFwiPjIxODwvYT58SW52YWxpZCBRdW90ZSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjIxOVxcXCI+MjE5PC9hPnxJbnZhbGlkIE1ldHJpYyBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMFxcXCI+MjIwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMjFcXFwiPjIyMTwvYT58SW5zdHJ1bWVudCBVcHNlcnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMjJcXFwiPjIyMjwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjIzXFxcIj4yMjM8L2E+fFRyYW5zYWN0aW9uIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjI0XFxcIj4yMjQ8L2E+fEludmFsaWQgUHJvcGVydHkgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzBcXFwiPjIzMDwvYT58VHJhbnNhY3Rpb24gVHlwZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjMxXFxcIj4yMzE8L2E+fFRyYW5zYWN0aW9uIFR5cGUgRHVwbGljYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjMyXFxcIj4yMzI8L2E+fFBvcnRmb2xpbyBEb2VzIE5vdCBFeGlzdCBBdCBHaXZlbiBEYXRlfCAgfCB8IDxhIG5hbWU9XFxcIjIzM1xcXCI+MjMzPC9hPnxRdWVyeSBQYXJzZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzRcXFwiPjIzNDwvYT58RHVwbGljYXRlIENvbnN0aXR1ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzNVxcXCI+MjM1PC9hPnxVbnJlc29sdmVkIEluc3RydW1lbnQgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM2XFxcIj4yMzY8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBJbiBUcmFuc2l0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIzN1xcXCI+MjM3PC9hPnxNaXNzaW5nIFNpZGUgRGVmaW5pdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMjQwXFxcIj4yNDA8L2E+fER1cGxpY2F0ZSBDYWxjdWxhdGlvbnMgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyOTlcXFwiPjI5OTwvYT58SW52YWxpZCBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAwXFxcIj4zMDA8L2E+fE1pc3NpbmcgUmVjaXBlfCAgfCB8IDxhIG5hbWU9XFxcIjMwMVxcXCI+MzAxPC9hPnxEZXBlbmRlbmNpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzA0XFxcIj4zMDQ8L2E+fFBvcnRmb2xpbyBQcmVwcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEwXFxcIj4zMTA8L2E+fFZhbHVhdGlvbiBFbmdpbmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTFcXFwiPjMxMTwvYT58VGFzayBGYWN0b3J5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEyXFxcIj4zMTI8L2E+fFRhc2sgRXZhbHVhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxM1xcXCI+MzEzPC9hPnxUYXNrIEdlbmVyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTRcXFwiPjMxNDwvYT58RW5naW5lIENvbmZpZ3VyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTVcXFwiPjMxNTwvYT58TW9kZWwgU3BlY2lmaWNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMFxcXCI+MzIwPC9hPnxNYXJrZXQgRGF0YSBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjFcXFwiPjMyMTwvYT58TWFya2V0IFJlc29sdmVyIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIyXFxcIj4zMjI8L2E+fE1hcmtldCBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMwXFxcIj4zMzA8L2E+fEN1cnZlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMxXFxcIj4zMzE8L2E+fFZvbGF0aWxpdHkgU3VyZmFjZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMlxcXCI+MzMyPC9hPnxWb2xhdGlsaXR5IEN1YmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTBcXFwiPjM1MDwvYT58SW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MVxcXCI+MzUxPC9hPnxDYXNoIEZsb3dzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUyXFxcIj4zNTI8L2E+fFJlZmVyZW5jZSBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYwXFxcIj4zNjA8L2E+fEFnZ3JlZ2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYxXFxcIj4zNjE8L2E+fEFnZ3JlZ2F0aW9uIE1lYXN1cmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzBcXFwiPjM3MDwvYT58UmVzdWx0IFJldHJpZXZhbCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MVxcXCI+MzcxPC9hPnxSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MlxcXCI+MzcyPC9hPnxWZW5kb3IgUmVzdWx0IFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzNcXFwiPjM3MzwvYT58VmVuZG9yIFJlc3VsdCBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc0XFxcIj4zNzQ8L2E+fFZlbmRvciBMaWJyYXJ5IFVuYXV0aG9yaXNlZHwgIHwgfCA8YSBuYW1lPVxcXCIzNzVcXFwiPjM3NTwvYT58VmVuZG9yIENvbm5lY3Rpdml0eSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzZcXFwiPjM3NjwvYT58VmVuZG9yIEludGVyZmFjZSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzdcXFwiPjM3NzwvYT58VmVuZG9yIFByaWNpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzhcXFwiPjM3ODwvYT58VmVuZG9yIFRyYW5zbGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc5XFxcIj4zNzk8L2E+fFZlbmRvciBLZXkgTWFwcGluZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MFxcXCI+MzgwPC9hPnxWZW5kb3IgUmVmbGVjdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MVxcXCI+MzgxPC9hPnxWZW5kb3IgUHJvY2VzcyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MlxcXCI+MzgyPC9hPnxWZW5kb3IgU3lzdGVtIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzkwXFxcIj4zOTA8L2E+fEF0dGVtcHQgVG8gVXBzZXJ0IER1cGxpY2F0ZSBRdW90ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzkxXFxcIj4zOTE8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjM5MlxcXCI+MzkyPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIFNvdXJjZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIzOTNcXFwiPjM5MzwvYT58SW5zdHJ1bWVudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjM5NFxcXCI+Mzk0PC9hPnxQcm9wZXJ0aWVzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIzOTVcXFwiPjM5NTwvYT58QmF0Y2ggT3BlcmF0aW9uIEFib3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDAwXFxcIj40MDA8L2E+fEludmFsaWQgSXNvNDIxNyBDdXJyZW5jeSBDb2RlfCAgfCB8IDxhIG5hbWU9XFxcIjQwMVxcXCI+NDAxPC9hPnxDYW5ub3QgQXNzaWduIEluc3RydW1lbnQgSWRlbnRpZmllciBUbyBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDJcXFwiPjQwMjwvYT58Q2Fubm90IEFzc2lnbiBDdXJyZW5jeSBJZGVudGlmaWVyIFRvIE5vbiBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDNcXFwiPjQwMzwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgQmUgRGVsZXRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDRcXFwiPjQwNDwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgSGF2ZSBFY29ub21pYyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjQwNVxcXCI+NDA1PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIExvb2t0aHJvdWdoIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCI0MDZcXFwiPjQwNjwvYT58Q2Fubm90IENyZWF0ZSBDdXJyZW5jeSBJbnN0cnVtZW50IFdpdGggTXVsdGlwbGUgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDA3XFxcIj40MDc8L2E+fFNwZWNpZmllZCBDdXJyZW5jeSBJcyBVbmRlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDEwXFxcIj40MTA8L2E+fEluZGV4IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxMVxcXCI+NDExPC9hPnxTb3J0IEZpZWxkIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxM1xcXCI+NDEzPC9hPnxOZWdhdGl2ZSBQYWdpbmF0aW9uIFBhcmFtZXRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDE0XFxcIj40MTQ8L2E+fEludmFsaWQgU2VhcmNoIFN5bnRheHwgIHwgfCA8YSBuYW1lPVxcXCI0MTVcXFwiPjQxNTwvYT58RmlsdGVyIEV4ZWN1dGlvbiBUaW1lb3V0fCAgfCB8IDxhIG5hbWU9XFxcIjQyMFxcXCI+NDIwPC9hPnxTaWRlIERlZmluaXRpb24gSW5jb25zaXN0ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjQ1MFxcXCI+NDUwPC9hPnxJbnZhbGlkIFF1b3RlIEFjY2VzcyBNZXRhZGF0YSBSdWxlfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MVxcXCI+NDUxPC9hPnxBY2Nlc3MgTWV0YWRhdGEgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MlxcXCI+NDUyPC9hPnxJbnZhbGlkIEFjY2VzcyBNZXRhZGF0YSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjQ2MFxcXCI+NDYwPC9hPnxTdGFuZGFyZCBSZXNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYxXFxcIj40NjE8L2E+fFN0YW5kYXJkIFJlc291cmNlIENvbmZsaWN0fCAgfCB8IDxhIG5hbWU9XFxcIjQ2MlxcXCI+NDYyPC9hPnxDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYzXFxcIj40NjM8L2E+fERhdGUgSW4gQSBDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDY0XFxcIj40NjQ8L2E+fEludmFsaWQgRGF0ZSBTb3VyY2UgRGF0YXwgIHwgfCA8YSBuYW1lPVxcXCI0NjVcXFwiPjQ2NTwvYT58SW52YWxpZCBUaW1lem9uZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDFcXFwiPjYwMTwvYT58UGVyc29uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjAyXFxcIj42MDI8L2E+fFBlcnNvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjAzXFxcIj42MDM8L2E+fENhbm5vdCBTZXQgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCI2MTdcXFwiPjYxNzwvYT58SW52YWxpZCBSZWNpcGUgU3BlY2lmaWNhdGlvbiBJbiBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjYxOFxcXCI+NjE4PC9hPnxJbmxpbmUgUmVjaXBlIERlc2VyaWFsaXNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjYxOVxcXCI+NjE5PC9hPnxJZGVudGlmaWVyIFR5cGVzIE5vdCBTZXQgRm9yIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCI2MjBcXFwiPjYyMDwvYT58Q2Fubm90IERlbGV0ZSBBbGwgQ2xpZW50IERlZmluZWQgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNjUwXFxcIj42NTA8L2E+fFRoZSBPcmRlciByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNjU0XFxcIj42NTQ8L2E+fFRoZSBBbGxvY2F0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTVcXFwiPjY1NTwvYT58Q2Fubm90IGJ1aWxkIHRoZSBmeCBmb3J3YXJkIHRhcmdldCB3aXRoIHRoZSBnaXZlbiBob2xkaW5ncy58ICB8IHwgPGEgbmFtZT1cXFwiNjU2XFxcIj42NTY8L2E+fEdyb3VwIGRvZXMgbm90IGNvbnRhaW4gZXhwZWN0ZWQgZW50aXRpZXMufCAgfCB8IDxhIG5hbWU9XFxcIjY2NVxcXCI+NjY1PC9hPnxEZXN0aW5hdGlvbiBkaXJlY3Rvcnkgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY2N1xcXCI+NjY3PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY3MlxcXCI+NjcyPC9hPnxDb3VsZCBub3QgcmV0cmlldmUgZmlsZSBjb250ZW50c3wgIHwgfCA8YSBuYW1lPVxcXCI2NzNcXFwiPjY3MzwvYT58TWlzc2luZyBlbnRpdGxlbWVudHMgZm9yIGVudGl0aWVzIGluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjY3NFxcXCI+Njc0PC9hPnxOZXh0IEJlc3QgQWN0aW9uIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzZcXFwiPjY3NjwvYT58UmVsYXRpb24gZGVmaW5pdGlvbiBub3QgZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzdcXFwiPjY3NzwvYT58SW52YWxpZCBlbnRpdHkgaWRlbnRpZmllciBmb3IgcmVsYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjgxXFxcIj42ODE8L2E+fFNvcnRpbmcgYnkgc3BlY2lmaWVkIGZpZWxkIG5vdCBzdXBwb3J0ZWR8T25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVkIGZpZWxkcyB0byBvcmRlciBieSB3ZXJlIGVpdGhlciBpbnZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQuIHwgfCA8YSBuYW1lPVxcXCI2ODJcXFwiPjY4MjwvYT58VG9vIG1hbnkgZmllbGRzIHRvIHNvcnQgYnl8VGhlIG51bWJlciBvZiBmaWVsZHMgdG8gc29ydCB0aGUgZGF0YSBieSBleGNlZWRzIHRoZSBudW1iZXIgYWxsb3dlZCBieSB0aGUgZW5kcG9pbnQgfCB8IDxhIG5hbWU9XFxcIjY4NFxcXCI+Njg0PC9hPnxTZXF1ZW5jZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg1XFxcIj42ODU8L2E+fFNlcXVlbmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY4NlxcXCI+Njg2PC9hPnxOb24tY3ljbGluZyBzZXF1ZW5jZSBoYXMgYmVlbiBleGhhdXN0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjg3XFxcIj42ODc8L2E+fExlZ2FsIEVudGl0eSBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjY4OFxcXCI+Njg4PC9hPnxMZWdhbCBFbnRpdHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY4OVxcXCI+Njg5PC9hPnxUaGUgc3VwcGxpZWQgcGFnaW5hdGlvbiB0b2tlbiBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MFxcXCI+NjkwPC9hPnxQcm9wZXJ0eSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkxXFxcIj42OTE8L2E+fE11bHRpcGxlIFRheC1sb3RzIEZvciBDdXJyZW5jeSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkyXFxcIj42OTI8L2E+fFRoaXMgZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBpbXBlcnNvbmF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjY5M1xcXCI+NjkzPC9hPnxFbnRpdHkgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBSZWxhdGlvbnNoaXB8ICB8IHwgPGEgbmFtZT1cXFwiNjk0XFxcIj42OTQ8L2E+fFJlbGF0aW9uc2hpcCBWYWxpZGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjk1XFxcIj42OTU8L2E+fFJlbGF0aW9uc2hpcCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjk3XFxcIj42OTc8L2E+fERlcml2ZWQgUHJvcGVydHkgRm9ybXVsYSBObyBMb25nZXIgVmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjk4XFxcIj42OTg8L2E+fFN0b3J5IGlzIG5vdCBhdmFpbGFibGV8ICB8IHwgPGEgbmFtZT1cXFwiNzAzXFxcIj43MDM8L2E+fENvcnBvcmF0ZSBBY3Rpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNzIwXFxcIj43MjA8L2E+fFRoZSBwcm92aWRlZCBzb3J0IGFuZCBmaWx0ZXIgY29tYmluYXRpb24gaXMgbm90IHZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjcyMVxcXCI+NzIxPC9hPnxBMkIgZ2VuZXJhdGlvbiBmYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIyXFxcIj43MjI8L2E+fEFnZ3JlZ2F0ZWQgUmV0dXJuIENhbGN1bGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNzIzXFxcIj43MjM8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjcyNFxcXCI+NzI0PC9hPnxDdXN0b20gRW50aXR5IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjcyNVxcXCI+NzI1PC9hPnxUaGUgUGxhY2VtZW50IHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjZcXFwiPjcyNjwvYT58VGhlIEV4ZWN1dGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI3XFxcIj43Mjc8L2E+fFRoZSBCbG9jayByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI4XFxcIj43Mjg8L2E+fFRoZSBQYXJ0aWNpcGF0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjlcXFwiPjcyOTwvYT58VGhlIFBhY2thZ2UgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczMFxcXCI+NzMwPC9hPnxUaGUgT3JkZXJJbnN0cnVjdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMyXFxcIj43MzI8L2E+fEN1c3RvbSBFbnRpdHkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzNcXFwiPjczMzwvYT58Q3VzdG9tIEVudGl0eSBJZGVudGlmaWVyIGFscmVhZHkgaW4gdXNlLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzVcXFwiPjczNTwvYT58Q2FsY3VsYXRpb24gRmFpbGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzZcXFwiPjczNjwvYT58QW4gZXhwZWN0ZWQga2V5IG9uIEh0dHBSZXNwb25zZSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzdcXFwiPjczNzwvYT58QSByZXF1aXJlZCBmZWUgZGV0YWlsIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczOFxcXCI+NzM4PC9hPnxaZXJvIHJvd3Mgd2VyZSByZXR1cm5lZCBmcm9tIEx1bWluZXNjZXwgIHwgfCA8YSBuYW1lPVxcXCI3MzlcXFwiPjczOTwvYT58UHJvdmlkZWQgV2Vla2VuZCBNYXNrIHdhcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjc0MlxcXCI+NzQyPC9hPnxDdXN0b20gRW50aXR5IGZpZWxkcyBkbyBub3QgbWF0Y2ggdGhlIGRlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNzQ2XFxcIj43NDY8L2E+fFRoZSBwcm92aWRlZCBzZXF1ZW5jZSBpcyBub3QgdmFsaWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1MVxcXCI+NzUxPC9hPnxUaGUgdHlwZSBvZiB0aGUgQ3VzdG9tIEVudGl0eSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdHlwZSBwcm92aWRlZCBpbiB0aGUgZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiNzUyXFxcIj43NTI8L2E+fEx1bWluZXNjZSBwcm9jZXNzIHJldHVybmVkIGFuIGVycm9yLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTNcXFwiPjc1MzwvYT58RmlsZSBuYW1lIG9yIGNvbnRlbnQgaW5jb21wYXRpYmxlIHdpdGggb3BlcmF0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTVcXFwiPjc1NTwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gRHJpdmUgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTdcXFwiPjc1NzwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gTHVtaW5lc2NlIGlzIG5vdCBhcyBleHBlY3RlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzU4XFxcIj43NTg8L2E+fEx1bWluZXNjZSB0aW1lZCBvdXQufCAgfCB8IDxhIG5hbWU9XFxcIjc2M1xcXCI+NzYzPC9hPnxJbnZhbGlkIEx1c2lkIEVudGl0eSBJZGVudGlmaWVyIFVuaXR8ICB8IHwgPGEgbmFtZT1cXFwiNzY4XFxcIj43Njg8L2E+fEZlZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzY5XFxcIj43Njk8L2E+fENhbm5vdCB1cGRhdGUgdGhlIGJhc2UgY3VycmVuY3kgb2YgYSBwb3J0Zm9saW8gd2l0aCB0cmFuc2FjdGlvbnMgbG9hZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjc3MVxcXCI+NzcxPC9hPnxUcmFuc2FjdGlvbiBjb25maWd1cmF0aW9uIHNvdXJjZSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzc0XFxcIj43NzQ8L2E+fENvbXBsaWFuY2UgcnVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc3NVxcXCI+Nzc1PC9hPnxGdW5kIGFjY291bnRpbmcgZG9jdW1lbnQgY2Fubm90IGJlIHByb2Nlc3NlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc4XFxcIj43Nzg8L2E+fFVuYWJsZSB0byBsb29rIHVwIEZYIHJhdGUgZnJvbSB0cmFkZSBjY3kgdG8gcG9ydGZvbGlvIGNjeSBmb3Igc29tZSBvZiB0aGUgdHJhZGVzLnwgIHwgfCA8YSBuYW1lPVxcXCI3ODJcXFwiPjc4MjwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZGF0YVR5cGUgaXMgbm90IG1hdGNoaW5nIHRoZSBkZXJpdmF0aW9uIGZvcm11bGEgZGF0YVR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiNzgzXFxcIj43ODM8L2E+fFRoZSBQcm9wZXJ0eSBkZWZpbml0aW9uIGRvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXJpdmVkIHByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiNzg4XFxcIj43ODg8L2E+fENvbXBsaWFuY2UgcnVuIG5vdCBmb3VuZCBmYWlsdXJlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTBcXFwiPjc5MDwvYT58Q3VzdG9tIEVudGl0eSBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjc5MVxcXCI+NzkxPC9hPnxDdXN0b20gRW50aXR5IGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNzkyXFxcIj43OTI8L2E+fENvbXBsaWFuY2UgUHJvcGVydHlLZXkgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzkzXFxcIj43OTM8L2E+fENvbXBsaWFuY2UgQ3JpdGVyaWEgVmFsdWUgZm9yIG1hdGNoaW5nIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjc5NVxcXCI+Nzk1PC9hPnxDYW5ub3QgZGVsZXRlIGlkZW50aWZpZXIgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3OTZcXFwiPjc5NjwvYT58VGF4IHJ1bGUgc2V0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzk3XFxcIj43OTc8L2E+fEEgdGF4IHJ1bGUgc2V0IHdpdGggdGhpcyBpZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiNzk4XFxcIj43OTg8L2E+fE11bHRpcGxlIHJ1bGUgc2V0cyBmb3IgdGhlIHNhbWUgcHJvcGVydHkga2V5IGFyZSBhcHBsaWNhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTlcXFwiPjc5OTwvYT58VGhlIHJlcXVlc3QgbXVzdCBjb250YWluIGEgZGF0ZSBvciBkaWFyeSBlbnRyeS58ICB8IHwgPGEgbmFtZT1cXFwiODAwXFxcIj44MDA8L2E+fENhbiBub3QgdXBzZXJ0IGFuIGluc3RydW1lbnQgZXZlbnQgb2YgdGhpcyB0eXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDFcXFwiPjgwMTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwMlxcXCI+ODAyPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBpcyBtaXNzaW5nIHNhbGllbnQgaW5mb3JtYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjgwM1xcXCI+ODAzPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDRcXFwiPjgwNDwvYT58U29tZSBkYXRhIHJlcXVlc3RlZCBkb2VzIG5vdCBmb2xsb3cgdGhlIG9yZGVyIGdyYXBoIGFzc3VtcHRpb25zLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDVcXFwiPjgwNTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgdHlwZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA2XFxcIj44MDY8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDdcXFwiPjgwNzwvYT58VGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwOFxcXCI+ODA4PC9hPnxUaGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxMVxcXCI+ODExPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjgxMlxcXCI+ODEyPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gYWxsb2NhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODEzXFxcIj44MTM8L2E+fENoYXJ0IG9mIEFjY291bnRzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE0XFxcIj44MTQ8L2E+fEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTVcXFwiPjgxNTwvYT58QWJvciBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNlxcXCI+ODE2PC9hPnxBYm9yIENvbmZpZ3VyYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTdcXFwiPjgxNzwvYT58UmVjb25jaWxpYXRpb24gbWFwcGluZyBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODE4XFxcIj44MTg8L2E+fEF0dHJpYnV0ZSB0eXBlIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MTlcXFwiPjgxOTwvYT58UmVjb25jaWxpYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjBcXFwiPjgyMDwvYT58Q3VzdG9kaWFuIEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjFcXFwiPjgyMTwvYT58QWxsb2NhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjgyMlxcXCI+ODIyPC9hPnxSZWNvbmNpbGlhdGlvbiBydW4gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgyM1xcXCI+ODIzPC9hPnxSZWNvbmNpbGlhdGlvbiBicmVhayBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODI0XFxcIj44MjQ8L2E+fEVudGl0eSBsaW5rIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgyOFxcXCI+ODI4PC9hPnxBZGRyZXNzIGtleSBkZWZpbml0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODI5XFxcIj44Mjk8L2E+fENvbXBsaWFuY2UgdGVtcGxhdGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzBcXFwiPjgzMDwvYT58QWN0aW9uIG5vdCBzdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiODMxXFxcIj44MzE8L2E+fFJlZmVyZW5jZSBsaXN0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMyXFxcIj44MzI8L2E+fFBvc3RpbmcgTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMzXFxcIj44MzM8L2E+fFRoZSB0eXBlIG9mIHBhcmFtZXRlciBwcm92aWRlZCBkaWQgbm90IG1hdGNoIHRoYXQgcmVxdWlyZWQgYnkgdGhlIGNvbXBsaWFuY2UgcnVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODM0XFxcIj44MzQ8L2E+fFRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IGEgcnVsZSBkaWQgbm90IG1hdGNoIHRob3NlIHJlcXVpcmVkIGJ5IGl0cyB0ZW1wbGF0ZS58ICB8IHwgPGEgbmFtZT1cXFwiODM1XFxcIj44MzU8L2E+fFRoZSBlbnRpdHkgaGFzIGEgcHJvcGVydHkgaW4gYSBkb21haW4gdGhhdCBpcyBub3Qgc3VwcHJ0ZWQgZm9yIHRoYXQgZW50aXR5IHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNlxcXCI+ODM2PC9hPnxTdHJ1Y3R1cmVkIHJlc3VsdCBkYXRhIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM3XFxcIj44Mzc8L2E+fERpYXJ5IGVudHJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM4XFxcIj44Mzg8L2E+fERpYXJ5IGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzlcXFwiPjgzOTwvYT58RGlhcnkgZW50cnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg2MVxcXCI+ODYxPC9hPnxDb21wbGlhbmNlIHJ1biBzdW1tYXJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODY5XFxcIj44Njk8L2E+fENvbmZsaWN0aW5nIGluc3RydW1lbnQgcHJvcGVydGllcyBpbiBiYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiODcwXFxcIj44NzA8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg3MVxcXCI+ODcxPC9hPnxUaGUgc3BlY2lmaWVkIGltcGVyc29uYXRlZCB1c2VyIGRvZXMgbm90IGV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjg3NFxcXCI+ODc0PC9hPnxQcm92aWRlZCBQcm9wZXJ0eSBEb21haW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZW50aXR5IGZpbHRlci58ICB8IHwgPGEgbmFtZT1cXFwiODc1XFxcIj44NzU8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFJlZmVyZW5jZSBMaXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4NzZcXFwiPjg3NjwvYT58Q2xlYXJkb3duIE1vZHVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjg3OVxcXCI+ODc5PC9hPnxQb3J0Zm9saW9zIGRvIG5vdCBoYXZlIHRoZSBzYW1lIGJhc2UgY3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiODgwXFxcIj44ODA8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29tcGxpYW5jZSBleHByZXNzaW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODFcXFwiPjg4MTwvYT58QmxvY2sgb3ZlcnBsYWNlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgyXFxcIj44ODI8L2E+fE9yZGVyIG5vdCBhcHByb3ZlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgzXFxcIj44ODM8L2E+fENhbm5vdCB1cGRhdGUgdGhlIHNoYXJlZCBmaWVsZHMgb2YgYSBibG9jayB3aXRoIGFzc29jaWF0ZWQgb3JkZXJzLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODZcXFwiPjg4NjwvYT58Q2Fubm90IGxvY2sgdGhlIHBlcmlvZC58ICB8IHwgPGEgbmFtZT1cXFwiODg3XFxcIj44ODc8L2E+fENhbm5vdCBhcHBseSBjbGVhciBkb3duIG1vZHVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODg4XFxcIj44ODg8L2E+fENhbm5vdCB1cHNlcnQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODg5XFxcIj44ODk8L2E+fENhbm5vdCByZWFkIEluc3RydW1lbnQgRXZlbnQgSW5zdHJ1Y3Rpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg5NVxcXCI+ODk1PC9hPnxUaGUgQ2FwaXRhbCBSYXRpbyBDYWxjdWxhdGlvbiBJcyBXcm9uZy58ICB8IHwgPGEgbmFtZT1cXFwiOTEwXFxcIj45MTA8L2E+fENhbm5vdCB1cGRhdGUgYSBibG9jayByZWZlcmVuY2VkIGJ5IGEgcGxhY2VtZW50LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTFcXFwiPjkxMTwvYT58QSBGdW5kIHRoYXQgcmVmZXJlbmNlcyB0aGlzIEFib3IgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjkxMlxcXCI+OTEyPC9hPnxDYW5ub3QgYWRkIGRlY2lzaW9uIHRvIFN0YWdlZCBNb2RpZmljYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkxM1xcXCI+OTEzPC9hPnxUaGUgU3RhZ2VkIE1vZGlmaWNhdGlvbiBjb3VsZCBub3QgYmUgYXBwbGllZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE0XFxcIj45MTQ8L2E+fEFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkxNVxcXCI+OTE1PC9hPnxDYW5ub3QgdXBzZXJ0IG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIHByb3BlcnR5IGluIG9uZSByZXF1ZXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTZcXFwiPjkxNjwvYT58UGxhY2VtZW50IGFuZCBkaXJlY3QgZGVzY2VuZGVudHMgaGF2ZSBtb3JlIGV4ZWN1dGVkIHF1YW50aXR5IHRoYW4gdG90YWwgcGxhY2VtZW50IHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTdcXFwiPjkxNzwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgRW50cnlUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MThcXFwiPjkxODwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCBpbiB0aGlzIFN0YXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTlcXFwiPjkxOTwvYT58UGxhY2VtZW50IGNvdWxkIG5vdCBiZSBjYW5jZWxsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkyMFxcXCI+OTIwPC9hPnxTaGFyZSBDbGFzcyBub3QgY29uZmlndXJlZCBpbiBGdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjkyMVxcXCI+OTIxPC9hPnxTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXkgbm90IGNvbmZpZ3VyZWQgaW4gUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjkyMlxcXCI+OTIyPC9hPnxDb3VsZCBub3QgdXBkYXRlIGFuIG9yZGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjNcXFwiPjkyMzwvYT58TXVsdGlwbGUgc2V0cyBvZiBTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXlzIGNvbmZpZ3VyZWQgYWNyb3NzIHRoZSBQb3J0Zm9saW9zIG9mIGEgRnVuZC58ICB8IHwgPGEgbmFtZT1cXFwiOTI0XFxcIj45MjQ8L2E+fE9uZSBvciBtb3JlIG1hdHJpeCBjZWxscyBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG1hdHJpeC58ICB8IHwgPGEgbmFtZT1cXFwiOTI1XFxcIj45MjU8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgcHJvdmlkZWQgbWF0cml4IGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkyNlxcXCI+OTI2PC9hPnxNYXRyaXggZGVmaW5pdGlvbiBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTI3XFxcIj45Mjc8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjhcXFwiPjkyODwvYT58RGF0YVR5cGUgd2l0aCBJZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTI5XFxcIj45Mjk8L2E+fFNxdWFyZSBtYXRyaXggaXMgaW5jb21wbGV0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTMwXFxcIj45MzA8L2E+fEEgY29uZGl0aW9uYWwgbGljZW5zZSB0ZXJtIGhhcyBiZWVuIGV4Y2VlZGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzFcXFwiPjkzMTwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHJlcXVlc3RlZCBpcyBub3QgaW50ZW5kZWQgZm9yIHRoZSBlbnRpdHkgcHJvdmlkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMlxcXCI+OTMyPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBtYW5kYXRvcnkgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTMzXFxcIj45MzM8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGEgcHJvcGVydHkgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM0XFxcIj45MzQ8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBpZGVudGlmaWVyIHNwZWNpZmllZCBieSB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNVxcXCI+OTM1PC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBhbiBpZGVudGlmaWVyIG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjaWZpZWQgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNlxcXCI+OTM2PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgaW5jbHVkZWQgYW4gYWxpYXMgb3Igc29ydC1ieSBhdHRyaWJ1dGUgdGhhdCB3YXMgbm90IG9uIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzdcXFwiPjkzNzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTM4XFxcIj45Mzg8L2E+fFRoZSBuZXcgQ2xvc2VkIFBlcmlvZCB3b3VsZCBjYXVzZSB0aGUgVGltZWxpbmUgdG8gaGF2ZSBub24tY29udGlndW91cyBDbG9zZWQgUGVyaW9kc3wgIHwgfCA8YSBuYW1lPVxcXCI5MzlcXFwiPjkzOTwvYT58QmxvY2tlZCBieSBhIE5ldHdvcmsgWm9uZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDBcXFwiPjk0MDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTQxXFxcIj45NDE8L2E+fE9yZGVyIG5vdCBjb21wbGlhbnQufCAgfCB8IDxhIG5hbWU9XFxcIjk0MlxcXCI+OTQyPC9hPnxBY3Rpb24gd291bGQgY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ0XFxcIj45NDQ8L2E+fERlcml2ZWQgUHJvcGVydHkgY2FsY3VsYXRpb24gbm90IGNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDVcXFwiPjk0NTwvYT58RGVyaXZlZCBQcm9wZXJ0eSBpcyBub3QgZmlsdGVyYWJsZS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ2XFxcIj45NDY8L2E+fFRoZSBjb25kaXRpb25zIHByb3ZpZGVkIGhhdmUgb25lIG9yIG1vcmUgZXJyb3JzLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDdcXFwiPjk0NzwvYT58VGhlIHByb3BlcnR5L2lkZW50aWZpZXIgZG9tYWluIGFuZCBlbnRpdHkgZG9tYWluIGRvIG5vdCBtYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiOTQ4XFxcIj45NDg8L2E+fEludmFsaWQgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTQ5XFxcIj45NDk8L2E+fEZpbHRlcmFibGUgRGVyaXZlZCBQcm9wZXJ0eSBsaW1pdCByZWFjaGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5NTBcXFwiPjk1MDwvYT58SW52ZXN0b3IgUmVjb3JkIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUxXFxcIj45NTE8L2E+fEludmVzdG9yIFJlY29yZCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTUyXFxcIj45NTI8L2E+fEludmVzdG1lbnQgQWNjb3VudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjk1M1xcXCI+OTUzPC9hPnxJbnZlc3RtZW50IEFjY291bnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjk1NFxcXCI+OTU0PC9hPnxDb3VsZCBOb3QgU3dlZXAgQmxvY2t8ICB8IHwgPGEgbmFtZT1cXFwiOTU1XFxcIj45NTU8L2E+fEVudGl0eSBVbmlxdWUgSWQgaGFzIHRoZSB3cm9uZyBmb3JtYXR8ICB8IHwgPGEgbmFtZT1cXFwiOTU2XFxcIj45NTY8L2E+fFBvc3QgQ2xvc2UgQWN0aXZpdHkgaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTdcXFwiPjk1NzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTU4XFxcIj45NTg8L2E+fEludmFsaWQgU2V0dGxlbWVudCBJbnN0cnVjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiOTU5XFxcIj45NTk8L2E+fE9yZGVyIHJlcXVpcmVzIHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NjBcXFwiPjk2MDwvYT58SW52YWxpZCBEYXRhUG9pbnQgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCI5NjFcXFwiPjk2MTwvYT58SW52YWxpZCBSZWxhdGlvbmFsIERhdGFzZXQgRmllbGQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjJcXFwiPjk2MjwvYT58UmVsYXRpb25hbCBEYXRhc2V0IERlZmluaXRpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiOTYzXFxcIj45NjM8L2E+fFRpbWVsaW5lIEJvb2ttYXJrIE5vdCBJbiBPcGVuIFBlcmlvZHwgIHwgfCA8YSBuYW1lPVxcXCI5NjRcXFwiPjk2NDwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHNwZWNpZmllZCBpZGVudGlmaWVycyBidXQgdGhlIGVudGl0eSBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NVxcXCI+OTY1PC9hPnxUaGUgc29ydCBieSBwcm92aWRlZCBoYXMgb25lIG9yIG1vcmUgZXJyb3JzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NlxcXCI+OTY2PC9hPnxJbnZhbGlkIEN1c3RvbSBEYXRhIE1vZGVsIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY3XFxcIj45Njc8L2E+fFJ1bGUgc2V0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBDaGVjayBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2OFxcXCI+OTY4PC9hPnxUaGUgQ2xvc2VkIFBlcmlvZCBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk2OVxcXCI+OTY5PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBTdG9wIFByaWNlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzBcXFwiPjk3MDwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgTGltaXQgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MVxcXCI+OTcxPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhlIGN1cnJlbnQgVHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiOTc0XFxcIj45NzQ8L2E+fENhbm5vdCBQbGFjZUJsb2NrcyBhZ2FpbnN0IGFuIFxcJ1Vuc29saWNpdGVkXFwnIEJsb2NrIChibG9jayBjb250YWluaW5nIDAgT3JkZXJzKS58ICB8IHwgPGEgbmFtZT1cXFwiOTc1XFxcIj45NzU8L2E+fE5vIFBvcnRmb2xpbyBHcm91cCBTZWxlY3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI5NzZcXFwiPjk3NjwvYT58QW1iaWd1b3VzIFNjb3BlfCAgfCBcbiAqXG4gKiBDb250YWN0OiBpbmZvQGZpbmJvdXJuZS5jb21cbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IERlbGV0ZWRFbnRpdHlSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2RlbGV0ZWRFbnRpdHlSZXNwb25zZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBGdW5kU3RydWN0dXJlIH0gZnJvbSAnLi4vbW9kZWwvZnVuZFN0cnVjdHVyZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBGdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2Z1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvZnVuZFN0cnVjdHVyZVJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTHVzaWRQcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uL21vZGVsL2x1c2lkUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFZhbGlkYXRpb25Qcm9ibGVtRGV0YWlscyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBQYWdlZFJlc291cmNlTGlzdE9mRnVuZFN0cnVjdHVyZSB9IGZyb20gJy4uL21vZGVsL3BhZ2VkUmVzb3VyY2VMaXN0T2ZGdW5kU3RydWN0dXJlJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBBZGRGdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlLiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEZ1bmQgU3RydWN0dXJlLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIG5vZGUgdG8gYWRkIGFuZCB0aGUgbGlua3Mgam9pbmluZyBpdCB0byBleGlzdGluZyBtZW1iZXJzLiAqL1xuICAgIGZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0OiBGdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdDtcbiAgICAvKiogVGhlIGVmZmVjdGl2ZSBkYXRldGltZSBvciBjdXQgbGFiZWwgZnJvbSB3aGljaCB0aGUgbWVtYmVyIGlzIHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlLiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBGdW5kIFN0cnVjdHVyZS4gKi9cbiAgICBmdW5kU3RydWN0dXJlUmVxdWVzdDogRnVuZFN0cnVjdHVyZVJlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlRnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlIHRvIGJlIGRlbGV0ZWQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlIHRvIGJlIGRlbGV0ZWQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIG9yIGN1dCBsYWJlbCBmcm9tIHdoaWNoIHRoZSBGdW5kIFN0cnVjdHVyZSBpcyBkZWxldGVkLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBMVVNJRCBzeXN0ZW0gZGF0ZXRpbWUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBlZmZlY3RpdmVBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlLiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEZ1bmQgU3RydWN0dXJlLiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIGVmZmVjdGl2ZSBkYXRldGltZSBvciBjdXQgbGFiZWwgYXQgd2hpY2ggdG8gcmV0cmlldmUgdGhlIEZ1bmQgU3RydWN0dXJlLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBMVVNJRCBzeXN0ZW0gZGF0ZXRpbWUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBlZmZlY3RpdmVBdD86IHN0cmluZztcbiAgICAvKiogVGhlIGFzQXQgZGF0ZXRpbWUgYXQgd2hpY2ggdG8gcmV0cmlldmUgdGhlIEZ1bmQgU3RydWN0dXJlLiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbiAgICAvKiogQSBsaXN0IG9mIHByb3BlcnR5IGtleXMgZnJvbSB0aGUgXFwmIzM5O0Z1bmRTdHJ1Y3R1cmVcXCYjMzk7IGRvbWFpbiB0byBkZWNvcmF0ZSBvbnRvIHRoZSBGdW5kIFN0cnVjdHVyZS4gICAgICAgICAgICAgIFRoZXNlIG11c3QgdGFrZSB0aGUgZm9ybWF0IHtkb21haW59L3tzY29wZX0ve2NvZGV9LCBmb3IgZXhhbXBsZSBcXCYjMzk7RnVuZFN0cnVjdHVyZS9NYW5hZ2VyL0lkXFwmIzM5Oy4gSWYgbm8gcHJvcGVydGllcyBhcmUgc3BlY2lmaWVkLCB0aGVuIG5vIHByb3BlcnRpZXMgd2lsbCBiZSByZXR1cm5lZC4gKi9cbiAgICBwcm9wZXJ0eUtleXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RGdW5kU3RydWN0dXJlc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIG9yIGN1dCBsYWJlbCBhdCB3aGljaCB0byBsaXN0IHRoZSBGdW5kIFN0cnVjdHVyZXMuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IExVU0lEIHN5c3RlbSBkYXRldGltZSBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGVmZmVjdGl2ZUF0Pzogc3RyaW5nO1xuICAgIC8qKiBUaGUgYXNBdCBkYXRldGltZSBhdCB3aGljaCB0byBsaXN0IEZ1bmQgU3RydWN0dXJlcy4gRGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIEZ1bmQgU3RydWN0dXJlIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbiAgICAvKiogVGhlIHBhZ2luYXRpb24gdG9rZW4gdG8gdXNlIHRvIGNvbnRpbnVlIGxpc3RpbmcgRnVuZCBTdHJ1Y3R1cmVzOyB0aGlzIHZhbHVlIGlzIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuIElmIGEgcGFnaW5hdGlvbiB0b2tlbiBpcyBwcm92aWRlZCwgdGhlIGZpbHRlciBhbmQgYXNBdCBmaWVsZHMgbXVzdCBub3QgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBvcmlnaW5hbCByZXF1ZXN0LiAqL1xuICAgIHBhZ2U/OiBzdHJpbmc7XG4gICAgLyoqIFdoZW4gcGFnaW5hdGluZywgbGltaXQgdGhlIHJlc3VsdHMgdG8gdGhpcyBudW1iZXIuIERlZmF1bHRzIHRvIDEwMCBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBFeHByZXNzaW9uIHRvIGZpbHRlciB0aGUgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHRvIGZpbHRlciBvbiB0aGUgRnVuZCBTdHJ1Y3R1cmUgY29kZSwgc3BlY2lmeSBcXCZxdW90O2lkLkNvZGUgZXEgXFwmIzM5O1N0cnVjdHVyZTFcXCYjMzk7XFwmcXVvdDsuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGZpbHRlcmluZyByZXN1bHRzLCBzZWUgaHR0cHM6Ly9zdXBwb3J0Lmx1c2lkLmNvbS9kb2NzL2ZpbHRlcmluZy1pbmZvcm1hdGlvbi1yZXRyaWV2ZWQtZnJvbS1sdXNpZC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyB0byBzb3J0IGJ5LCBlYWNoIHN1ZmZpeGVkIGJ5IFxcJnF1b3Q7IEFTQ1xcJnF1b3Q7IG9yIFxcJnF1b3Q7IERFU0NcXCZxdW90Oy4gKi9cbiAgICBzb3J0Qnk/OiBBcnJheTxzdHJpbmc+O1xuICAgIC8qKiBBIGxpc3Qgb2YgcHJvcGVydHkga2V5cyBmcm9tIHRoZSBcXCYjMzk7RnVuZFN0cnVjdHVyZVxcJiMzOTsgZG9tYWluIHRvIGRlY29yYXRlIG9udG8gZWFjaCBGdW5kIFN0cnVjdHVyZS4gICAgICAgICAgICAgIFRoZXNlIG11c3QgdGFrZSB0aGUgZm9ybWF0IHtkb21haW59L3tzY29wZX0ve2NvZGV9LCBmb3IgZXhhbXBsZSBcXCYjMzk7RnVuZFN0cnVjdHVyZS9NYW5hZ2VyL0lkXFwmIzM5Oy4gKi9cbiAgICBwcm9wZXJ0eUtleXM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBGdW5kIFN0cnVjdHVyZS4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29kZSBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgbm9kZSBjb2RlIG9mIHRoZSBtZW1iZXIgdG8gcmVtb3ZlLiAqL1xuICAgIG5vZGVDb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBlZmZlY3RpdmUgZGF0ZXRpbWUgb3IgY3V0IGxhYmVsIGZyb20gd2hpY2ggdGhlIG1lbWJlciBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUgc3RydWN0dXJlLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBMVVNJRCBzeXN0ZW0gZGF0ZXRpbWUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBlZmZlY3RpdmVBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcHNlcnRGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEZ1bmQgU3RydWN0dXJlLiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEZ1bmQgU3RydWN0dXJlLCBhbmQgbXVzdCBtYXRjaCB0aGUgY29kZSBpbiB0aGUgcmVxdWVzdCBib2R5LiAqL1xuICAgIGNvZGU6IHN0cmluZztcbiAgICAvKiogVGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiB0aGUgRnVuZCBTdHJ1Y3R1cmUgZnJvbSB0aGUgZWZmZWN0aXZlIGRhdGV0aW1lIGluIHRoZSByZXF1ZXN0LCBvciB0aGUgY3VycmVudCBMVVNJRCBzeXN0ZW0gZGF0ZXRpbWUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBmdW5kU3RydWN0dXJlUmVxdWVzdDogRnVuZFN0cnVjdHVyZVJlcXVlc3Q7XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRnVuZFN0cnVjdHVyZXNTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL3d3dy5sdXNpZC5jb20vYXBpJztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKUBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nfHN0cmluZ1tdLCBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IGZpcnN0QmFzZVBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICAgIH1cblxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VYUEVSSU1FTlRBTF0gQWRkRnVuZFN0cnVjdHVyZU1lbWJlcjogQWRkIGEgbWVtYmVyIHRvIGEgRnVuZCBTdHJ1Y3R1cmUuXG4gICAgICogQWRkIGEgbm9kZSBhbmQgdGhlIGxpbmtzIHRoYXQgam9pbiBpdCB0byBleGlzdGluZyBtZW1iZXJzLCBmcm9tIGFuIGVmZmVjdGl2ZSBkYXRldGltZS4gVGhlIHJlc3VsdCBpcyBhIG5ldyAgYml0ZW1wb3JhbCB2ZXJzaW9uIG9mIHRoZSBzdHJ1Y3R1cmUuIFRoZSBjaGFuZ2UgYXBwbGllcyB0byB0aGUgdmVyc2lvbiBpbiBmb3JjZSBhdCB0aGF0IGRhdGV0aW1lOyBpZiBhICBsYXRlciB2ZXJzaW9uIG9mIHRoZSBzdHJ1Y3R1cmUgYWxyZWFkeSBleGlzdHMgdGhlIHJlcXVlc3QgaXMgcmVqZWN0ZWQsIHNpbmNlIHRoZSBtZW1iZXIgd291bGQgb3RoZXJ3aXNlICBkcm9wIG91dCB3aGVuIHRoYXQgdmVyc2lvbiBiZWdpbnMuIFVwc2VydCB0aGUgZnVsbCBkZWZpbml0aW9uIGZvciBlYWNoIGFmZmVjdGVkIHZlcnNpb24gaW4gdGhhdCBjYXNlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGdW5kU3RydWN0dXJlTWVtYmVyKHJlcXVlc3RQYXJhbWV0ZXJzPzogQWRkRnVuZFN0cnVjdHVyZU1lbWJlclJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxGdW5kU3RydWN0dXJlPjtcbiAgICBwdWJsaWMgYWRkRnVuZFN0cnVjdHVyZU1lbWJlcihyZXF1ZXN0UGFyYW1ldGVycz86IEFkZEZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxGdW5kU3RydWN0dXJlPj47XG4gICAgcHVibGljIGFkZEZ1bmRTdHJ1Y3R1cmVNZW1iZXIocmVxdWVzdFBhcmFtZXRlcnM/OiBBZGRGdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEZ1bmRTdHJ1Y3R1cmU+PjtcbiAgICBwdWJsaWMgYWRkRnVuZFN0cnVjdHVyZU1lbWJlcihyZXF1ZXN0UGFyYW1ldGVycz86IEFkZEZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBhZGRGdW5kU3RydWN0dXJlTWVtYmVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYWRkRnVuZFN0cnVjdHVyZU1lbWJlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5mdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdDtcbiAgICAgICAgaWYgKGZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0ID09PSBudWxsIHx8IGZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYWRkRnVuZFN0cnVjdHVyZU1lbWJlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5lZmZlY3RpdmVBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2Z1bmRzdHJ1Y3R1cmVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vbWVtYmVyc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxGdW5kU3RydWN0dXJlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogZnVuZFN0cnVjdHVyZU1lbWJlclJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIENyZWF0ZUZ1bmRTdHJ1Y3R1cmU6IENyZWF0ZSBhIEZ1bmQgU3RydWN0dXJlLlxuICAgICAqIENyZWF0ZSBhIG5ldyBGdW5kIFN0cnVjdHVyZSBNb2RlbC4gVGhlIHNjb3BlIGFuZCBjb2RlIG9mIHRoZSBGdW5kIFN0cnVjdHVyZSBhcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZUZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8RnVuZFN0cnVjdHVyZT47XG4gICAgcHVibGljIGNyZWF0ZUZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RnVuZFN0cnVjdHVyZT4+O1xuICAgIHB1YmxpYyBjcmVhdGVGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlRnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxGdW5kU3RydWN0dXJlPj47XG4gICAgcHVibGljIGNyZWF0ZUZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zY29wZTtcbiAgICAgICAgaWYgKHNjb3BlID09PSBudWxsIHx8IHNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNjb3BlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlRnVuZFN0cnVjdHVyZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdW5kU3RydWN0dXJlUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5mdW5kU3RydWN0dXJlUmVxdWVzdDtcbiAgICAgICAgaWYgKGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0ID09PSBudWxsIHx8IGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlRnVuZFN0cnVjdHVyZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEZ1bmRTdHJ1Y3R1cmU+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBmdW5kU3RydWN0dXJlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIERlbGV0ZUZ1bmRTdHJ1Y3R1cmU6IERlbGV0ZSBhIEZ1bmQgU3RydWN0dXJlLlxuICAgICAqIERlbGV0ZSBhIEZ1bmQgU3RydWN0dXJlIGZyb20gdGhlIGdpdmVuIGVmZmVjdGl2ZSBkYXRldGltZS4gSXQgcmVtYWlucyByZXRyaWV2YWJsZSBhdCBlYXJsaWVyIGVmZmVjdGl2ZSBkYXRldGltZXMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPERlbGV0ZWRFbnRpdHlSZXNwb25zZT47XG4gICAgcHVibGljIGRlbGV0ZUZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RGVsZXRlZEVudGl0eVJlc3BvbnNlPj47XG4gICAgcHVibGljIGRlbGV0ZUZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBkZWxldGVGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlRnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRlbGV0ZUZ1bmRTdHJ1Y3R1cmUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVGdW5kU3RydWN0dXJlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmVmZmVjdGl2ZUF0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGVmZmVjdGl2ZUF0ICE9PSB1bmRlZmluZWQgJiYgZWZmZWN0aXZlQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5lZmZlY3RpdmVBdCwgJ2VmZmVjdGl2ZUF0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4oJ2RlbGV0ZScsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIEdldEZ1bmRTdHJ1Y3R1cmU6IEdldCBhIEZ1bmQgU3RydWN0dXJlLlxuICAgICAqIFJldHJpZXZlIHRoZSBkZWZpbml0aW9uIG9mIGEgcGFydGljdWxhciBGdW5kIFN0cnVjdHVyZSBhdCBhbiBlZmZlY3RpdmUgYW5kIGFzQXQgZGF0ZXRpbWUsIGluY2x1ZGluZyBpdHMgbm9kZXMsICBlZGdlcywgYWxsb2NhdGlvbiBncm91cHMgYW5kIHRoZSBmdW5kcyBpdHMgbm9kZXMgcmVmZXIgdG8uXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldEZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEZ1bmRTdHJ1Y3R1cmU+O1xuICAgIHB1YmxpYyBnZXRGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0RnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEZ1bmRTdHJ1Y3R1cmU+PjtcbiAgICBwdWJsaWMgZ2V0RnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IEdldEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RnVuZFN0cnVjdHVyZT4+O1xuICAgIHB1YmxpYyBnZXRGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0RnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZ1bmRTdHJ1Y3R1cmUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGdW5kU3RydWN0dXJlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmVmZmVjdGl2ZUF0O1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5S2V5cyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wcm9wZXJ0eUtleXM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZWZmZWN0aXZlQXQgIT09IHVuZGVmaW5lZCAmJiBlZmZlY3RpdmVBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmVmZmVjdGl2ZUF0LCAnZWZmZWN0aXZlQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0eUtleXMpIHtcbiAgICAgICAgICAgIHByb3BlcnR5S2V5cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3Byb3BlcnR5S2V5cycpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2Z1bmRzdHJ1Y3R1cmVzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RnVuZFN0cnVjdHVyZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIExpc3RGdW5kU3RydWN0dXJlczogTGlzdCBGdW5kIFN0cnVjdHVyZXMuXG4gICAgICogTGlzdCBhbGwgdGhlIEZ1bmQgU3RydWN0dXJlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gY3JpdGVyaWEuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGxpc3RGdW5kU3RydWN0dXJlcyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RGdW5kU3RydWN0dXJlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxQYWdlZFJlc291cmNlTGlzdE9mRnVuZFN0cnVjdHVyZT47XG4gICAgcHVibGljIGxpc3RGdW5kU3RydWN0dXJlcyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RGdW5kU3RydWN0dXJlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZGdW5kU3RydWN0dXJlPj47XG4gICAgcHVibGljIGxpc3RGdW5kU3RydWN0dXJlcyhyZXF1ZXN0UGFyYW1ldGVycz86IExpc3RGdW5kU3RydWN0dXJlc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYWdlZFJlc291cmNlTGlzdE9mRnVuZFN0cnVjdHVyZT4+O1xuICAgIHB1YmxpYyBsaXN0RnVuZFN0cnVjdHVyZXMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0RnVuZFN0cnVjdHVyZXNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmVmZmVjdGl2ZUF0O1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5S2V5cyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wcm9wZXJ0eUtleXM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZWZmZWN0aXZlQXQgIT09IHVuZGVmaW5lZCAmJiBlZmZlY3RpdmVBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmVmZmVjdGl2ZUF0LCAnZWZmZWN0aXZlQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlLZXlzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICA8YW55PmVsZW1lbnQsICdwcm9wZXJ0eUtleXMnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdlZFJlc291cmNlTGlzdE9mRnVuZFN0cnVjdHVyZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIFJlbW92ZUZ1bmRTdHJ1Y3R1cmVNZW1iZXI6IFJlbW92ZSBhIG1lbWJlciBmcm9tIGEgRnVuZCBTdHJ1Y3R1cmUuXG4gICAgICogUmVtb3ZlIGEgbm9kZSBhbmQgZXZlcnkgbGluayB0aGF0IHRvdWNoZXMgaXQsIGZyb20gYW4gZWZmZWN0aXZlIGRhdGV0aW1lLiBUaGUgcmVzdWx0IGlzIGEgbmV3IGJpdGVtcG9yYWwgIHZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZS4gVGhlIGNoYW5nZSBhcHBsaWVzIHRvIHRoZSB2ZXJzaW9uIGluIGZvcmNlIGF0IHRoYXQgZGF0ZXRpbWU7IGlmIGEgbGF0ZXIgdmVyc2lvbiAgb2YgdGhlIHN0cnVjdHVyZSBhbHJlYWR5IGV4aXN0cyB0aGUgcmVxdWVzdCBpcyByZWplY3RlZCwgc2luY2UgdGhlIG1lbWJlciB3b3VsZCBvdGhlcndpc2UgcmVhcHBlYXIgd2hlbiAgdGhhdCB2ZXJzaW9uIGJlZ2lucy4gVXBzZXJ0IHRoZSBmdWxsIGRlZmluaXRpb24gZm9yIGVhY2ggYWZmZWN0ZWQgdmVyc2lvbiBpbiB0aGF0IGNhc2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZ1bmRTdHJ1Y3R1cmVNZW1iZXIocmVxdWVzdFBhcmFtZXRlcnM/OiBSZW1vdmVGdW5kU3RydWN0dXJlTWVtYmVyUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEZ1bmRTdHJ1Y3R1cmU+O1xuICAgIHB1YmxpYyByZW1vdmVGdW5kU3RydWN0dXJlTWVtYmVyKHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVtb3ZlRnVuZFN0cnVjdHVyZU1lbWJlclJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEZ1bmRTdHJ1Y3R1cmU+PjtcbiAgICBwdWJsaWMgcmVtb3ZlRnVuZFN0cnVjdHVyZU1lbWJlcihyZXF1ZXN0UGFyYW1ldGVycz86IFJlbW92ZUZ1bmRTdHJ1Y3R1cmVNZW1iZXJSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RnVuZFN0cnVjdHVyZT4+O1xuICAgIHB1YmxpYyByZW1vdmVGdW5kU3RydWN0dXJlTWVtYmVyKHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVtb3ZlRnVuZFN0cnVjdHVyZU1lbWJlclJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJlbW92ZUZ1bmRTdHJ1Y3R1cmVNZW1iZXIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZW1vdmVGdW5kU3RydWN0dXJlTWVtYmVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGVDb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm5vZGVDb2RlO1xuICAgICAgICBpZiAobm9kZUNvZGUgPT09IG51bGwgfHwgbm9kZUNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbm9kZUNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZW1vdmVGdW5kU3RydWN0dXJlTWVtYmVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmVmZmVjdGl2ZUF0O1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGVmZmVjdGl2ZUF0ICE9PSB1bmRlZmluZWQgJiYgZWZmZWN0aXZlQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5lZmZlY3RpdmVBdCwgJ2VmZmVjdGl2ZUF0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L21lbWJlcnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwibm9kZUNvZGVcIiwgdmFsdWU6IG5vZGVDb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxGdW5kU3RydWN0dXJlPignZGVsZXRlJywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VYUEVSSU1FTlRBTF0gVXBzZXJ0RnVuZFN0cnVjdHVyZTogVXBzZXJ0IGEgRnVuZCBTdHJ1Y3R1cmUuXG4gICAgICogQ3JlYXRlIG9yIHJlcGxhY2UgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiBhIEZ1bmQgU3RydWN0dXJlIGZyb20gYW4gZWZmZWN0aXZlIGRhdGV0aW1lLiBBIGNoYW5nZSB0byB0aGUgIGRlZmluaXRpb24gYmVjb21lcyBhIG5ldyBiaXRlbXBvcmFsIHZlcnNpb246IHRoZSBzdHJ1Y3R1cmUgYXMgaXQgd2FzIGRlY2xhcmVkIGF0IGVhcmxpZXIgZWZmZWN0aXZlIGRhdGV0aW1lcywgIGFuZCBhcyBvZiBlYXJsaWVyIGFzQXQgZGF0ZXRpbWVzLCByZW1haW5zIHJldHJpZXZhYmxlLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cHNlcnRGdW5kU3RydWN0dXJlKHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBzZXJ0RnVuZFN0cnVjdHVyZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxGdW5kU3RydWN0dXJlPjtcbiAgICBwdWJsaWMgdXBzZXJ0RnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxGdW5kU3RydWN0dXJlPj47XG4gICAgcHVibGljIHVwc2VydEZ1bmRTdHJ1Y3R1cmUocmVxdWVzdFBhcmFtZXRlcnM/OiBVcHNlcnRGdW5kU3RydWN0dXJlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEZ1bmRTdHJ1Y3R1cmU+PjtcbiAgICBwdWJsaWMgdXBzZXJ0RnVuZFN0cnVjdHVyZShyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydEZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cHNlcnRGdW5kU3RydWN0dXJlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBzZXJ0RnVuZFN0cnVjdHVyZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdW5kU3RydWN0dXJlUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5mdW5kU3RydWN0dXJlUmVxdWVzdDtcbiAgICAgICAgaWYgKGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0ID09PSBudWxsIHx8IGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBzZXJ0RnVuZFN0cnVjdHVyZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9mdW5kc3RydWN0dXJlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImNvZGVcIiwgdmFsdWU6IGNvZGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEZ1bmRTdHJ1Y3R1cmU+KCdwdXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGZ1bmRTdHJ1Y3R1cmVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=