@pega/angular-sdk-components 0.242.12 → 0.242.13

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.
@@ -232,6 +232,22 @@ export class AngularPConnectService {
232
232
  if (inComp.pConn$?.removeFormField) {
233
233
  inComp.pConn$?.removeFormField();
234
234
  }
235
+ const contextName = inComp.pConn$.getContextName();
236
+ const pageReference = inComp.pConn$.getPageReference();
237
+ const rawConfig = inComp.pConn$._rawConfig;
238
+ const index = inComp.pConn$.index;
239
+ if (Object.hasOwn(rawConfig?.config ?? {}, 'value') && inComp.pConn$._type !== 'Address') {
240
+ PCore.getContextTreeManager().removeFieldNode(contextName, pageReference, inComp.pConn$.viewName || '', inComp.pConn$._getPropertyName(), index);
241
+ }
242
+ else if (inComp.pConn$._type === 'Address' && rawConfig?.config?.associatedView) {
243
+ // remove address node and its children
244
+ PCore.getContextTreeManager().removeViewNode(contextName, pageReference, rawConfig.config.associatedView, index);
245
+ }
246
+ else {
247
+ // remove view node and its children
248
+ const pageRef = rawConfig?.config?.context ? `${pageReference}${rawConfig?.config.context}` : pageReference;
249
+ PCore.getContextTreeManager().removeViewNode(contextName, pageRef, rawConfig?.config?.name || rawConfig?.config?.id || '', index);
250
+ }
235
251
  }
236
252
  // Returns true if the component's entry in ___componentPropsArr___ is
237
253
  // the same as the inCompProps passed in.
@@ -425,4 +441,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
425
441
  providedIn: 'root'
426
442
  }]
427
443
  }], ctorParameters: () => [{ type: i1.ProgressSpinnerService }, { type: i2.ErrorMessagesService }, { type: i3.Utils }] });
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1wY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFlMUMsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakMsNENBQTRDO2FBQzdCLGFBQVEsR0FBRyxLQUFLLEFBQVIsQ0FBUztJQUVoQyxZQUNVLFNBQWlDLEVBQ2pDLFNBQStCLEVBQy9CLEtBQVk7UUFGWixjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBeEJ0Qjs7V0FFRztRQUNLLGFBQVEsR0FBUSxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDSyx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFFL0I7Ozs7O1dBS0c7UUFDSyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFVdkMseURBQXlEO1FBQ3pELDREQUE0RDtRQUM1RCxvREFBb0Q7UUFDcEQsa0RBQWtEO1FBQ2xELCtDQUErQztRQUMvQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsNkRBQTZEO1FBQzdELCtCQUErQjtRQUMvQiwrREFBK0Q7UUFDL0QsV0FBVztRQUNYLGtFQUFrRTtRQUNsRSxJQUFJO0lBQ04sQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsQ0FBQztRQUM3QixrRUFBa0U7UUFDbEUsNERBQTREO1FBQzVELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssZ0JBQWdCLENBQUMsU0FBYyxJQUFJLEVBQUUsYUFBOEIsSUFBSTtRQUM3RSwrRkFBK0Y7UUFDL0YsSUFBSSxhQUFhLENBQUM7UUFDbEIsdURBQXVEO1FBQ3ZELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FBQyxTQUFjLElBQUk7UUFDMUMsSUFBSSxTQUFTLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLGlFQUFpRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCx1SEFBdUg7UUFDdkgsZ0hBQWdIO1FBQ2hILHNGQUFzRjtRQUN0RixJQUFJO1FBRUosSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pDLElBQUksT0FBTyxNQUFNLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLGVBQWUsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RixRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUVELFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTNDLGlEQUFpRDtRQUVqRCw4SEFBOEg7UUFDOUgsMkZBQTJGO1FBQzNGLGtGQUFrRjtRQUNsRixNQUFNLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhELElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxlQUFlLElBQUksRUFBRSxFQUFFLENBQUM7WUFDNUYsd0lBQXdJO1FBQzFJLENBQUM7UUFFRCxPQUFPO1lBQ0wsR0FBRyxTQUFTO1lBQ1osR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLE1BQU07UUFDMUIsT0FBTyxNQUFNLENBQUMsaUJBQWlCLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxnQkFBZ0IsQ0FBQyxTQUFjLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUNyRCxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLGdFQUFnRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBRWpELDRHQUE0RztRQUM1RyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx1QkFBdUIsQ0FBQyxTQUFjLElBQUk7UUFDL0MsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1RUFBdUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCw2QkFBNkIsQ0FBQyxNQUFNLEVBQUUsYUFBOEIsSUFBSTtRQUN0RSwyQ0FBMkM7UUFDM0MsTUFBTSxZQUFZLEdBQXdCO1lBQ3hDLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLFNBQVM7WUFDeEIsZUFBZSxFQUFFLEVBQUU7WUFDbkIsT0FBTyxFQUFFLFNBQVM7U0FDbkIsQ0FBQztRQUVGLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsTUFBTSxnQkFBZ0IsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNoSCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFFekMsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLEtBQUssQ0FBQywwREFBMEQsUUFBUSxzREFBc0QsQ0FBQyxDQUFDO1lBQ3hJLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsaUJBQWlCLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZGLE9BQU8sQ0FBQyxLQUFLLENBQ1gsMERBQTBELFFBQVEsZ0VBQWdFLENBQ25JLENBQUM7WUFDRixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLGdCQUFnQixJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUNYLDBEQUEwRCxRQUFRLCtEQUErRCxDQUNsSSxDQUFDO1lBQ0YsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxlQUFlLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELFFBQVEsOERBQThELENBQUMsQ0FBQztZQUNoSixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQscUZBQXFGO1FBQ3JGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsbUVBQW1FO1FBQ25FLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLDJDQUEyQztRQUMzQyxNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBb0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU1RSxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sWUFBWSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDaEMsWUFBWSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLFFBQVEsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxDQUFDO1FBQ0osQ0FBQztRQUVELDREQUE0RDtRQUM1RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUIsK0NBQStDO1FBQy9DLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTTtRQUNqQixNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBTTtRQUNwQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSwwQ0FBMEM7SUFDMUMsdUVBQXVFO0lBQ3ZFLHNFQUFzRTtJQUN0RSxxRkFBcUY7SUFDckYsb0ZBQW9GO0lBQ3BGLDBHQUEwRztJQUMxRyw0R0FBNEc7SUFDNUcsK0JBQStCO0lBQy9COzs7Ozs7Ozs7Ozs7T0FZRztJQUNILHFCQUFxQixDQUFDLE1BQU07UUFDMUIsOEJBQThCO1FBQzlCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNqQiw2QkFBNkI7UUFDN0IsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQywrREFBK0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkcsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLGVBQWUsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDckYsT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDRDQUE0QyxDQUFDLENBQUM7UUFDNUksQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsTUFBTSxZQUFZLEdBQVEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELE1BQU0saUJBQWlCLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUvRCxNQUFNLGFBQWEsR0FBUSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUQsNEZBQTRGO1FBQzVGLHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUNyRSxPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUNyRSxhQUFhLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsTUFBTSxrQkFBa0IsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpFLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksa0JBQWtCLENBQUM7UUFFakcsaUpBQWlKO1FBQ2pKLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQy9DLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoSSx1RkFBdUY7UUFDdkYsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFFN0QsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsZUFBZSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNyRCwrQ0FBK0M7Z0JBQy9DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFbEMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLGFBQWEsR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDL0YsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNqRixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDM0MsQ0FBQztRQUVELElBQUksSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHFIQUFxSDtRQUNySCxzREFBc0Q7UUFFdEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULDhEQUE4RDtZQUM5RCxzREFBc0Q7WUFDdEQsd0RBQXdEO1lBQ3hELCtHQUErRztZQUMvRyxzSUFBc0k7WUFDdEksNEVBQTRFO1FBQzlFLENBQUM7UUFDRCwyR0FBMkc7UUFDM0csOEJBQThCO1FBQzlCLHdEQUF3RDtRQUN4RCwwREFBMEQ7UUFDMUQsaUhBQWlIO1FBRWpILElBQUk7UUFFSiwyRkFBMkY7UUFFM0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsYUFBYTtRQUMvQixPQUFPLGFBQWEsQ0FBQyxZQUFZLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsZ0RBQWdEO1FBQ2xELENBQUM7UUFDRCw2QkFBNkI7UUFDN0IsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixPQUFPO1FBQ1QsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFMUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUs7UUFDeEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYiwrQ0FBK0M7UUFDakQsQ0FBQztRQUNELDZCQUE2QjtRQUM3QixJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0RBQXNELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLE9BQU87UUFDVCxDQUFDO1FBRUQsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLFVBQW1CLEtBQUssRUFBRSxTQUFjLElBQUk7UUFDbkQsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLFdBQVcsR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELDREQUE0RDtJQUM1RDs7O09BR0c7SUFDSyxjQUFjLENBQUMsTUFBTTtRQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0RBQXdELFFBQVEsb0JBQW9CLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM3SCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDOytHQTlkVSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZyQixNQUFNOzs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vX21lc3NhZ2VzL3Byb2dyZXNzLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2VzU2VydmljZSB9IGZyb20gJy4uL19tZXNzYWdlcy9lcnJvci1tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vX2hlbHBlcnMvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJQQ29ubmVjdERhdGEge1xuICBjb21wSUQ/OiBzdHJpbmc7XG4gIHVuc3Vic2NyaWJlRm4/OiBGdW5jdGlvbjtcbiAgdmFsaWRhdGVNZXNzYWdlPzogc3RyaW5nO1xuICBhY3Rpb25zPzoge1xuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbjtcbiAgICBvbkJsdXI6IEZ1bmN0aW9uO1xuICB9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIExvY2FsIHZhcmlhYmxlIGZvciBhY2Nlc3MgdG8gdGhlIHN0b3JlIG9uY2UgdGhlIHNlcnZpY2UgaXMgY29ubmVjdGVkIHRvIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSB0aGVTdG9yZTogYW55ID0gbnVsbDtcblxuICAvKipcbiAgICogTG9jYWwgdmFyaWFibGUgdXNlZCB0byBjb21wdXRlIHRoZSBuZXh0IGNvbXBvbmVudElEXG4gICAqL1xuICBwcml2YXRlIGNvdW50ZXJDb21wb25lbnRJRCA9IDA7XG5cbiAgLyoqXG4gICAqIExvY2FsIGFycmF5IHVzZWQgdG8gc3RvcmUgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGNvbXBvbmVudCB0byBpdHMgbW9zdCByZWNlbnQgXCJwcm9wc1wiXG4gICAqICB3aGVyZSBcInByb3BzXCIgaXMgdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBjb21wb25lbnQncyBnZXRDb25maWdQcm9wcyBhbG9uZyB3aXRoXG4gICAqIGFueXRoaW5nIGFkZGVkIGJ5IHBvcHVsYXRlQWRkaXRpb25hbFByb3BzLlxuICAgKiBFYWNoIGVudHJ5IGlzOiB7IF9fY29tcG9uZW50SURfXzogX3RoZSBjb21wb25lbnQncyBtb3N0IHJlY2VudCBwcm9wc18gfVxuICAgKi9cbiAgcHJpdmF0ZSBjb21wb25lbnRQcm9wc0FycjogT2JqZWN0W10gPSBbXTtcblxuICAvKiBVc2VkIHRvIHRvZ2dsZSBzb21lIGNsYXNzLXdpZGUgbG9nZ2luZyAqL1xuICBwcml2YXRlIHN0YXRpYyBiTG9nZ2luZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcHNTZXJ2aWNlOiBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJTZXJ2aWNlOiBFcnJvck1lc3NhZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1xuICApIHtcbiAgICAvLyBFc3RhYmxpc2ggbmVjZXNzYXJ5IG92ZXJyaWRlIGZsYWdzIGZvciBvdXIgdXNlIG9mIENvcmVcbiAgICAvLyBjb25zdCBjb3JlT3ZlcnJpZGVzID0geyBcImR5bmFtaWNMb2FkQ29tcG9uZW50c1wiOiBmYWxzZSB9O1xuICAgIC8vIGxldCBjb3JlT3ZlcnJpZGVzID0gUENvcmUuZ2V0QmVoYXZpb3JPdmVycmlkZXMoKTtcbiAgICAvLyBjb3JlT3ZlcnJpZGVzW1wiZHluYW1pY0xvYWRDb21wb25lbnRzXCJdID0gZmFsc2U7XG4gICAgLy8gUENvcmUuc2V0QmVoYXZpb3JPdmVycmlkZXMoIGNvcmVPdmVycmlkZXMgKTtcbiAgICBQQ29yZS5zZXRCZWhhdmlvck92ZXJyaWRlKCdkeW5hbWljTG9hZENvbXBvbmVudHMnLCBmYWxzZSk7XG5cbiAgICAvLyBBbHdheXMgYmVzdCB0byB1c2UgZGVlcCBvYmplY3QgY29tcGFyZSB3aGVuIGl0J3MgYXZhaWxhYmxlXG4gICAgLy8gaWYgKGlzRXF1YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBBbmd1bGFyUENvbm5lY3QgaXMgdXNpbmcgZGVlcCBvYmplY3QgY29tcGFyZWApO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gY29uc29sZS5sb2coYEFuZ3VsYXJQQ29ubmVjdCBpcyB1c2luZyBKU09OLnN0cmluZ2lmeSBjb21wYXJlYCk7XG4gICAgLy8gfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB1bmlxdWUgKGZvciB0aGlzIHNlc3Npb24pIENvbXBvbmVudElEIHRoYXQgc2hvdWxkXG4gICAqIGJlIHVzZWQgZm9yIHRoYXQgY29tcG9uZW50IHRvIHVwZGF0ZSBpdHMgbW9zdCByZWNlbnQgcHJvcHNcbiAgICogKHdoaWNoIGNhbiBhbHNvIGJlIGNvbXBhcmVkIGFnYWluc3QgaXRzIHByZXZpb3VzIHZhbHVlXG4gICAqIGJlZm9yZSB1cGRhdGluZykuIE5vdGUgdGhhdCB0aGlzIHJldHVybnMgYSBzdHJpbmcgc28gd2UgY2FuIHVzZVxuICAgKiBpdCBhcyBhIGtleSBpbiBhbiBhc3NvY2lhdGl2ZSBhcnJheVxuICAgKiBAcmV0dXJucyB0aGUgbmV4dCBjb21wb25lbnRJRFxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXh0Q29tcG9uZW50SWQoKTogc3RyaW5nIHtcbiAgICB0aGlzLmNvdW50ZXJDb21wb25lbnRJRCArPSAxO1xuICAgIC8vIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSBudW1iZXIgc28gd2UgaGF2ZSBhblxuICAgIC8vICBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IHdlIGNhbiBjbGVhbiB1cCBsYXRlciwgaWYgbmVlZGVkLlxuICAgIHJldHVybiB0aGlzLmNvdW50ZXJDb21wb25lbnRJRC50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDYWxsaW5nIG9iamVjdCAoaW5Db21wKSBzdWJzY3JpYmVzIHRvIHN0b3JlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCB0aGF0J3Mgc3Vic2NyaWJpbmcgdG8gdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBpbkNhbGxiYWNrIFRoZSBjb21wb25lbnQncyBjYWxsYmFjayBmdW5jdGlvbiAodHlwaWNhbGx5IGNhbGxlZCBvblN0YXRlQ2hhbmdlKSB0aGF0IHdpbGxcbiAgICogYmUgY2FsbGVkIHdoZW4gdGhlIHN0b3JlIGNoYW5nZXMuXG4gICAqIEByZXR1cm5zIFRoZSAqKnVuc3Vic2NyaWJlKiogZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBuZWVkc1xuICAgKiB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBzdG9yZS4gKFR5cGljYWxseSBkdXJpbmcgbmdPbkRlc3Ryb3kpXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvU3RvcmUoaW5Db21wOiBhbnkgPSBudWxsLCBpbkNhbGxiYWNrOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsKTogRnVuY3Rpb24ge1xuICAgIC8vIGNvbnN0IHRoZUNvbXBOYW1lOiBzdHJpbmcgPSBpbkNvbXAgPyBgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX1gIDogJ25vIGNvbXBvbmVudCBwcm92aWRlZCc7XG4gICAgbGV0IGZuVW5zdWJzY3JpYmU7XG4gICAgLy8gY29uc29sZS5sb2coIGBCcmlkZ2Ugc3Vic2NyaWJpbmc6ICR7dGhlQ29tcE5hbWV9IGApO1xuICAgIGlmIChpbkNvbXApIHtcbiAgICAgIGZuVW5zdWJzY3JpYmUgPSB0aGlzLmdldFN0b3JlKCkuc3Vic2NyaWJlKGluQ2FsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gZm5VbnN1YnNjcmliZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDb21wb25lbnQncyBwcm9wZXJ0aWVzIHRoYXQgYXJlIHVzZWQgKGEpIHRvIHBvcHVsYXRlIGNvbXBvbmVudFByb3BzQXJyXG4gIC8vICBhbmQgKGIpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHdob3NlIHByb3BlcnRpZXMgYXJlIGJlaW5nIG9idGFpbmVkXG4gICAqL1xuICBwcml2YXRlIGdldENvbXBvbmVudFByb3BzKGluQ29tcDogYW55ID0gbnVsbCk6IE9iamVjdCB7XG4gICAgbGV0IGNvbXBQcm9wczogYW55ID0ge307XG4gICAgbGV0IGFkZFByb3BzID0ge307XG5cbiAgICBpZiAoaW5Db21wID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGdldENvbXBvbmVudFByb3BzIGNhbGxlZCB3aXRoIGJhZCBjb21wb25lbnQ6ICR7aW5Db21wfWApO1xuICAgIH1cblxuICAgIC8vIGlmICgoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRmxvd0NvbnRhaW5lckNvbXBvbmVudFwiKSB8fCAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVmlld0NvbnRhaW5lckNvbXBvbmVudFwiKVxuICAgIC8vICAgICB8fCAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiVmlld0NvbXBvbmVudFwiKSB8fCAoaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRGVmZXJMb2FkQ29tcG9uZW50XCIpKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhgLS0+IEFuZ3VsYXJQQ29ubmVjdCBnZXRDb21wb25lbnRQcm9wczogJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAvLyB9XG5cbiAgICBpZiAoaW5Db21wLmFkZGl0aW9uYWxQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGluQ29tcC5hZGRpdGlvbmFsUHJvcHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFkZFByb3BzID0gaW5Db21wLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHMoaW5Db21wLmFkZGl0aW9uYWxQcm9wcyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbkNvbXAuYWRkaXRpb25hbFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHByb3BzVG9BZGQgPSBpbkNvbXAuYWRkaXRpb25hbFByb3BzKFBDb3JlLmdldFN0b3JlKCkuZ2V0U3RhdGUoKSwgaW5Db21wLnBDb25uJCk7XG4gICAgICAgIGFkZFByb3BzID0gaW5Db21wLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHMocHJvcHNUb0FkZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcFByb3BzID0gaW5Db21wLnBDb25uJC5nZXRDb25maWdQcm9wcygpO1xuXG4gICAgLy8gY29uc3QgY29tcG9uZW50TmFtZSA9IGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21tZW50IGlzIGZyb20gdGhlIE5lYnVsYS9Db25zdGVsbGF0aW9uIHZlcnNpb24gb2YgdGhpcyBjb2RlLiBNZWFudCBhcyBhIHJlbWluZGVyIHRvIGNoZWNrIHRoaXMgb2NjYXNpb25hbGx5XG4gICAgLy8gcG9wdWxhdGUgYWRkaXRpb25hbCBwcm9wcyB3aGljaCBhcmUgY29tcG9uZW50IHNwZWNpZmljIGFuZCBub3QgcHJlc2VudCBpbiBjb25maWd1cmF0aW9uc1xuICAgIC8vIFRoaXMgYmxvY2sgY2FuIGJlIHJlbW92ZWQgb25jZSBhbGwgdGhlc2UgcHJvcHMgd2lsbCBiZSBhZGRlZCBhcyBwYXJ0IG9mIGNvbmZpZ3NcbiAgICBpbkNvbXAucENvbm4kLnBvcHVsYXRlQWRkaXRpb25hbFByb3BzKGNvbXBQcm9wcyk7XG5cbiAgICBjb21wUHJvcHMgPSBpbkNvbXAucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyhjb21wUHJvcHMpO1xuXG4gICAgaWYgKGNvbXBQcm9wcyAmJiB1bmRlZmluZWQgIT09IGNvbXBQcm9wcy52YWxpZGF0ZW1lc3NhZ2UgJiYgY29tcFByb3BzLnZhbGlkYXRlbWVzc2FnZSAhPSAnJykge1xuICAgICAgLy8gY29uc29sZS5sb2coIGAgICB2YWxpZGF0ZW1lc3NhZ2UgZm9yICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9ICR7aW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuY29tcElEfTogJHtjb21wUHJvcHMudmFsaWRhdGVtZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21wUHJvcHMsXG4gICAgICAuLi5hZGRQcm9wc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5pcXVlIGlkIGZvciBnaXZlbiBjb21wb25lbnQgY3JlYXRlZCB3aGVuIHJlZ2lzdGVyaW5nXG4gICAqIE90aGVyd2lzZSwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHdob3NlIHByb3BlcnR5IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRDb21wb25lbnRJRChpbkNvbXApOiBzdHJpbmcge1xuICAgIHJldHVybiBpbkNvbXAuYnJpZGdlQ29tcG9uZW50SUQgfHwgaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuY29tcElEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHJlcXVlc3RlZCBwcm9wZXJ0eSBmb3IgdGhlIGNvbXBvbmVudCBpZiBpdCBleGlzdHMuXG4gICAqIE90aGVyd2lzZSwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHdob3NlIHByb3BlcnR5IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIGluUHJvcCBUaGUgcHJvcGVydHkgYmVpbmcgcmVxdWVzdGVkLlxuICAgKi9cbiAgcHVibGljIGdldENvbXBvbmVudFByb3AoaW5Db21wOiBhbnkgPSBudWxsLCBpblByb3AgPSAnJykge1xuICAgIGlmIChpbkNvbXAgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogZ2V0Q29tcG9uZW50UHJvcCBjYWxsZWQgd2l0aCBiYWQgY29tcG9uZW50OiAke2luQ29tcH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wSUQgPSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5jb21wSUQ7XG5cbiAgICAvLyBMb29rIHVwIHByb3BlcnR5IGluIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBjb21wb25lbnRQcm9wQXJyYXkgKHdoaWNoIHNob3VsZCBoYXZlIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRQcm9wc0Fycltjb21wSURdW2luUHJvcF07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgY29tcGxldGUgc2V0IG9mIHJlc29sdmVkIHByb3BlcnRpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoXG4gICAqIHRoaXMgY29tcG9uZW50LlxuICAgKiBUaGlzIGlzIHRoZSBmdWxsIHNldCBvZiBwcm9wZXJ0aWVzIHRoYXQgYXJlIHRyYWNrZWQgaW4gUmVkdXggZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRDb21wbGV0ZVByb3BzKGluQ29tcDogYW55ID0gbnVsbCkge1xuICAgIGlmIChpbkNvbXAgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogZ2V0Q3VycmVudENvbXBsZXRlUHJvcHMgY2FsbGVkIHdpdGggYmFkIGNvbXBvbmVudDogJHtpbkNvbXB9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2luQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLmNvbXBJRF07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjYWxsYmFjayBmdW5jdGlvbi4gV2hlbiBhIGNvbXBvbmVudCBjYWxscyB0aGlzIG1ldGhvZFxuICAgKiAodHlwaWNhbGx5IGZyb20gaXRzIG5nT25Jbml0KSwgdGhlIGNvbXBvbmVudCBpcyBnaXZlbiBhIHVuaXF1ZSBjb21wb25lbnRJRCAoZm9yIHRoaXMgc2Vzc2lvbilcbiAgICogYW5kIHN1YnNjcmliZXMgdGhlIGNvbXBvbmVudCB0byB0aGUgc3RvcmUuIEFzIGEgc2lkZSBlZmZlY3QsIGl0IGFsc28gYXNzaWducyB0aGUgY29tcG9uZW50J3NcbiAgICogYWN0aW9ucyAoZnJvbSBpdHMgbWV0YWRhdGEpIHRvIHRoZSBjb21wb25lbnQncyBfX19hY3Rpb25zX19fIGFuZCBiaW5kcyB0aGUgY29tcG9uZW50J3MgY2FsbGJhY2tcbiAgICogKHBhc3NlZCBpbiBhcyBfX19pbkNhbGxiYWNrX19fKSB0byB0aGUgY29tcG9uZW50LiBJZiBhIHByb2JsZW0gaXMgZW5jb3VudGVyZWQsIGFuIGVtcHR5IG9iamVjdCxcbiAgICoge30sIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgYmVpbmcgcmVnaXN0ZXJlZCBhbmQgc3Vic2NyaWJlZFxuICAgKiBAcGFyYW0gaW5DYWxsYmFjayBUaGUgY29tcG9uZW50J3MgY2FsbGJhY2sgZnVuY3Rpb24gKHR5cGljYWxseSBjYWxsZWQgb25TdGF0ZUNoYW5nZSkgdGhhdFxuICAgKiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc3RhdGUgY2hhbmdlcy5cbiAgICogQHJldHVybnMgQSBKU09OIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czpcbiAgICogY29tcElEOiB0aGUgdW5pcXVlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbXBvbmVudCxcbiAgICogdW5zdWJzY3JpYmVGbjogdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgbmVlZHMgdG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgc3RvcmUsXG4gICAqIHZhbGlkYXRlTWVzc2FnZTogYW55IHZhbGlkYXRpb24vZXJyb3IgbWVzc2FnZSB0aGF0IGdldHMgZ2VuZXJhdGVkIGZvciB0aGlzIG9iamVjdCxcbiAgICogYWN0aW9uczogYW55IGFjdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBmb3IgdGhpcyBvYmplY3RcbiAgICovXG4gIHJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KGluQ29tcCwgaW5DYWxsYmFjazogRnVuY3Rpb24gfCBudWxsID0gbnVsbCk6IEFuZ3VsYXJQQ29ubmVjdERhdGEge1xuICAgIC8vIENyZWF0ZSBhbiBpbml0aWFsIG9iamVjdCB0byBiZSByZXR1cm5lZC5cbiAgICBjb25zdCByZXR1cm5PYmplY3Q6IEFuZ3VsYXJQQ29ubmVjdERhdGEgPSB7XG4gICAgICBjb21wSUQ6ICcnLFxuICAgICAgdW5zdWJzY3JpYmVGbjogdW5kZWZpbmVkLFxuICAgICAgdmFsaWRhdGVNZXNzYWdlOiAnJyxcbiAgICAgIGFjdGlvbnM6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICBpZiAoaW5Db21wID09PSBudWxsIHx8IGluQ2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmU6IGluQ29tcDogJHtpbkNvbXB9IGluQ2FsbGJhY2s6ICR7aW5DYWxsYmFja31gKTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcFR5cGUgPSBpbkNvbXAuY29uc3RydWN0b3IubmFtZTtcblxuICAgIGlmIChBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLmJMb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhgcmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQ6ICR7Y29tcFR5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHVuZGVmaW5lZCAhPT0gaW5Db21wLmJyaWRnZUNvbXBvbmVudElEKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBPTEQgU0NIT09MOiAke2NvbXBUeXBlfWApO1xuICAgIH1cblxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5hY3Rpb25zICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmUgZnJvbSAke2NvbXBUeXBlfTogYWN0aW9ucyBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgKTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgfVxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5icmlkZ2VDb21wb25lbnRJRCAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZSBmcm9tICR7Y29tcFR5cGV9OiBicmlkZ2VDb21wb25lbnRJRCBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLnVuc3Vic2NyaWJlU3RvcmUgJiYgdW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmUgZnJvbSAke2NvbXBUeXBlfTogdW5zdWJzY3JpYmVTdG9yZSBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLnZhbGlkYXRlTWVzc2FnZSAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHJlZ2lzdGVyQW5kU3Vic2NyaWJlIGZyb20gJHtjb21wVHlwZX06IHZhbGlkYXRlTWVzc2FnZSBub3QgZGVmaW5lZCBhcyBhIGNsYXNzIHZhcmlhYmxlIGZvciBpbkNvbXBgKTtcbiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG4gICAgfVxuXG4gICAgLy8gY2FsbCBwcm9jZXNzQWN0aW9ucyB0byBwb3B1bGF0ZSBtZXRhZGF0YSB3aXRoIGFjdGlvbnMgYXMgaW4gUENvbm5lY3RIT1IgaW5pdGlhbGl6ZVxuICAgIHRoaXMucHJvY2Vzc0FjdGlvbnMoaW5Db21wKTtcbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAuYWN0aW9ucykge1xuICAgICAgcmV0dXJuT2JqZWN0LmFjdGlvbnMgPSBpbkNvbXAucENvbm4kLmdldEFjdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5Db21wLmFjdGlvbnMgPSBpbkNvbXAucENvbm4kLmdldEFjdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBiaW5kIHRoZSBwcm92aWRlZCBjYWxsYmFjayB0byB0aGUgY29tcG9uZW50IGl0J3MgYXNzb2NpYXRlZCB3aXRoXG4gICAgaW5DYWxsYmFjayA9IGluQ2FsbGJhY2suYmluZChpbkNvbXApO1xuXG4gICAgLy8gTm93IHByb2NlZWQgdG8gcmVnaXN0ZXIgYW5kIHN1YnNjcmliZS4uLlxuICAgIGNvbnN0IHRoZUNvbXBJRDogc3RyaW5nID0gdGhpcy5nZXROZXh0Q29tcG9uZW50SWQoKTtcbiAgICBjb25zdCB0aGVVbnN1YjogRnVuY3Rpb24gfCBudWxsID0gdGhpcy5zdWJzY3JpYmVUb1N0b3JlKGluQ29tcCwgaW5DYWxsYmFjayk7XG5cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgaW5Db21wLmJyaWRnZUNvbXBvbmVudElEID0gdGhlQ29tcElEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5PYmplY3QuY29tcElEID0gdGhlQ29tcElEO1xuICAgICAgcmV0dXJuT2JqZWN0LnVuc3Vic2NyaWJlRm4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlRm9ybUZpZWxkKGluQ29tcCk7XG4gICAgICAgIHRoZVVuc3ViKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGluaXRpYWxpemUgdGhpcyBjb21wb25lbnRzIGVudHJ5IGluIHRoZSBjb21wb25lbnRQcm9wc0FyclxuICAgIHRoaXMuY29tcG9uZW50UHJvcHNBcnJbdGhlQ29tcElEXSA9IHt9O1xuXG4gICAgdGhpcy5hZGRGb3JtRmllbGQoaW5Db21wKTtcblxuICAgIC8vIHJldHVybiBvYmplY3Qgd2l0aCBjb21wSUQgYW5kIHVuc3Vic2NyaWJlLi4uXG4gICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgfVxuXG4gIGFkZEZvcm1GaWVsZChpbkNvbXApIHtcbiAgICBpbkNvbXAucENvbm4kPy5hZGRGb3JtRmllbGQoKTtcbiAgfVxuXG4gIHJlbW92ZUZvcm1GaWVsZChpbkNvbXApIHtcbiAgICBpZiAoaW5Db21wLnBDb25uJD8ucmVtb3ZlRm9ybUZpZWxkKSB7XG4gICAgICBpbkNvbXAucENvbm4kPy5yZW1vdmVGb3JtRmllbGQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIF9fX2NvbXBvbmVudFByb3BzQXJyX19fIGlzXG4gIC8vICB0aGUgc2FtZSBhcyB0aGUgaW5Db21wUHJvcHMgcGFzc2VkIGluLlxuICAvLyAgQXMgYSBzaWRlIGVmZmVjdCwgdXBkYXRlIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBjb21wb25lbnRQcm9wc0FyclxuICAvLyAgTk9URTogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBpbmNvbWluZyBjb21wb25lbnQgaGFzIHRoZSBmb2xsb3dpbmc6XG4gIC8vICAqIGEgYnJpZGdlQ29tcG9uZW50SUQgPHN0cmluZz4gcHJvcGVydHkgLSB1c2VkIGFzIGxvb2t1cCBrZXkgaW4gY29tcG9uZW50UHJvcHNBcnJcbiAgLy8gICogYSBwQ29ubiQgPD8+IHByb3BlcnR5IC0gdXNlZCB0byBhY2Nlc3MgZnVuY3Rpb25zIGFjY2Vzc2VkIGluIGdldENvbXBvbmVudFByb3BzXG4gIC8vIFJldHVybiB0cnVlOiBtZWFucyB0aGUgY29tcG9uZW50IHByb3BzIGFyZSBkaWZmZXJlbnQgYW5kIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgLy8gUmV0dXJuIGZhbHNlOiBtZWFucyB0aGUgY29tcG9uZW50IHByb3BzIGFyZSB0aGUgc2FtZSBhbmQgdGhlIGNvbXBvbmVudCBkb2Vzbid0IG5lZWQgdG8gdXBkYXRlIChyZS1yZW5kZXIpXG4gIC8vICBPbiBiYWQgaW5wdXQsIHJldHVybiBmYWxzZTtcbiAgLyoqXG4gICAqIFJldHVybnMgKip0cnVlKiogaWYgdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIF9fX2NvbXBvbmVudFByb3BzQXJyX19fIGlzXG4gICAqIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGN1cnJlbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnQgKF9fX2luQ29tcF9fXykgcGFzc2VkIGluLlxuICAgKiBBcyBhIHNpZGUgZWZmZWN0LCB0aGUgY29tcG9uZW50J3MgZW50cnkgaW4gX19fY29tcG9uZW50UHJvcHNBcnJfX18gaXMgdXBkYXRlZC5cbiAgICogKipOb3RlKio6IEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyB0aGUgZm9sbG93aW5nOlxuICAgKiAoYSkgYSBicmlkZ2VDb21wb25lbnRJRCBfc3RyaW5nXyBwcm9wZXJ0eSB1c2VkIGFzIGxvb2t1cCBrZXkgaW4gX19fY29tcG9uZW50UHJvcHNBcnJfX19cbiAgICogYW5kIChiKSBhIF9fX3BDb25uJF9fXyBwcm9wZXJ0eSB1c2VkIHRvIGFjY2VzcyBmdW5jdGlvbnMgY2FsbGVkIGluIF9fX2dldENvbXBvbmVudFByb3BzX19fXG4gICAqXG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCBhc2tpbmcgaWYgaXQgc2hvdWxkIHVwZGF0ZSBpdHNlbGZcbiAgICogQHJldHVybnMgUmV0dXJuICoqdHJ1ZSoqOiBtZWFucyB0aGUgY29tcG9uZW50IHByb3BzIGFyZSBkaWZmZXJlbnQgYW5kIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcikuXG4gICAqIFJldHVybiAqKmZhbHNlKio6IG1lYW5zIHRoZSBjb21wb25lbnQgcHJvcHMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgY29tcG9uZW50IGRvZXNuJ3QgbmVlZCB0byB1cGRhdGUgKHJlLXJlbmRlcikuXG4gICAqIElmIHRoZSAqKippbkNvbXAqKiogaW5wdXQgaXMgYmFkLCBmYWxzZSBpcyBhbHNvIHJldHVybmVkLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKGluQ29tcCk6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnN0IGJTaG93TG9nZ2luZyA9IGZhbHNlO1xuICAgIGxldCBiUmV0ID0gZmFsc2U7XG4gICAgLy8gY2hlY2sgZm9yIHJlYXNvbmFibGUgaW5wdXRcbiAgICBpZiAoVXRpbHMuaXNFbXB0eU9iamVjdChpbkNvbXApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHNob3VsZENvbXBvbmVudFVwZGF0ZTogaW5Db21wOiAke0pTT04uc3RyaW5naWZ5KGluQ29tcCl9YCk7XG4gICAgICByZXR1cm4gYlJldDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLnZhbGlkYXRlTWVzc2FnZSAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHNob3VsZENvbXBvbmVudFVwZGF0ZTogJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX0gZG9lcyBub3QgaGF2ZSBhIHZhbGlkYXRlTWVzc2FnZSBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wSUQgPSB0aGlzLmdldENvbXBvbmVudElEKGluQ29tcCk7XG5cbiAgICBjb25zdCBjdXJyZW50UHJvcHM6IGFueSA9IHRoaXMuY29tcG9uZW50UHJvcHNBcnJbY29tcElEXTtcbiAgICBjb25zdCBjdXJyZW50UHJvcHNBc1N0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFByb3BzKTtcblxuICAgIGNvbnN0IGluY29taW5nUHJvcHM6IGFueSA9IHRoaXMuZ2V0Q29tcG9uZW50UHJvcHMoaW5Db21wKTtcblxuICAgIC8vIGlmIGhhdmUgcGFnZU1lc3NhZ2VzLCBhbmQgaXQgaXMgYmxhbmssIHJlbW92ZSBpdC4gIFRoaXMgY2F1c2VzIGlzc3VlcyBvZiBtYWtpbmcgaXQgYXBwZWFyXG4gICAgLy8gdGhhdCBhIHdpbGwgY2F1c2UgYW4gdXBkYXRlLCB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZVxuICAgIGlmICh0aGlzLmlzUGFnZU1lc3NhZ2VzRW1wdHkoaW5jb21pbmdQcm9wcykpIHtcbiAgICAgIGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLnBhZ2VNZXNzYWdlcyA9IGluY29taW5nUHJvcHMucGFnZU1lc3NhZ2VzO1xuICAgICAgZGVsZXRlIGluY29taW5nUHJvcHMucGFnZU1lc3NhZ2VzO1xuICAgIH1cblxuICAgIGlmIChpbmNvbWluZ1Byb3BzLmh0dHBNZXNzYWdlcykge1xuICAgICAgaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuaHR0cE1lc3NhZ2VzID0gaW5jb21pbmdQcm9wcy5odHRwTWVzc2FnZXM7XG4gICAgICBpbmNvbWluZ1Byb3BzLmh0dHBNZXNzYWdlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmNvbWluZ1Byb3BzQXNTdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGluY29taW5nUHJvcHMpO1xuXG4gICAgYlJldCA9IGlzRXF1YWwgPyAhaXNFcXVhbChjdXJyZW50UHJvcHMsIGluY29taW5nUHJvcHMpIDogY3VycmVudFByb3BzQXNTdHIgIT0gaW5jb21pbmdQcm9wc0FzU3RyO1xuXG4gICAgLy8gQmVsb3cgcGllY2Ugb2YgY29kZSBpcyBuZWVkZWQgdG8gcmUtcmVuZGVyIHRoZSBjb21wb25lbnQgc2luY2Ugd2Ugd2FubmEgZXZhbHVhdGUgdGhlIFZpc2liaWxpdHkgZXhwcmVzc2lvbiB3aXRoaW4gVmlldyBjb21wb25lbnQgaW4gc3VjaCBjYXNlc1xuICAgIGlmIChpbkNvbXAucENvbm4kLm1ldGEuY29uZmlnLmNvbnRleHQ/Lmxlbmd0aCA+IDAgJiYgaW5Db21wLnBDb25uJC5nZXRQYWdlUmVmZXJlbmNlKCkubGVuZ3RoID4gJ2Nhc2VJbmZvLmNvbnRlbnQnLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gTm93IHVwZGF0ZSB0aGUgZW50cnkgaW4gY29tcG9uZW50UHJvcHNBcnIgd2l0aCB0aGUgaW5jb21pbmcgdmFsdWUgc29cbiAgICAvLyAgd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG5leHQgdGltZS4uLlxuICAgIHRoaXMuY29tcG9uZW50UHJvcHNBcnJbY29tcElEXSA9IGluY29taW5nUHJvcHM7XG4gICAgY29uc3QgdmFsaWRhdGVtZXNzYWdlID0gaW5jb21pbmdQcm9wcy52YWxpZGF0ZW1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcy51dGlscy5odG1sRGVjb2RlKGluY29taW5nUHJvcHMudmFsaWRhdGVtZXNzYWdlKTtcbiAgICAvLyBhbmQgdXBkYXRlIHRoZSBjb21wb25lbnQncyB2YWxpZGF0aW9uIG1lc3NhZ2UgKGlmIHVuZGVmaW5lZCwgaXQgc2hvdWxkIGJlIHNldCB0byBcIlwiKVxuICAgIGlmICh1bmRlZmluZWQgIT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UgPSB2YWxpZGF0ZW1lc3NhZ2U7XG5cbiAgICAgIGlmIChpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UgIT0gJycpIHtcbiAgICAgICAgLy8gaWYgaGF2ZSBhIHZhbGlkYXRlIG1lc3NhZ2UsIHR1cm4gb2ZmIHNwaW5uZXJcbiAgICAgICAgY29uc3QgdGltZXIgPSBpbnRlcnZhbCgxMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuXG4gICAgICAgICAgdGltZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHNFcnJvck1lc3NhZ2UgPSBjdXJyZW50UHJvcHMgJiYgY3VycmVudFByb3BzLmxhYmVsID8gY3VycmVudFByb3BzLmxhYmVsLmNvbmNhdCgnIC0gJykgOiAnJztcbiAgICAgICAgc0Vycm9yTWVzc2FnZSA9IHNFcnJvck1lc3NhZ2UuY29uY2F0KGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLnZhbGlkYXRlTWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZXJTZXJ2aWNlLnNlbmRNZXNzYWdlKCd1cGRhdGUnLCBzRXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5Db21wLnZhbGlkYXRlTWVzc2FnZSA9IHZhbGlkYXRlbWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAoYlJldCAmJiBjb21wSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYlJldCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCBgQW5ndWxhclBDb25uZWN0IGNvbXBvbmVudCAke2NvbXBJRH0gLSAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfSAtIHNob3VsZENvbXBvbmVudFVwZGF0ZTogJHtiUmV0fWApO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY3VycmVudCBwcm9wczogXCIgKyBjdXJyZW50UHJvcHNBc1N0cik7XG5cbiAgICBpZiAoYlJldCkge1xuICAgICAgLy8gY29uc29sZS5sb2coYCoqKiogY2hhbmdlIGZvcjogJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiY3VycmVudCBwcm9wczogXCIgKyBjdXJyZW50UHJvcHNBc1N0cik7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcImluY29taW5nIHByb3BzOiBcIiArIGluY29taW5nUHJvcHNBc1N0cik7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgICAgICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9OiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuaW5nOiAke2JSZXR9LCBjb21wSWQ6ICR7Y29tcElEfWAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCBgICAgIFVwZGF0aW5nIHdpdGggY29tcG9uZW50UHJvcHMgZm9yICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9OiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29tcG9uZW50UHJvcHNBcnJbY29tcElEXSl9YCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYCAgICAgICAgICBhbmQgdmFsaWRhdGVNZXNzYWdlOiAke2luQ29tcC52YWxpZGF0ZU1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIC8vIGVsc2UgaWYgKGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lLmluZGV4T2YoXCJWaWV3XCIpID49IDAgfHwgaW5Db21wLmNvbnN0cnVjdG9yLm5hbWUuaW5kZXhPZihcIlJvb3RcIikgPj0gMCkge1xuICAgIC8vICAgY29uc29sZS5sb2coXCJubyBjaGFuZ2VcIik7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcImN1cnJlbnQgcHJvcHM6IFwiICsgY3VycmVudFByb3BzQXNTdHIpO1xuICAgIC8vICAgY29uc29sZS5sb2coXCJpbmNvbWluZyBwcm9wczogXCIgKyBpbmNvbWluZ1Byb3BzQXNTdHIpO1xuICAgIC8vICAgY29uc29sZS5sb2coYCAgICAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmluZzogJHtiUmV0fSwgY29tcElkOiAke2NvbXBJRH1gICk7XG5cbiAgICAvLyB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhgICAgICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9OiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuaW5nOiAke2JSZXR9YCk7XG5cbiAgICByZXR1cm4gYlJldDtcbiAgfVxuXG4gIGlzUGFnZU1lc3NhZ2VzRW1wdHkoaW5jb21pbmdQcm9wcykge1xuICAgIHJldHVybiBpbmNvbWluZ1Byb3BzLnBhZ2VNZXNzYWdlcyAmJiBpbmNvbWluZ1Byb3BzLnBhZ2VNZXNzYWdlcy5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGVuY291bnRlcmVkIGEgY2hhbmdlIGV2ZW50XG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCBjYWxsaW5nIHRoZSBjaGFuZ2UgZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudFxuICAgKi9cbiAgY2hhbmdlSGFuZGxlcihpbkNvbXAsIGV2ZW50KSB7XG4gICAgY29uc3QgYkxvZ2dpbmcgPSBmYWxzZTtcbiAgICBpZiAoYkxvZ2dpbmcpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBBbmd1bGFyUENvbm5lY3QuY2hhbmdlSGFuZGxlcmApO1xuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgcmVhc29uYWJsZSBpbnB1dFxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcCB8fCBVdGlscy5pc0VtcHR5T2JqZWN0KGluQ29tcCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gY2hhbmdlSGFuZGxlcjogaW5Db21wOiAke0pTT04uc3RyaW5naWZ5KGluQ29tcCl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcENvbm5lY3QgPSBpbkNvbXAucENvbm4kO1xuICAgIGlmICh1bmRlZmluZWQgPT09IHBDb25uZWN0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIGNoYW5nZUhhbmRsZXI6IGluQ29tcC5wQ29ubiQ6ICR7cENvbm5lY3R9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2xlYXIgb3V0IGVycm9yc1xuICAgIHRoaXMuZXJTZXJ2aWNlLnNlbmRNZXNzYWdlKCdkaXNtaXNzJywgJycpO1xuXG4gICAgcENvbm5lY3QuZ2V0QWN0aW9uc0FwaSgpLmNoYW5nZUhhbmRsZXIocENvbm5lY3QsIGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW4gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZW5jb3VudGVyZWQgYW4gZXZlbnQgKHN1Y2ggYXMgYmx1cilcbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IGNhbGxpbmcgdGhlIGV2ZW50XG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnRcbiAgICovXG4gIGV2ZW50SGFuZGxlcihpbkNvbXAsIGV2ZW50KSB7XG4gICAgY29uc3QgYkxvZ2dpbmcgPSBmYWxzZTtcbiAgICBpZiAoYkxvZ2dpbmcpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBBbmd1bGFyUENvbm5lY3QuZXZlbnRIYW5kbGVyYCk7XG4gICAgfVxuICAgIC8vIGNoZWNrIGZvciByZWFzb25hYmxlIGlucHV0XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wIHx8IFV0aWxzLmlzRW1wdHlPYmplY3QoaW5Db21wKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBldmVudEhhbmRsZXI6IGluQ29tcDogJHtKU09OLnN0cmluZ2lmeShpbkNvbXApfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBDb25uZWN0ID0gaW5Db21wLnBDb25uJDtcbiAgICBpZiAodW5kZWZpbmVkID09PSBwQ29ubmVjdCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBldmVudEhhbmRsZXI6IGluQ29tcC5wQ29ubiQ6ICR7cENvbm5lY3R9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcENvbm5lY3QuZ2V0QWN0aW9uc0FwaSgpLmV2ZW50SGFuZGxlcihwQ29ubmVjdCwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIEEgaGFuZGxlIHRvIHRoZSBhcHBsaWNhdGlvbidzIHN0b3JlXG4gICAqL1xuICBnZXRTdG9yZSgpIHtcbiAgICBpZiAodGhpcy50aGVTdG9yZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy50aGVTdG9yZSA9IFBDb3JlLmdldFN0b3JlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRoZVN0b3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBiTG9nTXNnIElmIHRydWUsIHdpbGwgd3JpdGUgdGhlIHN0cmluZ2lmaWVkIHN0YXRlIHRvIHRoZSBzdG9yZSBmb3IgZGVidWdnaW5nL2luc3BlY3Rpb25cbiAgICogQHBhcmFtIGluQ29tcCBJZiBzdXBwbGllZCwgdGhlIGNvbXBvbmVudCB0aGF0IGlzIHJlcXVlc3RpbmcgdGhlIHN0b3JlJ3Mgc3RhdGVcbiAgICogQHJldHVybnMgQSBoYW5kbGUgdG8gdGhlIF9fc3RhdGVfXyBvZiBhcHBsaWNhdGlvbidzIHN0b3JlXG4gICAqL1xuICBnZXRTdGF0ZShiTG9nTXNnOiBib29sZWFuID0gZmFsc2UsIGluQ29tcDogYW55ID0gbnVsbCkge1xuICAgIGNvbnN0IHRoZVN0YXRlOiBvYmplY3QgPSB0aGlzLmdldFN0b3JlKCkuZ2V0U3RhdGUoKTtcbiAgICBpZiAoYkxvZ01zZykge1xuICAgICAgY29uc3QgdGhlQ29tcE5hbWU6IHN0cmluZyA9IGluQ29tcCA/IGAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogYCA6ICcnO1xuICAgICAgY29uc29sZS5sb2coYCR7dGhlQ29tcE5hbWV9IFN0b3JlIHN0YXRlOiAke0pTT04uc3RyaW5naWZ5KHRoZVN0YXRlKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoZVN0YXRlO1xuICB9XG5cbiAgLy8gcHJvY2Vzc0FjdGlvbnMgLSBjYXJyaWVkIG92ZXIgZnJvbSBQQ29ubmVjdEhPQyBpbml0aWFsaXplXG4gIC8qKlxuICAgKiAgcHJvY2Vzc0FjdGlvbnMgZXhwb3NlcyBhbGwgYWN0aW9ucyBpbiB0aGUgbWV0YWRhdGEuXG4gICAqICBBdHRhY2hlcyBjb21tb24gaGFuZGxlciAoZXZlbnRIYW5kbGVyKSBmb3IgYWxsIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NBY3Rpb25zKGluQ29tcCkge1xuICAgIGNvbnN0IHBDb25uZWN0ID0gaW5Db21wLnBDb25uJDtcbiAgICBpZiAodW5kZWZpbmVkID09PSBwQ29ubmVjdCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBwcm9jZXNzQWN0aW9uczogcENvbm4kOiAke3BDb25uZWN0fSBmcm9tIGNvbXBvbmVudDogJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5Db21wLnBDb25uJC5pc0VkaXRhYmxlKCkpIHtcbiAgICAgIGluQ29tcC5wQ29ubiQuc2V0QWN0aW9uKCdvbkNoYW5nZScsIHRoaXMuY2hhbmdlSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgIGluQ29tcC5wQ29ubiQuc2V0QWN0aW9uKCdvbkJsdXInLCB0aGlzLmV2ZW50SGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1wY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFlMUMsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakMsNENBQTRDO2FBQzdCLGFBQVEsR0FBRyxLQUFLLEFBQVIsQ0FBUztJQUVoQyxZQUNVLFNBQWlDLEVBQ2pDLFNBQStCLEVBQy9CLEtBQVk7UUFGWixjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBeEJ0Qjs7V0FFRztRQUNLLGFBQVEsR0FBUSxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDSyx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFFL0I7Ozs7O1dBS0c7UUFDSyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFVdkMseURBQXlEO1FBQ3pELDREQUE0RDtRQUM1RCxvREFBb0Q7UUFDcEQsa0RBQWtEO1FBQ2xELCtDQUErQztRQUMvQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsNkRBQTZEO1FBQzdELCtCQUErQjtRQUMvQiwrREFBK0Q7UUFDL0QsV0FBVztRQUNYLGtFQUFrRTtRQUNsRSxJQUFJO0lBQ04sQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixJ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LGNBQWMsQ0FBQyxNQUFNO1FBQzNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsUUFBUSxvQkFBb0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7K0dBcGZVLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lclNlcnZpY2UgfSBmcm9tICcuLi9fbWVzc2FnZXMvcHJvZ3Jlc3Mtc3Bpbm5lci5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi4vX21lc3NhZ2VzL2Vycm9yLW1lc3NhZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi9faGVscGVycy91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ndWxhclBDb25uZWN0RGF0YSB7XG4gIGNvbXBJRD86IHN0cmluZztcbiAgdW5zdWJzY3JpYmVGbj86IEZ1bmN0aW9uO1xuICB2YWxpZGF0ZU1lc3NhZ2U/OiBzdHJpbmc7XG4gIGFjdGlvbnM/OiB7XG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xuICAgIG9uQmx1cjogRnVuY3Rpb247XG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2Uge1xuICAvKipcbiAgICogTG9jYWwgdmFyaWFibGUgZm9yIGFjY2VzcyB0byB0aGUgc3RvcmUgb25jZSB0aGUgc2VydmljZSBpcyBjb25uZWN0ZWQgdG8gaXQuXG4gICAqL1xuICBwcml2YXRlIHRoZVN0b3JlOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBMb2NhbCB2YXJpYWJsZSB1c2VkIHRvIGNvbXB1dGUgdGhlIG5leHQgY29tcG9uZW50SURcbiAgICovXG4gIHByaXZhdGUgY291bnRlckNvbXBvbmVudElEID0gMDtcblxuICAvKipcbiAgICogTG9jYWwgYXJyYXkgdXNlZCB0byBzdG9yZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gY29tcG9uZW50IHRvIGl0cyBtb3N0IHJlY2VudCBcInByb3BzXCJcbiAgICogIHdoZXJlIFwicHJvcHNcIiBpcyB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbXBvbmVudCdzIGdldENvbmZpZ1Byb3BzIGFsb25nIHdpdGhcbiAgICogYW55dGhpbmcgYWRkZWQgYnkgcG9wdWxhdGVBZGRpdGlvbmFsUHJvcHMuXG4gICAqIEVhY2ggZW50cnkgaXM6IHsgX19jb21wb25lbnRJRF9fOiBfdGhlIGNvbXBvbmVudCdzIG1vc3QgcmVjZW50IHByb3BzXyB9XG4gICAqL1xuICBwcml2YXRlIGNvbXBvbmVudFByb3BzQXJyOiBPYmplY3RbXSA9IFtdO1xuXG4gIC8qIFVzZWQgdG8gdG9nZ2xlIHNvbWUgY2xhc3Mtd2lkZSBsb2dnaW5nICovXG4gIHByaXZhdGUgc3RhdGljIGJMb2dnaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwc1NlcnZpY2U6IFByb2dyZXNzU3Bpbm5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlclNlcnZpY2U6IEVycm9yTWVzc2FnZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge1xuICAgIC8vIEVzdGFibGlzaCBuZWNlc3Nhcnkgb3ZlcnJpZGUgZmxhZ3MgZm9yIG91ciB1c2Ugb2YgQ29yZVxuICAgIC8vIGNvbnN0IGNvcmVPdmVycmlkZXMgPSB7IFwiZHluYW1pY0xvYWRDb21wb25lbnRzXCI6IGZhbHNlIH07XG4gICAgLy8gbGV0IGNvcmVPdmVycmlkZXMgPSBQQ29yZS5nZXRCZWhhdmlvck92ZXJyaWRlcygpO1xuICAgIC8vIGNvcmVPdmVycmlkZXNbXCJkeW5hbWljTG9hZENvbXBvbmVudHNcIl0gPSBmYWxzZTtcbiAgICAvLyBQQ29yZS5zZXRCZWhhdmlvck92ZXJyaWRlcyggY29yZU92ZXJyaWRlcyApO1xuICAgIFBDb3JlLnNldEJlaGF2aW9yT3ZlcnJpZGUoJ2R5bmFtaWNMb2FkQ29tcG9uZW50cycsIGZhbHNlKTtcblxuICAgIC8vIEFsd2F5cyBiZXN0IHRvIHVzZSBkZWVwIG9iamVjdCBjb21wYXJlIHdoZW4gaXQncyBhdmFpbGFibGVcbiAgICAvLyBpZiAoaXNFcXVhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gY29uc29sZS5sb2coYEFuZ3VsYXJQQ29ubmVjdCBpcyB1c2luZyBkZWVwIG9iamVjdCBjb21wYXJlYCk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0IGlzIHVzaW5nIEpTT04uc3RyaW5naWZ5IGNvbXBhcmVgKTtcbiAgICAvLyB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHVuaXF1ZSAoZm9yIHRoaXMgc2Vzc2lvbikgQ29tcG9uZW50SUQgdGhhdCBzaG91bGRcbiAgICogYmUgdXNlZCBmb3IgdGhhdCBjb21wb25lbnQgdG8gdXBkYXRlIGl0cyBtb3N0IHJlY2VudCBwcm9wc1xuICAgKiAod2hpY2ggY2FuIGFsc28gYmUgY29tcGFyZWQgYWdhaW5zdCBpdHMgcHJldmlvdXMgdmFsdWVcbiAgICogYmVmb3JlIHVwZGF0aW5nKS4gTm90ZSB0aGF0IHRoaXMgcmV0dXJucyBhIHN0cmluZyBzbyB3ZSBjYW4gdXNlXG4gICAqIGl0IGFzIGEga2V5IGluIGFuIGFzc29jaWF0aXZlIGFycmF5XG4gICAqIEByZXR1cm5zIHRoZSBuZXh0IGNvbXBvbmVudElEXG4gICAqL1xuICBwcml2YXRlIGdldE5leHRDb21wb25lbnRJZCgpOiBzdHJpbmcge1xuICAgIHRoaXMuY291bnRlckNvbXBvbmVudElEICs9IDE7XG4gICAgLy8gTm90ZSB0aGF0IHdlIHVzZSB0aGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIG51bWJlciBzbyB3ZSBoYXZlIGFuXG4gICAgLy8gIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgd2UgY2FuIGNsZWFuIHVwIGxhdGVyLCBpZiBuZWVkZWQuXG4gICAgcmV0dXJuIHRoaXMuY291bnRlckNvbXBvbmVudElELnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIENhbGxpbmcgb2JqZWN0IChpbkNvbXApIHN1YnNjcmliZXMgdG8gc3RvcmUgY2hhbmdlcy5cbiAgICogQHBhcmFtIGluQ29tcCBUaGUgY29tcG9uZW50IHRoYXQncyBzdWJzY3JpYmluZyB0byB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGluQ2FsbGJhY2sgVGhlIGNvbXBvbmVudCdzIGNhbGxiYWNrIGZ1bmN0aW9uICh0eXBpY2FsbHkgY2FsbGVkIG9uU3RhdGVDaGFuZ2UpIHRoYXQgd2lsbFxuICAgKiBiZSBjYWxsZWQgd2hlbiB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICogQHJldHVybnMgVGhlICoqdW5zdWJzY3JpYmUqKiBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IG5lZWRzXG4gICAqIHRvIHVuc3Vic2NyaWJlIGZyb20gdGhlIHN0b3JlLiAoVHlwaWNhbGx5IGR1cmluZyBuZ09uRGVzdHJveSlcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9TdG9yZShpbkNvbXA6IGFueSA9IG51bGwsIGluQ2FsbGJhY2s6IEZ1bmN0aW9uIHwgbnVsbCA9IG51bGwpOiBGdW5jdGlvbiB7XG4gICAgLy8gY29uc3QgdGhlQ29tcE5hbWU6IHN0cmluZyA9IGluQ29tcCA/IGAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfWAgOiAnbm8gY29tcG9uZW50IHByb3ZpZGVkJztcbiAgICBsZXQgZm5VbnN1YnNjcmliZTtcbiAgICAvLyBjb25zb2xlLmxvZyggYEJyaWRnZSBzdWJzY3JpYmluZzogJHt0aGVDb21wTmFtZX0gYCk7XG4gICAgaWYgKGluQ29tcCkge1xuICAgICAgZm5VbnN1YnNjcmliZSA9IHRoaXMuZ2V0U3RvcmUoKS5zdWJzY3JpYmUoaW5DYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiBmblVuc3Vic2NyaWJlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIENvbXBvbmVudCdzIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCAoYSkgdG8gcG9wdWxhdGUgY29tcG9uZW50UHJvcHNBcnJcbiAgLy8gIGFuZCAoYikgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgd2hvc2UgcHJvcGVydGllcyBhcmUgYmVpbmcgb2J0YWluZWRcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50UHJvcHMoaW5Db21wOiBhbnkgPSBudWxsKTogT2JqZWN0IHtcbiAgICBsZXQgY29tcFByb3BzOiBhbnkgPSB7fTtcbiAgICBsZXQgYWRkUHJvcHMgPSB7fTtcblxuICAgIGlmIChpbkNvbXAgPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogZ2V0Q29tcG9uZW50UHJvcHMgY2FsbGVkIHdpdGggYmFkIGNvbXBvbmVudDogJHtpbkNvbXB9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJGbG93Q29udGFpbmVyQ29tcG9uZW50XCIpIHx8IChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJWaWV3Q29udGFpbmVyQ29tcG9uZW50XCIpXG4gICAgLy8gICAgIHx8IChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJWaWV3Q29tcG9uZW50XCIpIHx8IChpbkNvbXAuY29uc3RydWN0b3IubmFtZSA9PT0gXCJEZWZlckxvYWRDb21wb25lbnRcIikpIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGAtLT4gQW5ndWxhclBDb25uZWN0IGdldENvbXBvbmVudFByb3BzOiAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgIC8vIH1cblxuICAgIGlmIChpbkNvbXAuYWRkaXRpb25hbFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5Db21wLmFkZGl0aW9uYWxQcm9wcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYWRkUHJvcHMgPSBpbkNvbXAucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyhpbkNvbXAuYWRkaXRpb25hbFByb3BzKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluQ29tcC5hZGRpdGlvbmFsUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgcHJvcHNUb0FkZCA9IGluQ29tcC5hZGRpdGlvbmFsUHJvcHMoUENvcmUuZ2V0U3RvcmUoKS5nZXRTdGF0ZSgpLCBpbkNvbXAucENvbm4kKTtcbiAgICAgICAgYWRkUHJvcHMgPSBpbkNvbXAucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyhwcm9wc1RvQWRkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wUHJvcHMgPSBpbkNvbXAucENvbm4kLmdldENvbmZpZ1Byb3BzKCk7XG5cbiAgICAvLyBjb25zdCBjb21wb25lbnROYW1lID0gaW5Db21wLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbW1lbnQgaXMgZnJvbSB0aGUgTmVidWxhL0NvbnN0ZWxsYXRpb24gdmVyc2lvbiBvZiB0aGlzIGNvZGUuIE1lYW50IGFzIGEgcmVtaW5kZXIgdG8gY2hlY2sgdGhpcyBvY2Nhc2lvbmFsbHlcbiAgICAvLyBwb3B1bGF0ZSBhZGRpdGlvbmFsIHByb3BzIHdoaWNoIGFyZSBjb21wb25lbnQgc3BlY2lmaWMgYW5kIG5vdCBwcmVzZW50IGluIGNvbmZpZ3VyYXRpb25zXG4gICAgLy8gVGhpcyBibG9jayBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbCB0aGVzZSBwcm9wcyB3aWxsIGJlIGFkZGVkIGFzIHBhcnQgb2YgY29uZmlnc1xuICAgIGluQ29tcC5wQ29ubiQucG9wdWxhdGVBZGRpdGlvbmFsUHJvcHMoY29tcFByb3BzKTtcblxuICAgIGNvbXBQcm9wcyA9IGluQ29tcC5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKGNvbXBQcm9wcyk7XG5cbiAgICBpZiAoY29tcFByb3BzICYmIHVuZGVmaW5lZCAhPT0gY29tcFByb3BzLnZhbGlkYXRlbWVzc2FnZSAmJiBjb21wUHJvcHMudmFsaWRhdGVtZXNzYWdlICE9ICcnKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYCAgIHZhbGlkYXRlbWVzc2FnZSBmb3IgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX0gJHtpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5jb21wSUR9OiAke2NvbXBQcm9wcy52YWxpZGF0ZW1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbXBQcm9wcyxcbiAgICAgIC4uLmFkZFByb3BzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgaWQgZm9yIGdpdmVuIGNvbXBvbmVudCBjcmVhdGVkIHdoZW4gcmVnaXN0ZXJpbmdcbiAgICogT3RoZXJ3aXNlLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgd2hvc2UgcHJvcGVydHkgaXMgYmVpbmcgcmVxdWVzdGVkLlxuICAgKi9cbiAgcHVibGljIGdldENvbXBvbmVudElEKGluQ29tcCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGluQ29tcC5icmlkZ2VDb21wb25lbnRJRCB8fCBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5jb21wSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgcmVxdWVzdGVkIHByb3BlcnR5IGZvciB0aGUgY29tcG9uZW50IGlmIGl0IGV4aXN0cy5cbiAgICogT3RoZXJ3aXNlLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgd2hvc2UgcHJvcGVydHkgaXMgYmVpbmcgcmVxdWVzdGVkLlxuICAgKiBAcGFyYW0gaW5Qcm9wIFRoZSBwcm9wZXJ0eSBiZWluZyByZXF1ZXN0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tcG9uZW50UHJvcChpbkNvbXA6IGFueSA9IG51bGwsIGluUHJvcCA9ICcnKSB7XG4gICAgaWYgKGluQ29tcCA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBnZXRDb21wb25lbnRQcm9wIGNhbGxlZCB3aXRoIGJhZCBjb21wb25lbnQ6ICR7aW5Db21wfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBJRCA9IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLmNvbXBJRDtcblxuICAgIC8vIExvb2sgdXAgcHJvcGVydHkgaW4gdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIGNvbXBvbmVudFByb3BBcnJheSAod2hpY2ggc2hvdWxkIGhhdmUgdGhlIG1vc3QgcmVjZW50IHZhbHVlKVxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF1baW5Qcm9wXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb21wbGV0ZSBzZXQgb2YgcmVzb2x2ZWQgcHJvcGVydGllcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhpcyBjb21wb25lbnQuXG4gICAqIFRoaXMgaXMgdGhlIGZ1bGwgc2V0IG9mIHByb3BlcnRpZXMgdGhhdCBhcmUgdHJhY2tlZCBpbiBSZWR1eCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudENvbXBsZXRlUHJvcHMoaW5Db21wOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGluQ29tcCA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBnZXRDdXJyZW50Q29tcGxldGVQcm9wcyBjYWxsZWQgd2l0aCBiYWQgY29tcG9uZW50OiAke2luQ29tcH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UHJvcHNBcnJbaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEuY29tcElEXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVudCBhbmQgaXRzIGNhbGxiYWNrIGZ1bmN0aW9uLiBXaGVuIGEgY29tcG9uZW50IGNhbGxzIHRoaXMgbWV0aG9kXG4gICAqICh0eXBpY2FsbHkgZnJvbSBpdHMgbmdPbkluaXQpLCB0aGUgY29tcG9uZW50IGlzIGdpdmVuIGEgdW5pcXVlIGNvbXBvbmVudElEIChmb3IgdGhpcyBzZXNzaW9uKVxuICAgKiBhbmQgc3Vic2NyaWJlcyB0aGUgY29tcG9uZW50IHRvIHRoZSBzdG9yZS4gQXMgYSBzaWRlIGVmZmVjdCwgaXQgYWxzbyBhc3NpZ25zIHRoZSBjb21wb25lbnQnc1xuICAgKiBhY3Rpb25zIChmcm9tIGl0cyBtZXRhZGF0YSkgdG8gdGhlIGNvbXBvbmVudCdzIF9fX2FjdGlvbnNfX18gYW5kIGJpbmRzIHRoZSBjb21wb25lbnQncyBjYWxsYmFja1xuICAgKiAocGFzc2VkIGluIGFzIF9fX2luQ2FsbGJhY2tfX18pIHRvIHRoZSBjb21wb25lbnQuIElmIGEgcHJvYmxlbSBpcyBlbmNvdW50ZXJlZCwgYW4gZW1wdHkgb2JqZWN0LFxuICAgKiB7fSwgaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCBiZWluZyByZWdpc3RlcmVkIGFuZCBzdWJzY3JpYmVkXG4gICAqIEBwYXJhbSBpbkNhbGxiYWNrIFRoZSBjb21wb25lbnQncyBjYWxsYmFjayBmdW5jdGlvbiAodHlwaWNhbGx5IGNhbGxlZCBvblN0YXRlQ2hhbmdlKSB0aGF0XG4gICAqIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBAcmV0dXJucyBBIEpTT04gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOlxuICAgKiBjb21wSUQ6IHRoZSB1bmlxdWUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcG9uZW50LFxuICAgKiB1bnN1YnNjcmliZUZuOiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBuZWVkcyB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBzdG9yZSxcbiAgICogdmFsaWRhdGVNZXNzYWdlOiBhbnkgdmFsaWRhdGlvbi9lcnJvciBtZXNzYWdlIHRoYXQgZ2V0cyBnZW5lcmF0ZWQgZm9yIHRoaXMgb2JqZWN0LFxuICAgKiBhY3Rpb25zOiBhbnkgYWN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGZvciB0aGlzIG9iamVjdFxuICAgKi9cbiAgcmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQoaW5Db21wLCBpbkNhbGxiYWNrOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsKTogQW5ndWxhclBDb25uZWN0RGF0YSB7XG4gICAgLy8gQ3JlYXRlIGFuIGluaXRpYWwgb2JqZWN0IHRvIGJlIHJldHVybmVkLlxuICAgIGNvbnN0IHJldHVybk9iamVjdDogQW5ndWxhclBDb25uZWN0RGF0YSA9IHtcbiAgICAgIGNvbXBJRDogJycsXG4gICAgICB1bnN1YnNjcmliZUZuOiB1bmRlZmluZWQsXG4gICAgICB2YWxpZGF0ZU1lc3NhZ2U6ICcnLFxuICAgICAgYWN0aW9uczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGlmIChpbkNvbXAgPT09IG51bGwgfHwgaW5DYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZTogaW5Db21wOiAke2luQ29tcH0gaW5DYWxsYmFjazogJHtpbkNhbGxiYWNrfWApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wVHlwZSA9IGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgaWYgKEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UuYkxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGByZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudDogJHtjb21wVHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodW5kZWZpbmVkICE9PSBpbkNvbXAuYnJpZGdlQ29tcG9uZW50SUQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE9MRCBTQ0hPT0w6ICR7Y29tcFR5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLmFjdGlvbnMgJiYgdW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZSBmcm9tICR7Y29tcFR5cGV9OiBhY3Rpb25zIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gaW5Db21wLmJyaWRnZUNvbXBvbmVudElEICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIHJlZ2lzdGVyQW5kU3Vic2NyaWJlIGZyb20gJHtjb21wVHlwZX06IGJyaWRnZUNvbXBvbmVudElEIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICAgIH1cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAudW5zdWJzY3JpYmVTdG9yZSAmJiB1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byByZWdpc3RlckFuZFN1YnNjcmliZSBmcm9tICR7Y29tcFR5cGV9OiB1bnN1YnNjcmliZVN0b3JlIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICAgIH1cbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAudmFsaWRhdGVNZXNzYWdlICYmIHVuZGVmaW5lZCA9PT0gaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcmVnaXN0ZXJBbmRTdWJzY3JpYmUgZnJvbSAke2NvbXBUeXBlfTogdmFsaWRhdGVNZXNzYWdlIG5vdCBkZWZpbmVkIGFzIGEgY2xhc3MgdmFyaWFibGUgZm9yIGluQ29tcGApO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBjYWxsIHByb2Nlc3NBY3Rpb25zIHRvIHBvcHVsYXRlIG1ldGFkYXRhIHdpdGggYWN0aW9ucyBhcyBpbiBQQ29ubmVjdEhPUiBpbml0aWFsaXplXG4gICAgdGhpcy5wcm9jZXNzQWN0aW9ucyhpbkNvbXApO1xuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5hY3Rpb25zKSB7XG4gICAgICByZXR1cm5PYmplY3QuYWN0aW9ucyA9IGluQ29tcC5wQ29ubiQuZ2V0QWN0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbkNvbXAuYWN0aW9ucyA9IGluQ29tcC5wQ29ubiQuZ2V0QWN0aW9ucygpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHRvIHRoZSBjb21wb25lbnQgaXQncyBhc3NvY2lhdGVkIHdpdGhcbiAgICBpbkNhbGxiYWNrID0gaW5DYWxsYmFjay5iaW5kKGluQ29tcCk7XG5cbiAgICAvLyBOb3cgcHJvY2VlZCB0byByZWdpc3RlciBhbmQgc3Vic2NyaWJlLi4uXG4gICAgY29uc3QgdGhlQ29tcElEOiBzdHJpbmcgPSB0aGlzLmdldE5leHRDb21wb25lbnRJZCgpO1xuICAgIGNvbnN0IHRoZVVuc3ViOiBGdW5jdGlvbiB8IG51bGwgPSB0aGlzLnN1YnNjcmliZVRvU3RvcmUoaW5Db21wLCBpbkNhbGxiYWNrKTtcblxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhKSB7XG4gICAgICBpbkNvbXAuYnJpZGdlQ29tcG9uZW50SUQgPSB0aGVDb21wSUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybk9iamVjdC5jb21wSUQgPSB0aGVDb21wSUQ7XG4gICAgICByZXR1cm5PYmplY3QudW5zdWJzY3JpYmVGbiA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVGb3JtRmllbGQoaW5Db21wKTtcbiAgICAgICAgdGhlVW5zdWIoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGlzIGNvbXBvbmVudHMgZW50cnkgaW4gdGhlIGNvbXBvbmVudFByb3BzQXJyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wc0Fyclt0aGVDb21wSURdID0ge307XG5cbiAgICB0aGlzLmFkZEZvcm1GaWVsZChpbkNvbXApO1xuXG4gICAgLy8gcmV0dXJuIG9iamVjdCB3aXRoIGNvbXBJRCBhbmQgdW5zdWJzY3JpYmUuLi5cbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xuICB9XG5cbiAgYWRkRm9ybUZpZWxkKGluQ29tcCkge1xuICAgIGluQ29tcC5wQ29ubiQ/LmFkZEZvcm1GaWVsZCgpO1xuICB9XG5cbiAgcmVtb3ZlRm9ybUZpZWxkKGluQ29tcCkge1xuICAgIGlmIChpbkNvbXAucENvbm4kPy5yZW1vdmVGb3JtRmllbGQpIHtcbiAgICAgIGluQ29tcC5wQ29ubiQ/LnJlbW92ZUZvcm1GaWVsZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHROYW1lID0gaW5Db21wLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGNvbnN0IHBhZ2VSZWZlcmVuY2UgPSBpbkNvbXAucENvbm4kLmdldFBhZ2VSZWZlcmVuY2UoKTtcbiAgICBjb25zdCByYXdDb25maWcgPSBpbkNvbXAucENvbm4kLl9yYXdDb25maWc7XG4gICAgY29uc3QgaW5kZXggPSBpbkNvbXAucENvbm4kLmluZGV4O1xuXG4gICAgaWYgKE9iamVjdC5oYXNPd24ocmF3Q29uZmlnPy5jb25maWcgPz8ge30sICd2YWx1ZScpICYmIGluQ29tcC5wQ29ubiQuX3R5cGUgIT09ICdBZGRyZXNzJykge1xuICAgICAgUENvcmUuZ2V0Q29udGV4dFRyZWVNYW5hZ2VyKCkucmVtb3ZlRmllbGROb2RlKFxuICAgICAgICBjb250ZXh0TmFtZSxcbiAgICAgICAgcGFnZVJlZmVyZW5jZSxcbiAgICAgICAgaW5Db21wLnBDb25uJC52aWV3TmFtZSB8fCAnJyxcbiAgICAgICAgaW5Db21wLnBDb25uJC5fZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIGluZGV4IGFzIG51bWJlclxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGluQ29tcC5wQ29ubiQuX3R5cGUgPT09ICdBZGRyZXNzJyAmJiByYXdDb25maWc/LmNvbmZpZz8uYXNzb2NpYXRlZFZpZXcpIHtcbiAgICAgIC8vIHJlbW92ZSBhZGRyZXNzIG5vZGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgUENvcmUuZ2V0Q29udGV4dFRyZWVNYW5hZ2VyKCkucmVtb3ZlVmlld05vZGUoY29udGV4dE5hbWUsIHBhZ2VSZWZlcmVuY2UsIHJhd0NvbmZpZy5jb25maWcuYXNzb2NpYXRlZFZpZXcsIGluZGV4IGFzIG51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSB2aWV3IG5vZGUgYW5kIGl0cyBjaGlsZHJlblxuICAgICAgY29uc3QgcGFnZVJlZiA9IHJhd0NvbmZpZz8uY29uZmlnPy5jb250ZXh0ID8gYCR7cGFnZVJlZmVyZW5jZX0ke3Jhd0NvbmZpZz8uY29uZmlnLmNvbnRleHR9YCA6IHBhZ2VSZWZlcmVuY2U7XG4gICAgICBQQ29yZS5nZXRDb250ZXh0VHJlZU1hbmFnZXIoKS5yZW1vdmVWaWV3Tm9kZShjb250ZXh0TmFtZSwgcGFnZVJlZiwgcmF3Q29uZmlnPy5jb25maWc/Lm5hbWUgfHwgcmF3Q29uZmlnPy5jb25maWc/LmlkIHx8ICcnLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBfX19jb21wb25lbnRQcm9wc0Fycl9fXyBpc1xuICAvLyAgdGhlIHNhbWUgYXMgdGhlIGluQ29tcFByb3BzIHBhc3NlZCBpbi5cbiAgLy8gIEFzIGEgc2lkZSBlZmZlY3QsIHVwZGF0ZSB0aGUgY29tcG9uZW50J3MgZW50cnkgaW4gY29tcG9uZW50UHJvcHNBcnJcbiAgLy8gIE5PVEU6IEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyB0aGUgZm9sbG93aW5nOlxuICAvLyAgKiBhIGJyaWRnZUNvbXBvbmVudElEIDxzdHJpbmc+IHByb3BlcnR5IC0gdXNlZCBhcyBsb29rdXAga2V5IGluIGNvbXBvbmVudFByb3BzQXJyXG4gIC8vICAqIGEgcENvbm4kIDw/PiBwcm9wZXJ0eSAtIHVzZWQgdG8gYWNjZXNzIGZ1bmN0aW9ucyBhY2Nlc3NlZCBpbiBnZXRDb21wb25lbnRQcm9wc1xuICAvLyBSZXR1cm4gdHJ1ZTogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgZGlmZmVyZW50IGFuZCB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gIC8vIFJldHVybiBmYWxzZTogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgdGhlIHNhbWUgYW5kIHRoZSBjb21wb25lbnQgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSAocmUtcmVuZGVyKVxuICAvLyAgT24gYmFkIGlucHV0LCByZXR1cm4gZmFsc2U7XG4gIC8qKlxuICAgKiBSZXR1cm5zICoqdHJ1ZSoqIGlmIHRoZSBjb21wb25lbnQncyBlbnRyeSBpbiBfX19jb21wb25lbnRQcm9wc0Fycl9fXyBpc1xuICAgKiB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBjdXJyZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50IChfX19pbkNvbXBfX18pIHBhc3NlZCBpbi5cbiAgICogQXMgYSBzaWRlIGVmZmVjdCwgdGhlIGNvbXBvbmVudCdzIGVudHJ5IGluIF9fX2NvbXBvbmVudFByb3BzQXJyX19fIGlzIHVwZGF0ZWQuXG4gICAqICoqTm90ZSoqOiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGluY29taW5nIGNvbXBvbmVudCBoYXMgdGhlIGZvbGxvd2luZzpcbiAgICogKGEpIGEgYnJpZGdlQ29tcG9uZW50SUQgX3N0cmluZ18gcHJvcGVydHkgdXNlZCBhcyBsb29rdXAga2V5IGluIF9fX2NvbXBvbmVudFByb3BzQXJyX19fXG4gICAqIGFuZCAoYikgYSBfX19wQ29ubiRfX18gcHJvcGVydHkgdXNlZCB0byBhY2Nlc3MgZnVuY3Rpb25zIGNhbGxlZCBpbiBfX19nZXRDb21wb25lbnRQcm9wc19fX1xuICAgKlxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgYXNraW5nIGlmIGl0IHNob3VsZCB1cGRhdGUgaXRzZWxmXG4gICAqIEByZXR1cm5zIFJldHVybiAqKnRydWUqKjogbWVhbnMgdGhlIGNvbXBvbmVudCBwcm9wcyBhcmUgZGlmZmVyZW50IGFuZCB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpLlxuICAgKiBSZXR1cm4gKipmYWxzZSoqOiBtZWFucyB0aGUgY29tcG9uZW50IHByb3BzIGFyZSB0aGUgc2FtZSBhbmQgdGhlIGNvbXBvbmVudCBkb2Vzbid0IG5lZWQgdG8gdXBkYXRlIChyZS1yZW5kZXIpLlxuICAgKiBJZiB0aGUgKioqaW5Db21wKioqIGlucHV0IGlzIGJhZCwgZmFsc2UgaXMgYWxzbyByZXR1cm5lZC5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShpbkNvbXApOiBib29sZWFuIHtcbiAgICAvLyBjb25zdCBiU2hvd0xvZ2dpbmcgPSBmYWxzZTtcbiAgICBsZXQgYlJldCA9IGZhbHNlO1xuICAgIC8vIGNoZWNrIGZvciByZWFzb25hYmxlIGlucHV0XG4gICAgaWYgKFV0aWxzLmlzRW1wdHlPYmplY3QoaW5Db21wKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBzaG91bGRDb21wb25lbnRVcGRhdGU6IGluQ29tcDogJHtKU09OLnN0cmluZ2lmeShpbkNvbXApfWApO1xuICAgICAgcmV0dXJuIGJSZXQ7XG4gICAgfVxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcC52YWxpZGF0ZU1lc3NhZ2UgJiYgdW5kZWZpbmVkID09PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBzaG91bGRDb21wb25lbnRVcGRhdGU6ICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9IGRvZXMgbm90IGhhdmUgYSB2YWxpZGF0ZU1lc3NhZ2UgcHJvcGVydHkuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcElEID0gdGhpcy5nZXRDb21wb25lbnRJRChpbkNvbXApO1xuXG4gICAgY29uc3QgY3VycmVudFByb3BzOiBhbnkgPSB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF07XG4gICAgY29uc3QgY3VycmVudFByb3BzQXNTdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQcm9wcyk7XG5cbiAgICBjb25zdCBpbmNvbWluZ1Byb3BzOiBhbnkgPSB0aGlzLmdldENvbXBvbmVudFByb3BzKGluQ29tcCk7XG5cbiAgICAvLyBpZiBoYXZlIHBhZ2VNZXNzYWdlcywgYW5kIGl0IGlzIGJsYW5rLCByZW1vdmUgaXQuICBUaGlzIGNhdXNlcyBpc3N1ZXMgb2YgbWFraW5nIGl0IGFwcGVhclxuICAgIC8vIHRoYXQgYSB3aWxsIGNhdXNlIGFuIHVwZGF0ZSwgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VcbiAgICBpZiAodGhpcy5pc1BhZ2VNZXNzYWdlc0VtcHR5KGluY29taW5nUHJvcHMpKSB7XG4gICAgICBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS5wYWdlTWVzc2FnZXMgPSBpbmNvbWluZ1Byb3BzLnBhZ2VNZXNzYWdlcztcbiAgICAgIGRlbGV0ZSBpbmNvbWluZ1Byb3BzLnBhZ2VNZXNzYWdlcztcbiAgICB9XG5cbiAgICBpZiAoaW5jb21pbmdQcm9wcy5odHRwTWVzc2FnZXMpIHtcbiAgICAgIGluQ29tcC5hbmd1bGFyUENvbm5lY3REYXRhLmh0dHBNZXNzYWdlcyA9IGluY29taW5nUHJvcHMuaHR0cE1lc3NhZ2VzO1xuICAgICAgaW5jb21pbmdQcm9wcy5odHRwTWVzc2FnZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21pbmdQcm9wc0FzU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShpbmNvbWluZ1Byb3BzKTtcblxuICAgIGJSZXQgPSBpc0VxdWFsID8gIWlzRXF1YWwoY3VycmVudFByb3BzLCBpbmNvbWluZ1Byb3BzKSA6IGN1cnJlbnRQcm9wc0FzU3RyICE9IGluY29taW5nUHJvcHNBc1N0cjtcblxuICAgIC8vIEJlbG93IHBpZWNlIG9mIGNvZGUgaXMgbmVlZGVkIHRvIHJlLXJlbmRlciB0aGUgY29tcG9uZW50IHNpbmNlIHdlIHdhbm5hIGV2YWx1YXRlIHRoZSBWaXNpYmlsaXR5IGV4cHJlc3Npb24gd2l0aGluIFZpZXcgY29tcG9uZW50IGluIHN1Y2ggY2FzZXNcbiAgICBpZiAoaW5Db21wLnBDb25uJC5tZXRhLmNvbmZpZy5jb250ZXh0Py5sZW5ndGggPiAwICYmIGluQ29tcC5wQ29ubiQuZ2V0UGFnZVJlZmVyZW5jZSgpLmxlbmd0aCA+ICdjYXNlSW5mby5jb250ZW50Jy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE5vdyB1cGRhdGUgdGhlIGVudHJ5IGluIGNvbXBvbmVudFByb3BzQXJyIHdpdGggdGhlIGluY29taW5nIHZhbHVlIHNvXG4gICAgLy8gIHdlIGNhbiBjb21wYXJlIGFnYWluc3QgdGhhdCBuZXh0IHRpbWUuLi5cbiAgICB0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF0gPSBpbmNvbWluZ1Byb3BzO1xuICAgIGNvbnN0IHZhbGlkYXRlbWVzc2FnZSA9IGluY29taW5nUHJvcHMudmFsaWRhdGVtZXNzYWdlID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXMudXRpbHMuaHRtbERlY29kZShpbmNvbWluZ1Byb3BzLnZhbGlkYXRlbWVzc2FnZSk7XG4gICAgLy8gYW5kIHVwZGF0ZSB0aGUgY29tcG9uZW50J3MgdmFsaWRhdGlvbiBtZXNzYWdlIChpZiB1bmRlZmluZWQsIGl0IHNob3VsZCBiZSBzZXQgdG8gXCJcIilcbiAgICBpZiAodW5kZWZpbmVkICE9PSBpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YSkge1xuICAgICAgaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlID0gdmFsaWRhdGVtZXNzYWdlO1xuXG4gICAgICBpZiAoaW5Db21wLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlICE9ICcnKSB7XG4gICAgICAgIC8vIGlmIGhhdmUgYSB2YWxpZGF0ZSBtZXNzYWdlLCB0dXJuIG9mZiBzcGlubmVyXG4gICAgICAgIGNvbnN0IHRpbWVyID0gaW50ZXJ2YWwoMTAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcblxuICAgICAgICAgIHRpbWVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBzRXJyb3JNZXNzYWdlID0gY3VycmVudFByb3BzICYmIGN1cnJlbnRQcm9wcy5sYWJlbCA/IGN1cnJlbnRQcm9wcy5sYWJlbC5jb25jYXQoJyAtICcpIDogJyc7XG4gICAgICAgIHNFcnJvck1lc3NhZ2UgPSBzRXJyb3JNZXNzYWdlLmNvbmNhdChpbkNvbXAuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmVyU2VydmljZS5zZW5kTWVzc2FnZSgndXBkYXRlJywgc0Vycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluQ29tcC52YWxpZGF0ZU1lc3NhZ2UgPSB2YWxpZGF0ZW1lc3NhZ2U7XG4gICAgfVxuXG4gICAgaWYgKGJSZXQgJiYgY29tcElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJSZXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyggYEFuZ3VsYXJQQ29ubmVjdCBjb21wb25lbnQgJHtjb21wSUR9IC0gJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX0gLSBzaG91bGRDb21wb25lbnRVcGRhdGU6ICR7YlJldH1gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcImN1cnJlbnQgcHJvcHM6IFwiICsgY3VycmVudFByb3BzQXNTdHIpO1xuXG4gICAgaWYgKGJSZXQpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGAqKioqIGNoYW5nZSBmb3I6ICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcImN1cnJlbnQgcHJvcHM6IFwiICsgY3VycmVudFByb3BzQXNTdHIpO1xuICAgICAgLy8gY29uc29sZS5sb2coXCJpbmNvbWluZyBwcm9wczogXCIgKyBpbmNvbWluZ1Byb3BzQXNTdHIpO1xuICAgICAgLy8gY29uc29sZS5sb2coYCAgICAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmluZzogJHtiUmV0fSwgY29tcElkOiAke2NvbXBJRH1gICk7XG4gICAgICAvLyBjb25zb2xlLmxvZyggYCAgICBVcGRhdGluZyB3aXRoIGNvbXBvbmVudFByb3BzIGZvciAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBvbmVudFByb3BzQXJyW2NvbXBJRF0pfWApO1xuICAgICAgLy8gY29uc29sZS5sb2coIGAgICAgICAgICAgYW5kIHZhbGlkYXRlTWVzc2FnZTogJHtpbkNvbXAudmFsaWRhdGVNZXNzYWdlfWApO1xuICAgIH1cbiAgICAvLyBlbHNlIGlmIChpbkNvbXAuY29uc3RydWN0b3IubmFtZS5pbmRleE9mKFwiVmlld1wiKSA+PSAwIHx8IGluQ29tcC5jb25zdHJ1Y3Rvci5uYW1lLmluZGV4T2YoXCJSb290XCIpID49IDApIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwibm8gY2hhbmdlXCIpO1xuICAgIC8vICAgY29uc29sZS5sb2coXCJjdXJyZW50IHByb3BzOiBcIiArIGN1cnJlbnRQcm9wc0FzU3RyKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwiaW5jb21pbmcgcHJvcHM6IFwiICsgaW5jb21pbmdQcm9wc0FzU3RyKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKGAgICAgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06IHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5pbmc6ICR7YlJldH0sIGNvbXBJZDogJHtjb21wSUR9YCApO1xuXG4gICAgLy8gfVxuXG4gICAgLy8gY29uc29sZS5sb2coYCAgICAke2luQ29tcC5jb25zdHJ1Y3Rvci5uYW1lfTogc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmluZzogJHtiUmV0fWApO1xuXG4gICAgcmV0dXJuIGJSZXQ7XG4gIH1cblxuICBpc1BhZ2VNZXNzYWdlc0VtcHR5KGluY29taW5nUHJvcHMpIHtcbiAgICByZXR1cm4gaW5jb21pbmdQcm9wcy5wYWdlTWVzc2FnZXMgJiYgaW5jb21pbmdQcm9wcy5wYWdlTWVzc2FnZXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbiBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBlbmNvdW50ZXJlZCBhIGNoYW5nZSBldmVudFxuICAgKiBAcGFyYW0gaW5Db21wIFRoZSBjb21wb25lbnQgY2FsbGluZyB0aGUgY2hhbmdlIGV2ZW50XG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnRcbiAgICovXG4gIGNoYW5nZUhhbmRsZXIoaW5Db21wLCBldmVudCkge1xuICAgIGNvbnN0IGJMb2dnaW5nID0gZmFsc2U7XG4gICAgaWYgKGJMb2dnaW5nKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0LmNoYW5nZUhhbmRsZXJgKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgZm9yIHJlYXNvbmFibGUgaW5wdXRcbiAgICBpZiAodW5kZWZpbmVkID09PSBpbkNvbXAgfHwgVXRpbHMuaXNFbXB0eU9iamVjdChpbkNvbXApKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBBbmd1bGFyUENvbm5lY3Q6IGJhZCBjYWxsIHRvIGNoYW5nZUhhbmRsZXI6IGluQ29tcDogJHtKU09OLnN0cmluZ2lmeShpbkNvbXApfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBDb25uZWN0ID0gaW5Db21wLnBDb25uJDtcbiAgICBpZiAodW5kZWZpbmVkID09PSBwQ29ubmVjdCkge1xuICAgICAgY29uc29sZS5lcnJvcihgQW5ndWxhclBDb25uZWN0OiBiYWQgY2FsbCB0byBjaGFuZ2VIYW5kbGVyOiBpbkNvbXAucENvbm4kOiAke3BDb25uZWN0fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFyIG91dCBlcnJvcnNcbiAgICB0aGlzLmVyU2VydmljZS5zZW5kTWVzc2FnZSgnZGlzbWlzcycsICcnKTtcblxuICAgIHBDb25uZWN0LmdldEFjdGlvbnNBcGkoKS5jaGFuZ2VIYW5kbGVyKHBDb25uZWN0LCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGVuY291bnRlcmVkIGFuIGV2ZW50IChzdWNoIGFzIGJsdXIpXG4gICAqIEBwYXJhbSBpbkNvbXAgVGhlIGNvbXBvbmVudCBjYWxsaW5nIHRoZSBldmVudFxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XG4gICAqL1xuICBldmVudEhhbmRsZXIoaW5Db21wLCBldmVudCkge1xuICAgIGNvbnN0IGJMb2dnaW5nID0gZmFsc2U7XG4gICAgaWYgKGJMb2dnaW5nKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQW5ndWxhclBDb25uZWN0LmV2ZW50SGFuZGxlcmApO1xuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgcmVhc29uYWJsZSBpbnB1dFxuICAgIGlmICh1bmRlZmluZWQgPT09IGluQ29tcCB8fCBVdGlscy5pc0VtcHR5T2JqZWN0KGluQ29tcCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gZXZlbnRIYW5kbGVyOiBpbkNvbXA6ICR7SlNPTi5zdHJpbmdpZnkoaW5Db21wKX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwQ29ubmVjdCA9IGluQ29tcC5wQ29ubiQ7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gcENvbm5lY3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gZXZlbnRIYW5kbGVyOiBpbkNvbXAucENvbm4kOiAke3BDb25uZWN0fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBDb25uZWN0LmdldEFjdGlvbnNBcGkoKS5ldmVudEhhbmRsZXIocENvbm5lY3QsIGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB0byB0aGUgYXBwbGljYXRpb24ncyBzdG9yZVxuICAgKi9cbiAgZ2V0U3RvcmUoKSB7XG4gICAgaWYgKHRoaXMudGhlU3RvcmUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudGhlU3RvcmUgPSBQQ29yZS5nZXRTdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aGVTdG9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYkxvZ01zZyBJZiB0cnVlLCB3aWxsIHdyaXRlIHRoZSBzdHJpbmdpZmllZCBzdGF0ZSB0byB0aGUgc3RvcmUgZm9yIGRlYnVnZ2luZy9pbnNwZWN0aW9uXG4gICAqIEBwYXJhbSBpbkNvbXAgSWYgc3VwcGxpZWQsIHRoZSBjb21wb25lbnQgdGhhdCBpcyByZXF1ZXN0aW5nIHRoZSBzdG9yZSdzIHN0YXRlXG4gICAqIEByZXR1cm5zIEEgaGFuZGxlIHRvIHRoZSBfX3N0YXRlX18gb2YgYXBwbGljYXRpb24ncyBzdG9yZVxuICAgKi9cbiAgZ2V0U3RhdGUoYkxvZ01zZzogYm9vbGVhbiA9IGZhbHNlLCBpbkNvbXA6IGFueSA9IG51bGwpIHtcbiAgICBjb25zdCB0aGVTdGF0ZTogb2JqZWN0ID0gdGhpcy5nZXRTdG9yZSgpLmdldFN0YXRlKCk7XG4gICAgaWYgKGJMb2dNc2cpIHtcbiAgICAgIGNvbnN0IHRoZUNvbXBOYW1lOiBzdHJpbmcgPSBpbkNvbXAgPyBgJHtpbkNvbXAuY29uc3RydWN0b3IubmFtZX06IGAgOiAnJztcbiAgICAgIGNvbnNvbGUubG9nKGAke3RoZUNvbXBOYW1lfSBTdG9yZSBzdGF0ZTogJHtKU09OLnN0cmluZ2lmeSh0aGVTdGF0ZSl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGVTdGF0ZTtcbiAgfVxuXG4gIC8vIHByb2Nlc3NBY3Rpb25zIC0gY2FycmllZCBvdmVyIGZyb20gUENvbm5lY3RIT0MgaW5pdGlhbGl6ZVxuICAvKipcbiAgICogIHByb2Nlc3NBY3Rpb25zIGV4cG9zZXMgYWxsIGFjdGlvbnMgaW4gdGhlIG1ldGFkYXRhLlxuICAgKiAgQXR0YWNoZXMgY29tbW9uIGhhbmRsZXIgKGV2ZW50SGFuZGxlcikgZm9yIGFsbCBhY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzQWN0aW9ucyhpbkNvbXApIHtcbiAgICBjb25zdCBwQ29ubmVjdCA9IGluQ29tcC5wQ29ubiQ7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gcENvbm5lY3QpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFuZ3VsYXJQQ29ubmVjdDogYmFkIGNhbGwgdG8gcHJvY2Vzc0FjdGlvbnM6IHBDb25uJDogJHtwQ29ubmVjdH0gZnJvbSBjb21wb25lbnQ6ICR7aW5Db21wLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluQ29tcC5wQ29ubiQuaXNFZGl0YWJsZSgpKSB7XG4gICAgICBpbkNvbXAucENvbm4kLnNldEFjdGlvbignb25DaGFuZ2UnLCB0aGlzLmNoYW5nZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICBpbkNvbXAucENvbm4kLnNldEFjdGlvbignb25CbHVyJywgdGhpcy5ldmVudEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1006,6 +1006,22 @@ class AngularPConnectService {
1006
1006
  if (inComp.pConn$?.removeFormField) {
1007
1007
  inComp.pConn$?.removeFormField();
1008
1008
  }
1009
+ const contextName = inComp.pConn$.getContextName();
1010
+ const pageReference = inComp.pConn$.getPageReference();
1011
+ const rawConfig = inComp.pConn$._rawConfig;
1012
+ const index = inComp.pConn$.index;
1013
+ if (Object.hasOwn(rawConfig?.config ?? {}, 'value') && inComp.pConn$._type !== 'Address') {
1014
+ PCore.getContextTreeManager().removeFieldNode(contextName, pageReference, inComp.pConn$.viewName || '', inComp.pConn$._getPropertyName(), index);
1015
+ }
1016
+ else if (inComp.pConn$._type === 'Address' && rawConfig?.config?.associatedView) {
1017
+ // remove address node and its children
1018
+ PCore.getContextTreeManager().removeViewNode(contextName, pageReference, rawConfig.config.associatedView, index);
1019
+ }
1020
+ else {
1021
+ // remove view node and its children
1022
+ const pageRef = rawConfig?.config?.context ? `${pageReference}${rawConfig?.config.context}` : pageReference;
1023
+ PCore.getContextTreeManager().removeViewNode(contextName, pageRef, rawConfig?.config?.name || rawConfig?.config?.id || '', index);
1024
+ }
1009
1025
  }
1010
1026
  // Returns true if the component's entry in ___componentPropsArr___ is
1011
1027
  // the same as the inCompProps passed in.