ng-easycommerce-v18 0.6.9 → 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,11 @@
1
+ # Version 0.6.10
2
+ - Checkout: se centraliza el manejo de errores de stock agotado (`450` / `out_of_stock`) para mostrar al usuario el mensaje devuelto por backend.
3
+ - Checkout single: al seleccionar método de envío con `/shipping-option`, si backend responde falta de stock, se muestra feedback y no se avanza al siguiente paso.
4
+ - Checkout single: al seleccionar método de pago con `/payment/{method}`, si backend responde falta de stock, se notifica al usuario y no queda persistido el método seleccionado.
5
+ - Checkout legacy: selección de envío y contrato ahora notifican errores de stock en lugar de fallar silenciosamente.
6
+ - Finalización de checkout: `/complete` queda preparado para mostrar el mensaje de falta de stock cuando backend devuelva `out_of_stock`, evitando duplicar toasts en los componentes.
7
+ - `PaymentService.putPayment` vuelve a propagar el error HTTP original para que los componentes puedan interpretar correctamente el payload del backend.
8
+ - Se agregan tests focalizados para el manejo de `out_of_stock` en checkout service, envío y pago.
1
9
  # Version 0.6.9
2
10
  - Categorías: `OptionsService.getCategories()` ahora expone solo taxons visibles (`isVisible !== false`) para menús, footer y filtros, filtrando recursivamente hijos ocultos.
3
11
  - Categorías ocultas: se conserva internamente el árbol completo de taxons para que los deep links a `/collection/categories/{slug}` sigan resolviendo el `code` y consultando productos al backend.
@@ -139,6 +139,7 @@ export class PaymentEcComponent {
139
139
  this._toastService.show('this-payment-method-cannot-be-used');
140
140
  return;
141
141
  }
142
+ const previousMethod = this.currentMethod;
142
143
  this._methodDataSubject.next(null);
143
144
  this.showMethodError = false;
144
145
  this.loadingInternal = true;
@@ -170,6 +171,12 @@ export class PaymentEcComponent {
170
171
  }
171
172
  this._methodDataSubject.next(method);
172
173
  }
174
+ catch (error) {
175
+ this._checkoutService.notifyCheckoutError(error);
176
+ this.selectedMethodCode = this.lastSavedMethodCode;
177
+ this._methodDataSubject.next(previousMethod);
178
+ this.setDirtyState(false);
179
+ }
173
180
  finally {
174
181
  this.loadingInternal = false;
175
182
  this.validatingMethodCode = null;
@@ -235,7 +242,7 @@ export class PaymentEcComponent {
235
242
  this._router.navigate(['checkout/order_success']);
236
243
  }
237
244
  else {
238
- this._toastService.show('operation-error');
245
+ !res?.notified && this._toastService.show(res?.message || 'operation-error');
239
246
  this.autoCompleting = false;
240
247
  }
241
248
  }, () => {
@@ -317,6 +324,7 @@ export class PaymentEcComponent {
317
324
  this.balanceMethodRejected = false;
318
325
  this.validatingMethodCode = null;
319
326
  this._paymentService.putPayment(savedCode)
327
+ .catch(error => this._checkoutService.notifyCheckoutError(error))
320
328
  .finally(() => {
321
329
  this.suppressDirty = false;
322
330
  this.setDirtyState(false);
@@ -373,4 +381,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
373
381
  }], dirtyChange: [{
374
382
  type: Output
375
383
  }] } });
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jaGVja291dC1lYy9wYXltZW50LWVjL3BheW1lbnQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN4RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0JBQW9C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SUFBSSxDQUFDLENBQ3ZCLENBQUM7SUFDSCxDQUFDLENBQUE7d0dBdFhXLGtCQUFrQjs0RkFBbEIsa0JBQWtCLHlLQzlCL0IsK25nQkE0U0EsMHpIRHhSRSxTQUFTLDZDQUNULFlBQVksK1BBQ1osZUFBZSw0RkFDZix3QkFBd0Isb0ZBQ3hCLHFCQUFxQixrSUFDckIsdUJBQXVCLGlJQUN2QixrQkFBa0IsMkhBQ2xCLGtCQUFrQjs7NEZBR1Asa0JBQWtCO2tCQWhCOUIsU0FBUzsrQkFDQyxnQkFBZ0IsY0FDZCxJQUFJLFdBR1A7d0JBQ1IsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixxQkFBcUI7d0JBQ3JCLHVCQUF1Qjt3QkFDdkIsa0JBQWtCO3dCQUNsQixrQkFBa0I7cUJBQ2xCO3dEQVdRLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UsIFBheW1lbnRTZXJ2aWNlLCBDYXJ0U2VydmljZSwgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3dpZGdldHMtZWMnO1xuaW1wb3J0IHsgTXBSZWRpcmVjdEVjQ29tcG9uZW50LCBPZmZsaW5lRWNDb21wb25lbnQgfSBmcm9tICcuL3BheW1lbnQtbWV0aG9kcyc7XG5pbXBvcnQgeyBCYW5rVHJhbnNmZXJFY0NvbXBvbmVudCB9IGZyb20gJy4vcGF5bWVudC1tZXRob2RzL2JhbmstdHJhbnNmZXItZWMvYmFuay10cmFuc2Zlci1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVjaWRpckVjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vd2lkZ2V0cy1lYy9kZWNpZGlyLWVjL2RlY2lkaXItZWMuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLXBheW1lbnQtZWMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZVVybDogJy4vcGF5bWVudC1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3BheW1lbnQtZWMuY29tcG9uZW50LnNjc3MnXSxcblx0aW1wb3J0czogW1xuXHRcdEFzeW5jUGlwZSxcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0VHJhbnNsYXRlTW9kdWxlLFxuXHRcdExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCxcblx0XHRNcFJlZGlyZWN0RWNDb21wb25lbnQsXG5cdFx0QmFua1RyYW5zZmVyRWNDb21wb25lbnQsXG5cdFx0T2ZmbGluZUVjQ29tcG9uZW50LFxuXHRcdERlY2lkaXJFY0NvbXBvbmVudFxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIFBheW1lbnRFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHB1YmxpYyBfcGF5bWVudFNlcnZpY2U6IFBheW1lbnRTZXJ2aWNlID0gaW5qZWN0KFBheW1lbnRTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UgPSBpbmplY3QoQ2hlY2tvdXRTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbnByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5wcml2YXRlIF9jb25zdHMgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xucHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cblx0QElucHV0KCkgY29tcGFjdFBheW1lbnRWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cdEBPdXRwdXQoKSBkaXJ0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuXHRwcml2YXRlIF9tZXRob2REYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblx0cHJpdmF0ZSBfbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuXHRwdWJsaWMgbWV0aG9kcyQgPSB0aGlzLl9wYXltZW50U2VydmljZS5tZXRob2RzJDtcblx0cHVibGljIG1ldGhvZHNMb2FkaW5nJCA9IHRoaXMuX3BheW1lbnRTZXJ2aWNlLm1ldGhvZHNMb2FkaW5nJDtcblx0cHVibGljIGxvYWRpbmckID0gdGhpcy5fbG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHB1YmxpYyBsb2FkaW5nU3RlcCQgPSB0aGlzLl9jaGVja291dFNlcnZpY2UubG9hZGluZ1N0ZXAkO1xuXHRwdWJsaWMgbWV0aG9kRGF0YSQgPSB0aGlzLl9tZXRob2REYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuXHRwdWJsaWMgbG9hZGluZ0ludGVybmFsOiBib29sZWFuID0gZmFsc2U7XG5cdHB1YmxpYyB0b3RhbF9hbW91bnQ6IG51bWJlciA9IDA7XG5cdHB1YmxpYyBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblx0cHVibGljIGJhbGFuY2VNZXRob2RSZWplY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgc2hvd01ldGhvZEVycm9yOiBib29sZWFuID0gZmFsc2U7XG5cdHB1YmxpYyBzZWxlY3RlZE1ldGhvZENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRwdWJsaWMgY3VycmVudE1ldGhvZDogYW55ID0gbnVsbDtcblx0cHVibGljIHZhbGlkYXRpbmdNZXRob2RDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHVibGljIHBheW1lbnRMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIHBheW1lbnRNZXRob2RzOiBhbnlbXSA9IFtdO1xuXHRwcml2YXRlIGJhbGFuY2VDdXN0b21lcjogYW55ID0gbnVsbDtcblx0cHJpdmF0ZSBhdXRvQ29tcGxldGluZyA9IGZhbHNlO1xuXHRwcml2YXRlIGxhc3RTYXZlZE1ldGhvZENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGxhc3RBZGRyZXNzS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBpc0RpcnR5ID0gZmFsc2U7XG5cdHByaXZhdGUgc3VwcHJlc3NEaXJ0eSA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKCkgeyB9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0aWYgKCF0aGlzLmNvbXBhY3RQYXltZW50Vmlldykge1xuXHRcdFx0dGhpcy5fcGF5bWVudFNlcnZpY2UuZ2V0UGF5bWVudE1ldGhvZHMoKTtcblx0XHR9XG5cblx0XHR0aGlzLl9jaGVja291dFNlcnZpY2UuYXNzb2NpYXRlZERhdGEkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKChkYXRhOiBDaGVja291dERhdGFbXSkgPT4ge1xuXHRcdFx0XHRjb25zdCB0b3RhbEl0ZW0gPSBkYXRhPy5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09ICd0b3RhbCcpO1xuXHRcdFx0XHR0aGlzLnRvdGFsX2Ftb3VudCA9IHRvdGFsSXRlbT8uYW1vdW50ID8/IDA7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX2NhcnRTZXJ2aWNlLmFsbG93QW55UGF5bWVudE1ldGhvZCRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuXHRcdFx0XHR0aGlzLmFsbG93QW55UGF5bWVudE1ldGhvZCA9IHZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9jYXJ0U2VydmljZS5iYWxhbmNlQ3VzdG9tZXIkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKGJhbGFuY2UgPT4ge1xuXHRcdFx0XHR0aGlzLmJhbGFuY2VDdXN0b21lciA9IGJhbGFuY2U7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMubWV0aG9kcyRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUobWV0aG9kcyA9PiB7XG5cdFx0XHRcdHRoaXMucGF5bWVudE1ldGhvZHMgPSBtZXRob2RzIHx8IFtdO1xuXHRcdFx0XHRpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcgJiYgdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlICYmICF0aGlzLmN1cnJlbnRNZXRob2QpIHtcblx0XHRcdFx0XHR0aGlzLnNldFNhdmVkTWV0aG9kQ29kZSh0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMubWV0aG9kRGF0YSRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUobWV0aG9kID0+IHtcblx0XHRcdFx0dGhpcy5jdXJyZW50TWV0aG9kID0gbWV0aG9kO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9jaGVja291dFNlcnZpY2Uuc3RhdGUkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKHN0ZXBzID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmNvbXBhY3RQYXltZW50VmlldykgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBoYXNTaGlwbWVudFN0ZXAgPSBzdGVwcz8uc29tZSgoc3RlcDogYW55KSA9PiBzdGVwLm5hbWUgPT09ICdzaGlwbWVudCcpO1xuXHRcdFx0XHR0aGlzLnBheW1lbnRMb2NrZWQgPSAhIWhhc1NoaXBtZW50U3RlcCAmJiAhdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpO1xuXHRcdFx0XHRpZiAoIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgncGF5bWVudCcpKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTYXZlZE1ldGhvZENvZGUobnVsbCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHN0ZXBEYXRhOiBhbnkgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3BheW1lbnQnIGFzIGFueSk7XG5cdFx0XHRcdGNvbnN0IGNvZGUgPSBzdGVwRGF0YT8uY29kZSB8fCBzdGVwRGF0YT8ubWV0aG9kPy5jb2RlIHx8IHN0ZXBEYXRhPy5tZXRob2RfY29kZSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoY29kZSAmJiB0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUgIT09IGNvZGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldFNhdmVkTWV0aG9kQ29kZShjb2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHtcblx0XHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5zdGF0ZSRcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhZGRyZXNzRGF0YSA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuXHRcdFx0XHRcdGlmICghYWRkcmVzc0RhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMubGFzdEFkZHJlc3NLZXkgPSBudWxsO1xuXHRcdFx0XHRcdFx0dGhpcy5fcGF5bWVudFNlcnZpY2Uuc2V0TWV0aG9kcyhbXSk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFNhdmVkTWV0aG9kQ29kZShudWxsKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0RhdGEpO1xuXHRcdFx0XHRcdGlmICh0aGlzLmxhc3RBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcblx0XHRcdFx0XHR0aGlzLmxhc3RBZGRyZXNzS2V5ID0ga2V5O1xuXHRcdFx0XHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLnNldE1ldGhvZHMoW10pO1xuXHRcdFx0XHRcdHRoaXMuc2V0U2F2ZWRNZXRob2RDb2RlKG51bGwpO1xuXHRcdFx0XHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLmdldFBheW1lbnRNZXRob2RzKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHNldEFjdGl2ZSgkZXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IHBhcmVudCA9ICRldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5jaGlsZHJlbjtcblx0XHRmb3IgKGNvbnN0IGJ1dHRvbiBvZiBwYXJlbnQpIHtcblx0XHRcdGlmIChidXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xuXHRcdFx0XHRidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCRldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG5cdH1cblxuXHRhc3luYyBzZXRNZXRob2QobWV0aG9kOiBhbnkpIHtcblx0XHRpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcgJiYgdGhpcy5zZWxlY3RlZE1ldGhvZENvZGUgPT09IG1ldGhvZD8uY29kZSAmJiAhdGhpcy5sb2FkaW5nSW50ZXJuYWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMucGF5bWVudExvY2tlZCkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3NoaXBtZW50LW1ldGhvZC1yZXF1aXJlZCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jb21wYWN0UGF5bWVudFZpZXcgJiYgdGhpcy5pc1BheW1lbnRNZXRob2REaXNhYmxlZChtZXRob2QpKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygndGhpcy1wYXltZW50LW1ldGhvZC1jYW5ub3QtYmUtdXNlZCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XG5cdFx0dGhpcy5zaG93TWV0aG9kRXJyb3IgPSBmYWxzZTtcblx0XHR0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IHRydWU7XG5cdFx0dGhpcy52YWxpZGF0aW5nTWV0aG9kQ29kZSA9IG1ldGhvZD8uY29kZSB8fCBudWxsO1xuXHRcdHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gbWV0aG9kPy5jb2RlIHx8IG51bGw7XG5cdFx0dGhpcy5ldmFsdWF0ZURpcnR5Rm9yU2VsZWN0aW9uKG1ldGhvZD8uY29kZSB8fCBudWxsKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9wYXltZW50U2VydmljZS5wdXRQYXltZW50KG1ldGhvZC5jb2RlKTtcblx0XHRcdGNvbnN0IGJhbGFuY2VDdXN0b21lciA9IHJlc3VsdD8uYmFsYW5jZUN1c3RvbWVyO1xuXHRcdFx0Y29uc3QgdG90YWxzID0gcmVzdWx0Py50b3RhbHM7XG5cblx0XHRcdHRoaXMuX2NhcnRTZXJ2aWNlLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2VDdXN0b21lciwgdG90YWxzPy50b3RhbCk7XG5cblx0XHRcdGNvbnN0IGlzQmFsYW5jZU1ldGhvZCA9IHRoaXMuaXNCYWxhbmNlSW5BY2NvdW50KG1ldGhvZC5jb2RlKTtcblx0XHRcdGNvbnN0IGFsbG93QW55ID0gYmFsYW5jZUN1c3RvbWVyPy5hbGxvd0FueVBheW1lbnRNZXRob2Q7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0KGJhbGFuY2VDdXN0b21lciAmJiBhbGxvd0FueSA9PT0gZmFsc2UgJiYgIWlzQmFsYW5jZU1ldGhvZCkgfHxcblx0XHRcdFx0KGlzQmFsYW5jZU1ldGhvZCAmJiAhYmFsYW5jZUN1c3RvbWVyKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlTWV0aG9kRXJyb3IoJ3RoaXMtcGF5bWVudC1tZXRob2QtY2Fubm90LWJlLXVzZWQnLCBtZXRob2QpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0aXNCYWxhbmNlTWV0aG9kICYmXG5cdFx0XHRcdGJhbGFuY2VDdXN0b21lciAmJlxuXHRcdFx0XHR0b3RhbHMgJiZcblx0XHRcdFx0YmFsYW5jZUN1c3RvbWVyLmFsbG93RXhjZWVkQmFsYW5jZSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0YmFsYW5jZUN1c3RvbWVyLmNyZWRpdEFtb3VudCA8IHRvdGFscy50b3RhbFxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdpbnN1ZmZpY2llbnRfY3JlZGl0Jyk7XG5cdFx0XHRcdHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaXNCYWxhbmNlTWV0aG9kKSB7XG5cdFx0XHRcdHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQobWV0aG9kKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5sb2FkaW5nSW50ZXJuYWwgPSBmYWxzZTtcblx0XHRcdHRoaXMudmFsaWRhdGluZ01ldGhvZENvZGUgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlTWV0aG9kRXJyb3IobWVzc2FnZTogc3RyaW5nLCBtZXRob2Q6IGFueSkge1xuXHRcdHRoaXMuc2hvd01ldGhvZEVycm9yID0gdHJ1ZTtcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhtZXNzYWdlKTtcblx0XHR0aGlzLl9tZXRob2REYXRhU3ViamVjdC5uZXh0KG1ldGhvZCk7XG5cdH1cblxuXHRpc1BheW1lbnRNZXRob2REaXNhYmxlZChtZXRob2Q6IGFueSkge1xuXHRcdGNvbnN0IGlzQmFsYW5jZU1ldGhvZCA9IHRoaXMuaXNCYWxhbmNlSW5BY2NvdW50KG1ldGhvZD8uY29kZSB8fCAnJyk7XG5cdFx0aWYgKHRoaXMuYmFsYW5jZUN1c3RvbWVyICYmIHRoaXMuYmFsYW5jZUN1c3RvbWVyLmFsbG93QW55UGF5bWVudE1ldGhvZCA9PT0gZmFsc2UgJiYgIWlzQmFsYW5jZU1ldGhvZCkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKCF0aGlzLmJhbGFuY2VDdXN0b21lciAmJiBpc0JhbGFuY2VNZXRob2QpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldFBheW1lbnRJbWFnZVVybCA9IChpbWFnZTogYW55KTogc3RyaW5nID0+IHtcblx0XHRjb25zdCByYXdQYXRoID0gaW1hZ2U/LnBhdGggfHwgaW1hZ2U/LnVybCB8fCBpbWFnZT8uc3JjIHx8IGltYWdlO1xuXHRcdGlmICghcmF3UGF0aCB8fCB0eXBlb2YgcmF3UGF0aCAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcblx0XHRjb25zdCBub3JtYWxpemVkUGF0aCA9IHJhd1BhdGguc3RhcnRzV2l0aCgnL21lZGlhL2ltYWdlLycpXG5cdFx0XHQ/IHJhd1BhdGgucmVwbGFjZSgnL21lZGlhL2ltYWdlLycsICcnKVxuXHRcdFx0OiByYXdQYXRoO1xuXHRcdGlmICgvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KG5vcm1hbGl6ZWRQYXRoKSkgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xuXHRcdHJldHVybiB0aGlzLl9jb25zdHMubWVkaWFVcmwoKSArIG5vcm1hbGl6ZWRQYXRoO1xuXHR9XG5cblx0Z2V0VmlzaWJsZUltYWdlcyA9IChpbWFnZXM6IGFueVtdID0gW10pID0+IGltYWdlcy5zbGljZSgwLCBpbWFnZXMubGVuZ3RoID4gNCA/IDMgOiA0KTtcblx0Z2V0SGlkZGVuSW1hZ2VzID0gKGltYWdlczogYW55W10gPSBbXSkgPT4gKGltYWdlcy5sZW5ndGggPiA0ID8gaW1hZ2VzLnNsaWNlKDMpIDogW10pO1xuXHRnZXRIaWRkZW5JbWFnZVRpdGxlcyA9IChpbWFnZXM6IGFueVtdID0gW10pID0+IHRoaXMuZ2V0SGlkZGVuSW1hZ2VzKGltYWdlcykubWFwKGltZyA9PiBpbWc/Lm5hbWUgfHwgJycpLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XG5cdHNob3VsZFNob3dOb1BheW1lbnRNZXRob2RzKG1ldGhvZHM6IGFueVtdID0gW10pIHtcblx0XHRyZXR1cm4gIW1ldGhvZHMubGVuZ3RoICYmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcgfHwgISF0aGlzLmxhc3RBZGRyZXNzS2V5KTtcblx0fVxuXG5cdGFsbERhdGEoKTogYW55IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4udGhpcy5fcGF5bWVudFNlcnZpY2UuZ2V0VXNlckRhdGEoKS5zaGlwcGluZ0FkZHJlc3MsXG5cdFx0XHQuLi50aGlzLl9wYXltZW50U2VydmljZS5nZXRTaGlwbWVudERhdGEoKSxcblx0XHR9O1xuXHR9XG5cblx0ZW1pdFJlc3VsdCA9IGFzeW5jICgpID0+IHtcblx0XHRjb25zdCBtZXRob2REYXRhID0gdGhpcy5fbWV0aG9kRGF0YVN1YmplY3QuZ2V0VmFsdWUoKTtcblx0XHRjb25zdCBhdXRvQ29tcGxldGUgPSB0aGlzLmNvbXBhY3RQYXltZW50VmlldyAmJiB0aGlzLmlzQXV0b0NvbXBsZXRlTWV0aG9kKG1ldGhvZERhdGEpO1xuXHRcdGNvbnN0IHN0ZXBEYXRhID0gbWV0aG9kRGF0YSA/IHsgLi4ubWV0aG9kRGF0YSwgYXV0b0NvbXBsZXRlIH0gOiBtZXRob2REYXRhO1xuXHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLnNldFBheW1lbnQoc3RlcERhdGEpO1xuXHRcdHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG5cdFx0dGhpcy5zZXRTYXZlZE1ldGhvZENvZGUobWV0aG9kRGF0YT8uY29kZSB8fCBudWxsKTtcblx0XHRpZiAoIXRoaXMuY29tcGFjdFBheW1lbnRWaWV3KSB7XG5cdFx0XHR0aGlzLm5leHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGF1dG9Db21wbGV0ZSkge1xuXHRcdFx0dGhpcy5maW5hbGl6ZUNoZWNrb3V0RnJvbVBheW1lbnQoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGZpbmFsaXplQ2hlY2tvdXRGcm9tUGF5bWVudCgpIHtcblx0XHRpZiAodGhpcy5hdXRvQ29tcGxldGluZykgcmV0dXJuO1xuXHRcdHRoaXMuYXV0b0NvbXBsZXRpbmcgPSB0cnVlO1xuXHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5jb21wbGV0ZSgpLnRoZW4oXG5cdFx0XHRyZXMgPT4ge1xuXHRcdFx0XHRpZiAocmVzPy5vaykge1xuXHRcdFx0XHRcdHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpO1xuXHRcdFx0XHRcdHRoaXMuYXV0b0NvbXBsZXRpbmcgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpO1xuXHRcdFx0XHR0aGlzLmF1dG9Db21wbGV0aW5nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRMb2FkaW5nID0gKGVzdGFkbyA9IHRydWUpID0+IHtcblx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KGVzdGFkbyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgdmVyaWZ5VmFsaWRhdGUgPSAoJGV2ZW50OiBhbnkgPSB0cnVlKSA9PiB7XG5cdFx0aWYgKHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkKSB7XG5cdFx0XHR0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoJGV2ZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lbWl0UmVzdWx0KCksIDEwMDApO1xuXHR9XG5cblx0cHVibGljIG5leHQgPSAoKSA9PiB7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLm5leHQoKTtcblx0fVxuXG5cdHB1YmxpYyBnb0JhY2sgPSAoKSA9PiB7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmJhY2soKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2F2ZWRNZXRob2RDb2RlKGNvZGU6IHN0cmluZyB8IG51bGwpIHtcblx0XHR0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUgPSBjb2RlO1xuXHRcdHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gY29kZTtcblx0XHRpZiAoIWNvZGUpIHtcblx0XHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XG5cdFx0XHR0aGlzLmN1cnJlbnRNZXRob2QgPSBudWxsO1xuXHRcdFx0dGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc2F2ZWRNZXRob2QgPSB0aGlzLnBheW1lbnRNZXRob2RzLmZpbmQobWV0aG9kID0+IG1ldGhvZC5jb2RlID09PSBjb2RlKSB8fCB0aGlzLmN1cnJlbnRNZXRob2Q7XG5cdFx0aWYgKHNhdmVkTWV0aG9kKSB7XG5cdFx0XHR0aGlzLl9tZXRob2REYXRhU3ViamVjdC5uZXh0KHNhdmVkTWV0aG9kKTtcblx0XHRcdHRoaXMuY3VycmVudE1ldGhvZCA9IHNhdmVkTWV0aG9kO1xuXHRcdH1cblx0XHR0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXREaXJ0eVN0YXRlKG5leHREaXJ0eTogYm9vbGVhbikge1xuXHRcdGlmICh0aGlzLmlzRGlydHkgPT09IG5leHREaXJ0eSkgcmV0dXJuO1xuXHRcdHRoaXMuaXNEaXJ0eSA9IG5leHREaXJ0eTtcblx0XHR0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5pc0RpcnR5KTtcblx0fVxuXG5cdHByaXZhdGUgZXZhbHVhdGVEaXJ0eUZvclNlbGVjdGlvbihjb2RlOiBzdHJpbmcgfCBudWxsKSB7XG5cdFx0aWYgKHRoaXMuc3VwcHJlc3NEaXJ0eSkgcmV0dXJuO1xuXHRcdGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHJldHVybjtcblx0XHRpZiAoIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgncGF5bWVudCcpKSB7XG5cdFx0XHR0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIWNvZGUgfHwgIXRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSkge1xuXHRcdFx0dGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zZXREaXJ0eVN0YXRlKGNvZGUgIT09IHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSk7XG5cdH1cblxuXHRwdWJsaWMgZGlzY2FyZENoYW5nZXMoKSB7XG5cdFx0aWYgKCF0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUpIHtcblx0XHRcdHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3VwcHJlc3NEaXJ0eSA9IHRydWU7XG5cdFx0Y29uc3Qgc2F2ZWRDb2RlID0gdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlO1xuXHRcdHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gc2F2ZWRDb2RlO1xuXHRcdGNvbnN0IHNhdmVkTWV0aG9kID0gdGhpcy5wYXltZW50TWV0aG9kcy5maW5kKG1ldGhvZCA9PiBtZXRob2QuY29kZSA9PT0gc2F2ZWRDb2RlKSB8fCBudWxsO1xuXHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQoc2F2ZWRNZXRob2QpO1xuXHRcdHRoaXMuY3VycmVudE1ldGhvZCA9IHNhdmVkTWV0aG9kO1xuXHRcdHRoaXMuc2hvd01ldGhvZEVycm9yID0gZmFsc2U7XG5cdFx0dGhpcy5iYWxhbmNlTWV0aG9kUmVqZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLnZhbGlkYXRpbmdNZXRob2RDb2RlID0gbnVsbDtcblx0XHR0aGlzLl9wYXltZW50U2VydmljZS5wdXRQYXltZW50KHNhdmVkQ29kZSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5zdXBwcmVzc0RpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGlzUmVkaXJlY3RSZWRzeXMgPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3JlZHN5c19yZWRpcmVjdCcpO1xuXHRpc1JlZGlyZWN0Q2VjYUJhbmsgPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NlY2FfYmFua19yZWRpcmVjdCcpO1xuXHRpc01QID0gKGNvZGU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IGxvd2VyQ29kZSA9IGNvZGU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cdFx0cmV0dXJuIGxvd2VyQ29kZS5pbmNsdWRlcygnbWVyY2Fkb19wYWdvJykgJiYgIWxvd2VyQ29kZS5pbmNsdWRlcygnY3JlZGl0Jyk7XG5cdH1cblx0aXNNUFRhcmpldGFEZUNyZWRpdG8gPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NyZWRpdCcpO1xuXHRpc01ldGhvZE9mZmxpbmUgPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ29mZmxpbmUnKTtcblx0aXNQZXlQYWxFeHByZXNzID0gKGNvZGU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IGxvd2VyQ29kZSA9IGNvZGU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cdFx0cmV0dXJuIGxvd2VyQ29kZS5pbmNsdWRlcygncGF5cGFsJykgJiYgbG93ZXJDb2RlLmluY2x1ZGVzKCdleHByZXNzJyk7XG5cdH1cblx0aXNNb2JiZXggPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ21vYmJleCcpO1xuXHRpc0JhbmNhcmQgPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2JhbmNhcmQnKTtcblx0aXNEZWNpZGlyID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkZWNpZGlyJyk7XG5cdGlzQ3VscWkgPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2N1bHFpJyk7XG5cdGlzQmFua1RyYW5zZmVyID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYW5rX3RyYW5zZmVyJyk7XG5cdGlzQ2F0YXN0cm8gPSAoY29kZTogc3RyaW5nKSA9PiAhIWNvZGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NhdGFzdHJvJyk7XG5cdGlzQmFtYm9vID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYW1ib28nKTtcblx0aXNQbGFjZVRvUGF5ID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdwbGFjZV90b19wYXknKTtcblx0aXNCYWxhbmNlSW5BY2NvdW50ID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYWxhbmNlX2luX2FjY291bnQnKTtcblxuXHRwcml2YXRlIGlzQXV0b0NvbXBsZXRlTWV0aG9kID0gKG1ldGhvZDogYW55KSA9PiB7XG5cdFx0aWYgKCFtZXRob2Q/LmNvZGUpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCBjb2RlID0gbWV0aG9kLmNvZGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaXNNUChjb2RlKSB8fFxuXHRcdFx0dGhpcy5pc1JlZGlyZWN0UmVkc3lzKGNvZGUpIHx8XG5cdFx0XHR0aGlzLmlzUmVkaXJlY3RDZWNhQmFuayhjb2RlKSB8fFxuXHRcdFx0dGhpcy5pc1BleVBhbEV4cHJlc3MoY29kZSkgfHxcblx0XHRcdHRoaXMuaXNQbGFjZVRvUGF5KGNvZGUpXG5cdFx0KTtcblx0fVxufVxuIiwiQGlmKG1ldGhvZHMkIHwgYXN5bmM7IGFzIG1ldGhvZHMpe1xuQGlmKGNvbXBhY3RQYXltZW50Vmlldyl7XG5AaWYobWV0aG9kc0xvYWRpbmckIHwgYXN5bmMpe1xuPGRpdiBjbGFzcz1cInBheW1lbnQtY29tcGFjdCBwYXltZW50LWNvbXBhY3QtZmxhdCBwYXltZW50LXN0ZXAtc3VyZmFjZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS00XCI+XG4gICAgICAgICAgICA8YXBwLWxvYWRpbmctaW5saW5lLWVjPjwvYXBwLWxvYWRpbmctaW5saW5lLWVjPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBtdC0yXCI+e3sgJ2xvYWRpbmcnIHwgdHJhbnNsYXRlIH19Li4uPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxufSBAZWxzZSBpZihtZXRob2RzLmxlbmd0aCl7XG48ZGl2IGNsYXNzPVwicGF5bWVudC1jb21wYWN0IHBheW1lbnQtY29tcGFjdC1mbGF0IHBheW1lbnQtc3RlcC1zdXJmYWNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICBAaWYocGF5bWVudExvY2tlZCl7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWxvY2stbWVzc2FnZVwiPnt7ICdzaGlwbWVudC1tZXRob2QtcmVxdWlyZWQnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cInBheW1lbnQtb3B0aW9uc1wiIFtjbGFzcy5pcy1sb2NrZWRdPVwicGF5bWVudExvY2tlZFwiPlxuICAgICAgICAgICAgQGZvcihtZXRob2Qgb2YgbWV0aG9kczsgdHJhY2sgJGluZGV4KXtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBheW1lbnQtb3B0aW9uXCIgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkTWV0aG9kQ29kZSA9PT0gbWV0aG9kLmNvZGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCJpc1BheW1lbnRNZXRob2REaXNhYmxlZChtZXRob2QpXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGF5bWVudC1vcHRpb24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwicGF5bWVudC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZE1ldGhvZENvZGUgPT09IG1ldGhvZC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBheW1lbnRMb2NrZWQgfHwgaXNQYXltZW50TWV0aG9kRGlzYWJsZWQobWV0aG9kKVwiIChjbGljayk9XCJzZXRNZXRob2QobWV0aG9kKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGF5bWVudC1vcHRpb24tdGl0bGVcIj57eyBtZXRob2QubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYobWV0aG9kLmltYWdlcz8ubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBheW1lbnQtb3B0aW9uLWxvZ29zXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IobG9nbyBvZiBnZXRWaXNpYmxlSW1hZ2VzKG1ldGhvZC5pbWFnZXMpOyB0cmFjayAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwicGF5bWVudC1vcHRpb24tbG9nb1wiIFtzcmNdPVwiZ2V0UGF5bWVudEltYWdlVXJsKGxvZ28pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwibG9nbz8ubmFtZSB8fCAobWV0aG9kLm5hbWUgfHwgJycpXCIgW3RpdGxlXT1cImxvZ28/Lm5hbWUgfHwgKG1ldGhvZC5uYW1lIHx8ICcnKVwiPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZihtZXRob2QuaW1hZ2VzLmxlbmd0aCA+IDQpe1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBheW1lbnQtb3B0aW9uLW1vcmVcIiBbYXR0ci50aXRsZV09XCJnZXRIaWRkZW5JbWFnZVRpdGxlcyhtZXRob2QuaW1hZ2VzKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgK3t7IG1ldGhvZC5pbWFnZXMubGVuZ3RoIC0gMyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXltZW50LXRvb2x0aXAtbG9nb3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yKGxvZ28gb2YgZ2V0SGlkZGVuSW1hZ2VzKG1ldGhvZC5pbWFnZXMpOyB0cmFjayAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwYXltZW50LXRvb2x0aXAtbG9nb1wiIFtzcmNdPVwiZ2V0UGF5bWVudEltYWdlVXJsKGxvZ28pXCIgW2FsdF09XCJsb2dvPy5uYW1lIHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIEBpZihzZWxlY3RlZE1ldGhvZENvZGUgPT09IG1ldGhvZC5jb2RlKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LW9wdGlvbi1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgQGlmKHZhbGlkYXRpbmdNZXRob2RDb2RlID09PSBtZXRob2QuY29kZSl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYoIXNob3dNZXRob2RFcnJvciAmJiBjdXJyZW50TWV0aG9kPy5jb2RlID09PSBtZXRob2QuY29kZSl7XG4gICAgICAgICAgICAgICAgQGlmKGlzTVAobWV0aG9kLmNvZGUpKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgaWQ9XCJmYXFzXCIgY2xhc3M9XCJxdCBweC01IFwiPnt7IG1ldGhvZC5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJweC01XCI+e3sgbWV0aG9kLmluc3RydWN0aW9ucyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1tcC1yZWRpcmVjdC1lYyAocmVhZHkpPVwidmVyaWZ5VmFsaWRhdGUoJGV2ZW50KVwiIFttZXRob2RdPVwibWV0aG9kXCIgW2FsbERhdGFdPVwiYWxsRGF0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLW1wLXJlZGlyZWN0LWVjPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYoaXNEZWNpZGlyKG1ldGhvZC5jb2RlKSl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrIHRleHQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWRlY2lkaXItZWMgKHJlYWR5KT1cInZlcmlmeVZhbGlkYXRlKCRldmVudClcIiBbbWV0aG9kXT1cIm1ldGhvZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlcl9kYXRhXT1cImFsbERhdGEoKVwiIFtwYXltZW50U2VydmljZUluc3RdPVwiX3BheW1lbnRTZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbF9hbW91bnRdPVwidG90YWxfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWRlY2lkaXItZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZihpc01ldGhvZE9mZmxpbmUobWV0aG9kLmNvZGUpKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtb2ZmbGluZS1lYyBbbWV0aG9kXT1cIm1ldGhvZFwiIFt2ZXJpZnlWYWxpZGF0ZV09XCJ2ZXJpZnlWYWxpZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXRMb2FkaW5nXT1cInNldExvYWRpbmdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYoaXNCYW5rVHJhbnNmZXIobWV0aG9kLmNvZGUpKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYmFuay10cmFuc2Zlci1lYyBbbWV0aG9kXT1cIm1ldGhvZFwiIFt2ZXJpZnlWYWxpZGF0ZV09XCJ2ZXJpZnlWYWxpZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXRMb2FkaW5nXT1cInNldExvYWRpbmdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmKHNob3dNZXRob2RFcnJvcil7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTIgcHgtMyBmdy1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICd0aGlzLXBheW1lbnQtbWV0aG9kLWNhbm5vdC1iZS11c2VkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYoaXNCYWxhbmNlSW5BY2NvdW50KG1ldGhvZC5jb2RlKSAmJiAhc2hvd01ldGhvZEVycm9yICYmIGN1cnJlbnRNZXRob2Q/LmNvZGUgPT09IG1ldGhvZC5jb2RlKXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0wIGRlc2NyaXB0aW9uLWNvbnRcIiAqbmdJZj1cIm1ldGhvZC5kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluZSBvZiBtZXRob2QuZGVzY3JpcHRpb24uc3BsaXQoJ1xcclxcbicpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW2lkXT1cIidjYy1kZXNjLScraVwiIFtjbGFzc109XCIncXQgcHgtNSBtLTAgbGluZS0nK2lcIj57eyBsaW5lIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aHIgKm5nSWY9XCJtZXRob2QuaW5zdHJ1Y3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZXRob2QuaW5zdHJ1Y3Rpb25zXCIgY2xhc3M9XCJyb3cgcHgtMCBpbnN0cnVjdGlvbnMtY29udCBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJpbnN0cnVjdGlvbnMtdGl0bGVcIj57eyAoJ2luc3RydWN0aW9ucycgfCB0cmFuc2xhdGUpIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmUgb2YgbWV0aG9kLmluc3RydWN0aW9ucy5zcGxpdCgnXFxyXFxuJyk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBbY2xhc3NdPVwiJ3B4LTUgbS0wIGluc3RydWN0aW9ucy10ZXh0IGxpbmUtJytpIFwiPnt7IGxpbmUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFiYWxhbmNlTWV0aG9kUmVqZWN0ZWQ7IGVsc2Ugc2hvd0NyZWRpdEVycm9yQ29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuZC1idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGNvbXByYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGxvYWRpbmckIHwgYXN5bmMpIHx8IChsb2FkaW5nU3RlcCQgfCBhc3luYykgfHwgbG9hZGluZ0ludGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldExvYWRpbmcoKSAmJiB2ZXJpZnlWYWxpZGF0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwYXktd2l0aCcgfCB0cmFuc2xhdGUgfX0ge3sgbWV0aG9kLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dDcmVkaXRFcnJvckNvbXBhY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMiBweC0zIGZ3LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnbm90LWVub3VnaC1jcmVkaXRzLXRvLWNvbXBsZXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nJCB8IGFzeW5jKSBhcyBsb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwibG9hZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1pbmxpbmUtZWM+PC9hcHAtbG9hZGluZy1pbmxpbmUtZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxufSBAZWxzZSBpZihzaG91bGRTaG93Tm9QYXltZW50TWV0aG9kcyhtZXRob2RzKSl7XG48ZGl2IGNsYXNzPVwicGF5bWVudC1jb21wYWN0IHBheW1lbnQtY29tcGFjdC1mbGF0IHBheW1lbnQtc3RlcC1zdXJmYWNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj57eyAnbm8tcGF5bWVudC1tZXRob2RzJyB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG59XG59IEBlbHNlIHtcbjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciB0ZXh0LWRhcmsgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg0Pnt7ICdzZWxlY3QtbWV0aG9kJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIEBpZihtZXRob2RzTG9hZGluZyQgfCBhc3luYyl7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgbXQtMlwiPnt7ICdsb2FkaW5nJyB8IHRyYW5zbGF0ZSB9fS4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYobWV0aG9kcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiIHJvbGU9XCJ0b29sYmFyXCIgYXJpYS1sYWJlbD1cIkVudmlvcyB0b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkdydXBvIGJvdG9uZXMgZW52aW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNvbnRlbnQtc3RhcnQganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobWV0aG9kIG9mIG1ldGhvZHM7IHRyYWNrICRpbmRleDsgbGV0IHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG14LTEgbWItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0TWV0aG9kKG1ldGhvZCkgOyBzZXRBY3RpdmUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWV0aG9kLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZihzaG91bGRTaG93Tm9QYXltZW50TWV0aG9kcyhtZXRob2RzKSl7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgdy0xMDAganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPnt7ICduby1wYXltZW50LW1ldGhvZHMnIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZihsb2FkaW5nSW50ZXJuYWwpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1pbmxpbmUtZWM+PC9hcHAtbG9hZGluZy1pbmxpbmUtZWM+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmKG1ldGhvZERhdGEkIHwgYXN5bmM7IGFzIG1ldGhvZCl7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKG1ldGhvZCAmJiAhc2hvd01ldGhvZEVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpc01QKG1ldGhvZC5jb2RlKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGlkPVwiZmFxc1wiIGNsYXNzPVwicXQgcHgtNSBcIj57eyBtZXRob2QuZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInB4LTVcIj57eyBtZXRob2QuaW5zdHJ1Y3Rpb25zIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1tcC1yZWRpcmVjdC1lYyAocmVhZHkpPVwidmVyaWZ5VmFsaWRhdGUoJGV2ZW50KVwiIFttZXRob2RdPVwibWV0aG9kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsRGF0YV09XCJhbGxEYXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLW1wLXJlZGlyZWN0LWVjPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrIHRleHQtc3RhcnRcIiAqbmdJZj1cImlzRGVjaWRpcihtZXRob2QuY29kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZGVjaWRpci1lYyAocmVhZHkpPVwidmVyaWZ5VmFsaWRhdGUoJGV2ZW50KVwiIFttZXRob2RdPVwibWV0aG9kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZXJfZGF0YV09XCJhbGxEYXRhKClcIiBbcGF5bWVudFNlcnZpY2VJbnN0XT1cIl9wYXltZW50U2VydmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbF9hbW91bnRdPVwidG90YWxfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtZGVjaWRpci1lYz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzTWV0aG9kT2ZmbGluZShtZXRob2QuY29kZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLW9mZmxpbmUtZWMgW21ldGhvZF09XCJtZXRob2RcIiBbdmVyaWZ5VmFsaWRhdGVdPVwidmVyaWZ5VmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXRMb2FkaW5nXT1cInNldExvYWRpbmdcIiBbbG9hZGluZyRdPVwibG9hZGluZyRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzQmFua1RyYW5zZmVyKG1ldGhvZC5jb2RlKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYmFuay10cmFuc2Zlci1lYyBbbWV0aG9kXT1cIm1ldGhvZFwiIFt2ZXJpZnlWYWxpZGF0ZV09XCJ2ZXJpZnlWYWxpZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NldExvYWRpbmddPVwic2V0TG9hZGluZ1wiIFtsb2FkaW5nJF09XCJsb2FkaW5nJFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoc2hvd01ldGhvZEVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yIHB4LTMgZnctYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICd0aGlzLXBheW1lbnQtbWV0aG9kLWNhbm5vdC1iZS11c2VkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoaXNCYWxhbmNlSW5BY2NvdW50KG1ldGhvZC5jb2RlKSAmJiAhc2hvd01ldGhvZEVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRob2QtY29udGFpbmVyIHRleHQtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMCBkZXNjcmlwdGlvbi1jb250XCIgKm5nSWY9XCJtZXRob2QuZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluZSBvZiBtZXRob2QuZGVzY3JpcHRpb24uc3BsaXQoJ1xcclxcbicpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBbaWRdPVwiJ2NjLWRlc2MtJytpXCIgW2NsYXNzXT1cIidxdCBweC01IG0tMCBsaW5lLScraVwiPnt7IGxpbmUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociAqbmdJZj1cIm1ldGhvZC5pbnN0cnVjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0aG9kLmluc3RydWN0aW9uc1wiIGNsYXNzPVwicm93IHB4LTAgaW5zdHJ1Y3Rpb25zLWNvbnQgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJpbnN0cnVjdGlvbnMtdGl0bGVcIj57eyAoJ2luc3RydWN0aW9ucycgfCB0cmFuc2xhdGUpIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluZSBvZiBtZXRob2QuaW5zdHJ1Y3Rpb25zLnNwbGl0KCdcXHJcXG4nKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW2NsYXNzXT1cIidweC01IG0tMCBpbnN0cnVjdGlvbnMtdGV4dCBsaW5lLScraSBcIj57eyBsaW5lIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYmFsYW5jZU1ldGhvZFJlamVjdGVkOyBlbHNlIHNob3dDcmVkaXRFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW5kLWJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBjb21wcmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGxvYWRpbmckIHwgYXN5bmMpIHx8IChsb2FkaW5nU3RlcCQgfCBhc3luYykgfHwgbG9hZGluZ0ludGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0TG9hZGluZygpICYmIHZlcmlmeVZhbGlkYXRlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGF5LXdpdGgnIHwgdHJhbnNsYXRlIH19IHt7IG1ldGhvZC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dDcmVkaXRFcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTIgcHgtMyBmdy1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnbm90LWVub3VnaC1jcmVkaXRzLXRvLWNvbXBsZXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nJCB8IGFzeW5jKSBhcyBsb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJsb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctaW5saW5lLWVjPjwvYXBwLWxvYWRpbmctaW5saW5lLWVjPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nSW50ZXJuYWwgfHwgKGxvYWRpbmdTdGVwJCB8IGFzeW5jKSB8fCAobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCI+e3snYmFjayd8dHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxufVxufVxuIl19
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jaGVja291dC1lYy9wYXltZW50LWVjL3BheW1lbnQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUN4RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0JBQW9C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LEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFcEYsb0JBQW9CLEdBQUcsQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sQ0FDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUN2QixDQUFDO0lBQ0gsQ0FBQyxDQUFBO3dHQTdYVyxrQkFBa0I7NEZBQWxCLGtCQUFrQix5S0M5Qi9CLCtuZ0JBNFNBLDB6SER4UkUsU0FBUyw2Q0FDVCxZQUFZLCtQQUNaLGVBQWUsNEZBQ2Ysd0JBQXdCLG9GQUN4QixxQkFBcUIsa0lBQ3JCLHVCQUF1QixpSUFDdkIsa0JBQWtCLDJIQUNsQixrQkFBa0I7OzRGQUdQLGtCQUFrQjtrQkFoQjlCLFNBQVM7K0JBQ0MsZ0JBQWdCLGNBQ2QsSUFBSSxXQUdQO3dCQUNSLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3FCQUNsQjt3REFXUSxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlLCBQYXltZW50U2VydmljZSwgQ2FydFNlcnZpY2UsIFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBMb2FkaW5nSW5saW5lRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi93aWRnZXRzLWVjJztcbmltcG9ydCB7IE1wUmVkaXJlY3RFY0NvbXBvbmVudCwgT2ZmbGluZUVjQ29tcG9uZW50IH0gZnJvbSAnLi9wYXltZW50LW1ldGhvZHMnO1xuaW1wb3J0IHsgQmFua1RyYW5zZmVyRWNDb21wb25lbnQgfSBmcm9tICcuL3BheW1lbnQtbWV0aG9kcy9iYW5rLXRyYW5zZmVyLWVjL2JhbmstdHJhbnNmZXItZWMuY29tcG9uZW50JztcbmltcG9ydCB7IERlY2lkaXJFY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3dpZGdldHMtZWMvZGVjaWRpci1lYy9kZWNpZGlyLWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja291dERhdGEgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1wYXltZW50LWVjJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGVVcmw6ICcuL3BheW1lbnQtZWMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9wYXltZW50LWVjLmNvbXBvbmVudC5zY3NzJ10sXG5cdGltcG9ydHM6IFtcblx0XHRBc3luY1BpcGUsXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdFRyYW5zbGF0ZU1vZHVsZSxcblx0XHRMb2FkaW5nSW5saW5lRWNDb21wb25lbnQsXG5cdFx0TXBSZWRpcmVjdEVjQ29tcG9uZW50LFxuXHRcdEJhbmtUcmFuc2ZlckVjQ29tcG9uZW50LFxuXHRcdE9mZmxpbmVFY0NvbXBvbmVudCxcblx0XHREZWNpZGlyRWNDb21wb25lbnRcblx0XVxufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50RWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXHRwdWJsaWMgX3BheW1lbnRTZXJ2aWNlOiBQYXltZW50U2VydmljZSA9IGluamVjdChQYXltZW50U2VydmljZSk7XG5cdHByaXZhdGUgX2NoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlID0gaW5qZWN0KENoZWNrb3V0U2VydmljZSk7XG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5wcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xucHJpdmF0ZSBfY29uc3RzID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcbnByaXZhdGUgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG5cdEBJbnB1dCgpIGNvbXBhY3RQYXltZW50VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXHRAT3V0cHV0KCkgZGlydHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblx0cHJpdmF0ZSBfbWV0aG9kRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cdHByaXZhdGUgX2xvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cblx0cHVibGljIG1ldGhvZHMkID0gdGhpcy5fcGF5bWVudFNlcnZpY2UubWV0aG9kcyQ7XG5cdHB1YmxpYyBtZXRob2RzTG9hZGluZyQgPSB0aGlzLl9wYXltZW50U2VydmljZS5tZXRob2RzTG9hZGluZyQ7XG5cdHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMuX2xvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwdWJsaWMgbG9hZGluZ1N0ZXAkID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmxvYWRpbmdTdGVwJDtcblx0cHVibGljIG1ldGhvZERhdGEkID0gdGhpcy5fbWV0aG9kRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0cHVibGljIGxvYWRpbmdJbnRlcm5hbDogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgdG90YWxfYW1vdW50OiBudW1iZXIgPSAwO1xuXHRwdWJsaWMgYWxsb3dBbnlQYXltZW50TWV0aG9kOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cdHB1YmxpYyBiYWxhbmNlTWV0aG9kUmVqZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIHNob3dNZXRob2RFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgc2VsZWN0ZWRNZXRob2RDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHVibGljIGN1cnJlbnRNZXRob2Q6IGFueSA9IG51bGw7XG5cdHB1YmxpYyB2YWxpZGF0aW5nTWV0aG9kQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHB1YmxpYyBwYXltZW50TG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBwYXltZW50TWV0aG9kczogYW55W10gPSBbXTtcblx0cHJpdmF0ZSBiYWxhbmNlQ3VzdG9tZXI6IGFueSA9IG51bGw7XG5cdHByaXZhdGUgYXV0b0NvbXBsZXRpbmcgPSBmYWxzZTtcblx0cHJpdmF0ZSBsYXN0U2F2ZWRNZXRob2RDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBsYXN0QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgaXNEaXJ0eSA9IGZhbHNlO1xuXHRwcml2YXRlIHN1cHByZXNzRGlydHkgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHsgfVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHtcblx0XHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLmdldFBheW1lbnRNZXRob2RzKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmFzc29jaWF0ZWREYXRhJFxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZSgoZGF0YTogQ2hlY2tvdXREYXRhW10pID0+IHtcblx0XHRcdFx0Y29uc3QgdG90YWxJdGVtID0gZGF0YT8uZmluZChpdGVtID0+IGl0ZW0udHlwZSA9PSAndG90YWwnKTtcblx0XHRcdFx0dGhpcy50b3RhbF9hbW91bnQgPSB0b3RhbEl0ZW0/LmFtb3VudCA/PyAwO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9jYXJ0U2VydmljZS5hbGxvd0FueVBheW1lbnRNZXRob2QkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcblx0XHRcdFx0dGhpcy5hbGxvd0FueVBheW1lbnRNZXRob2QgPSB2YWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UuYmFsYW5jZUN1c3RvbWVyJFxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZShiYWxhbmNlID0+IHtcblx0XHRcdFx0dGhpcy5iYWxhbmNlQ3VzdG9tZXIgPSBiYWxhbmNlO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLm1ldGhvZHMkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKG1ldGhvZHMgPT4ge1xuXHRcdFx0XHR0aGlzLnBheW1lbnRNZXRob2RzID0gbWV0aG9kcyB8fCBbXTtcblx0XHRcdFx0aWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSAmJiAhdGhpcy5jdXJyZW50TWV0aG9kKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTYXZlZE1ldGhvZENvZGUodGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLm1ldGhvZERhdGEkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKG1ldGhvZCA9PiB7XG5cdFx0XHRcdHRoaXMuY3VycmVudE1ldGhvZCA9IG1ldGhvZDtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLnN0YXRlJFxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZShzdGVwcyA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgaGFzU2hpcG1lbnRTdGVwID0gc3RlcHM/LnNvbWUoKHN0ZXA6IGFueSkgPT4gc3RlcC5uYW1lID09PSAnc2hpcG1lbnQnKTtcblx0XHRcdFx0dGhpcy5wYXltZW50TG9ja2VkID0gISFoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgnc2hpcG1lbnQnKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoJ3BheW1lbnQnKSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0U2F2ZWRNZXRob2RDb2RlKG51bGwpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdwYXltZW50JyBhcyBhbnkpO1xuXHRcdFx0XHRjb25zdCBjb2RlID0gc3RlcERhdGE/LmNvZGUgfHwgc3RlcERhdGE/Lm1ldGhvZD8uY29kZSB8fCBzdGVwRGF0YT8ubWV0aG9kX2NvZGUgfHwgbnVsbDtcblx0XHRcdFx0aWYgKGNvZGUgJiYgdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlICE9PSBjb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTYXZlZE1ldGhvZENvZGUoY29kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3KSB7XG5cdFx0XHR0aGlzLl9jaGVja291dFNlcnZpY2Uuc3RhdGUkXG5cdFx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYWRkcmVzc0RhdGEgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnKTtcblx0XHRcdFx0XHRpZiAoIWFkZHJlc3NEYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxhc3RBZGRyZXNzS2V5ID0gbnVsbDtcblx0XHRcdFx0XHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLnNldE1ldGhvZHMoW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRTYXZlZE1ldGhvZENvZGUobnVsbCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKTtcblx0XHRcdFx0XHRpZiAodGhpcy5sYXN0QWRkcmVzc0tleSA9PT0ga2V5KSByZXR1cm47XG5cdFx0XHRcdFx0dGhpcy5sYXN0QWRkcmVzc0tleSA9IGtleTtcblx0XHRcdFx0XHR0aGlzLl9wYXltZW50U2VydmljZS5zZXRNZXRob2RzKFtdKTtcblx0XHRcdFx0XHR0aGlzLnNldFNhdmVkTWV0aG9kQ29kZShudWxsKTtcblx0XHRcdFx0XHR0aGlzLl9wYXltZW50U2VydmljZS5nZXRQYXltZW50TWV0aG9kcygpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRzZXRBY3RpdmUoJGV2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBwYXJlbnQgPSAkZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG5cdFx0Zm9yIChjb25zdCBidXR0b24gb2YgcGFyZW50KSB7XG5cdFx0XHRpZiAoYnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcblx0XHRcdFx0YnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuXHR9XG5cblx0YXN5bmMgc2V0TWV0aG9kKG1ldGhvZDogYW55KSB7XG5cdFx0aWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID09PSBtZXRob2Q/LmNvZGUgJiYgIXRoaXMubG9hZGluZ0ludGVybmFsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNvbXBhY3RQYXltZW50VmlldyAmJiB0aGlzLnBheW1lbnRMb2NrZWQpIHtcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdzaGlwbWVudC1tZXRob2QtcmVxdWlyZWQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMuaXNQYXltZW50TWV0aG9kRGlzYWJsZWQobWV0aG9kKSkge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3RoaXMtcGF5bWVudC1tZXRob2QtY2Fubm90LWJlLXVzZWQnKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwcmV2aW91c01ldGhvZCA9IHRoaXMuY3VycmVudE1ldGhvZDtcblx0XHR0aGlzLl9tZXRob2REYXRhU3ViamVjdC5uZXh0KG51bGwpO1xuXHRcdHRoaXMuc2hvd01ldGhvZEVycm9yID0gZmFsc2U7XG5cdFx0dGhpcy5sb2FkaW5nSW50ZXJuYWwgPSB0cnVlO1xuXHRcdHRoaXMudmFsaWRhdGluZ01ldGhvZENvZGUgPSBtZXRob2Q/LmNvZGUgfHwgbnVsbDtcblx0XHR0aGlzLnNlbGVjdGVkTWV0aG9kQ29kZSA9IG1ldGhvZD8uY29kZSB8fCBudWxsO1xuXHRcdHRoaXMuZXZhbHVhdGVEaXJ0eUZvclNlbGVjdGlvbihtZXRob2Q/LmNvZGUgfHwgbnVsbCk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fcGF5bWVudFNlcnZpY2UucHV0UGF5bWVudChtZXRob2QuY29kZSk7XG5cdFx0XHRjb25zdCBiYWxhbmNlQ3VzdG9tZXIgPSByZXN1bHQ/LmJhbGFuY2VDdXN0b21lcjtcblx0XHRcdGNvbnN0IHRvdGFscyA9IHJlc3VsdD8udG90YWxzO1xuXG5cdFx0XHR0aGlzLl9jYXJ0U2VydmljZS51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhiYWxhbmNlQ3VzdG9tZXIsIHRvdGFscz8udG90YWwpO1xuXG5cdFx0XHRjb25zdCBpc0JhbGFuY2VNZXRob2QgPSB0aGlzLmlzQmFsYW5jZUluQWNjb3VudChtZXRob2QuY29kZSk7XG5cdFx0XHRjb25zdCBhbGxvd0FueSA9IGJhbGFuY2VDdXN0b21lcj8uYWxsb3dBbnlQYXltZW50TWV0aG9kO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdChiYWxhbmNlQ3VzdG9tZXIgJiYgYWxsb3dBbnkgPT09IGZhbHNlICYmICFpc0JhbGFuY2VNZXRob2QpIHx8XG5cdFx0XHRcdChpc0JhbGFuY2VNZXRob2QgJiYgIWJhbGFuY2VDdXN0b21lcilcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmhhbmRsZU1ldGhvZEVycm9yKCd0aGlzLXBheW1lbnQtbWV0aG9kLWNhbm5vdC1iZS11c2VkJywgbWV0aG9kKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzQmFsYW5jZU1ldGhvZCAmJlxuXHRcdFx0XHRiYWxhbmNlQ3VzdG9tZXIgJiZcblx0XHRcdFx0dG90YWxzICYmXG5cdFx0XHRcdGJhbGFuY2VDdXN0b21lci5hbGxvd0V4Y2VlZEJhbGFuY2UgPT09IGZhbHNlICYmXG5cdFx0XHRcdGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgPCB0b3RhbHMudG90YWxcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnaW5zdWZmaWNpZW50X2NyZWRpdCcpO1xuXHRcdFx0XHR0aGlzLmJhbGFuY2VNZXRob2RSZWplY3RlZCA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQmFsYW5jZU1ldGhvZCkge1xuXHRcdFx0XHR0aGlzLmJhbGFuY2VNZXRob2RSZWplY3RlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9tZXRob2REYXRhU3ViamVjdC5uZXh0KG1ldGhvZCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5ub3RpZnlDaGVja291dEVycm9yKGVycm9yKTtcblx0XHRcdHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlO1xuXHRcdFx0dGhpcy5fbWV0aG9kRGF0YVN1YmplY3QubmV4dChwcmV2aW91c01ldGhvZCk7XG5cdFx0XHR0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmxvYWRpbmdJbnRlcm5hbCA9IGZhbHNlO1xuXHRcdFx0dGhpcy52YWxpZGF0aW5nTWV0aG9kQ29kZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVNZXRob2RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIG1ldGhvZDogYW55KSB7XG5cdFx0dGhpcy5zaG93TWV0aG9kRXJyb3IgPSB0cnVlO1xuXHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KG1lc3NhZ2UpO1xuXHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQobWV0aG9kKTtcblx0fVxuXG5cdGlzUGF5bWVudE1ldGhvZERpc2FibGVkKG1ldGhvZDogYW55KSB7XG5cdFx0Y29uc3QgaXNCYWxhbmNlTWV0aG9kID0gdGhpcy5pc0JhbGFuY2VJbkFjY291bnQobWV0aG9kPy5jb2RlIHx8ICcnKTtcblx0XHRpZiAodGhpcy5iYWxhbmNlQ3VzdG9tZXIgJiYgdGhpcy5iYWxhbmNlQ3VzdG9tZXIuYWxsb3dBbnlQYXltZW50TWV0aG9kID09PSBmYWxzZSAmJiAhaXNCYWxhbmNlTWV0aG9kKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAoIXRoaXMuYmFsYW5jZUN1c3RvbWVyICYmIGlzQmFsYW5jZU1ldGhvZCkgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0UGF5bWVudEltYWdlVXJsID0gKGltYWdlOiBhbnkpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IHJhd1BhdGggPSBpbWFnZT8ucGF0aCB8fCBpbWFnZT8udXJsIHx8IGltYWdlPy5zcmMgfHwgaW1hZ2U7XG5cdFx0aWYgKCFyYXdQYXRoIHx8IHR5cGVvZiByYXdQYXRoICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcmF3UGF0aC5zdGFydHNXaXRoKCcvbWVkaWEvaW1hZ2UvJylcblx0XHRcdD8gcmF3UGF0aC5yZXBsYWNlKCcvbWVkaWEvaW1hZ2UvJywgJycpXG5cdFx0XHQ6IHJhd1BhdGg7XG5cdFx0aWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3Qobm9ybWFsaXplZFBhdGgpKSByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnN0cy5tZWRpYVVybCgpICsgbm9ybWFsaXplZFBhdGg7XG5cdH1cblxuXHRnZXRWaXNpYmxlSW1hZ2VzID0gKGltYWdlczogYW55W10gPSBbXSkgPT4gaW1hZ2VzLnNsaWNlKDAsIGltYWdlcy5sZW5ndGggPiA0ID8gMyA6IDQpO1xuXHRnZXRIaWRkZW5JbWFnZXMgPSAoaW1hZ2VzOiBhbnlbXSA9IFtdKSA9PiAoaW1hZ2VzLmxlbmd0aCA+IDQgPyBpbWFnZXMuc2xpY2UoMykgOiBbXSk7XG5cdGdldEhpZGRlbkltYWdlVGl0bGVzID0gKGltYWdlczogYW55W10gPSBbXSkgPT4gdGhpcy5nZXRIaWRkZW5JbWFnZXMoaW1hZ2VzKS5tYXAoaW1nID0+IGltZz8ubmFtZSB8fCAnJykuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTtcblx0c2hvdWxkU2hvd05vUGF5bWVudE1ldGhvZHMobWV0aG9kczogYW55W10gPSBbXSkge1xuXHRcdHJldHVybiAhbWV0aG9kcy5sZW5ndGggJiYgKCF0aGlzLmNvbXBhY3RQYXltZW50VmlldyB8fCAhIXRoaXMubGFzdEFkZHJlc3NLZXkpO1xuXHR9XG5cblx0YWxsRGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi50aGlzLl9wYXltZW50U2VydmljZS5nZXRVc2VyRGF0YSgpLnNoaXBwaW5nQWRkcmVzcyxcblx0XHRcdC4uLnRoaXMuX3BheW1lbnRTZXJ2aWNlLmdldFNoaXBtZW50RGF0YSgpLFxuXHRcdH07XG5cdH1cblxuXHRlbWl0UmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IG1ldGhvZERhdGEgPSB0aGlzLl9tZXRob2REYXRhU3ViamVjdC5nZXRWYWx1ZSgpO1xuXHRcdGNvbnN0IGF1dG9Db21wbGV0ZSA9IHRoaXMuY29tcGFjdFBheW1lbnRWaWV3ICYmIHRoaXMuaXNBdXRvQ29tcGxldGVNZXRob2QobWV0aG9kRGF0YSk7XG5cdFx0Y29uc3Qgc3RlcERhdGEgPSBtZXRob2REYXRhID8geyAuLi5tZXRob2REYXRhLCBhdXRvQ29tcGxldGUgfSA6IG1ldGhvZERhdGE7XG5cdFx0dGhpcy5fcGF5bWVudFNlcnZpY2Uuc2V0UGF5bWVudChzdGVwRGF0YSk7XG5cdFx0dGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcblx0XHR0aGlzLnNldFNhdmVkTWV0aG9kQ29kZShtZXRob2REYXRhPy5jb2RlIHx8IG51bGwpO1xuXHRcdGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHtcblx0XHRcdHRoaXMubmV4dCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoYXV0b0NvbXBsZXRlKSB7XG5cdFx0XHR0aGlzLmZpbmFsaXplQ2hlY2tvdXRGcm9tUGF5bWVudCgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmluYWxpemVDaGVja291dEZyb21QYXltZW50KCkge1xuXHRcdGlmICh0aGlzLmF1dG9Db21wbGV0aW5nKSByZXR1cm47XG5cdFx0dGhpcy5hdXRvQ29tcGxldGluZyA9IHRydWU7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmNvbXBsZXRlKCkudGhlbihcblx0XHRcdHJlcyA9PiB7XG5cdFx0XHRcdGlmIChyZXM/Lm9rKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnY2hlY2tvdXQvb3JkZXJfc3VjY2VzcyddKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQhcmVzPy5ub3RpZmllZCAmJiB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhyZXM/Lm1lc3NhZ2UgfHwgJ29wZXJhdGlvbi1lcnJvcicpO1xuXHRcdFx0XHRcdHRoaXMuYXV0b0NvbXBsZXRpbmcgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvcicpO1xuXHRcdFx0XHR0aGlzLmF1dG9Db21wbGV0aW5nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRMb2FkaW5nID0gKGVzdGFkbyA9IHRydWUpID0+IHtcblx0XHR0aGlzLl9sb2FkaW5nU3ViamVjdC5uZXh0KGVzdGFkbyk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgdmVyaWZ5VmFsaWRhdGUgPSAoJGV2ZW50OiBhbnkgPSB0cnVlKSA9PiB7XG5cdFx0aWYgKHRoaXMuYmFsYW5jZU1ldGhvZFJlamVjdGVkKSB7XG5cdFx0XHR0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoJGV2ZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lbWl0UmVzdWx0KCksIDEwMDApO1xuXHR9XG5cblx0cHVibGljIG5leHQgPSAoKSA9PiB7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLm5leHQoKTtcblx0fVxuXG5cdHB1YmxpYyBnb0JhY2sgPSAoKSA9PiB7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmJhY2soKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2F2ZWRNZXRob2RDb2RlKGNvZGU6IHN0cmluZyB8IG51bGwpIHtcblx0XHR0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUgPSBjb2RlO1xuXHRcdHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gY29kZTtcblx0XHRpZiAoIWNvZGUpIHtcblx0XHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQobnVsbCk7XG5cdFx0XHR0aGlzLmN1cnJlbnRNZXRob2QgPSBudWxsO1xuXHRcdFx0dGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc2F2ZWRNZXRob2QgPSB0aGlzLnBheW1lbnRNZXRob2RzLmZpbmQobWV0aG9kID0+IG1ldGhvZC5jb2RlID09PSBjb2RlKSB8fCB0aGlzLmN1cnJlbnRNZXRob2Q7XG5cdFx0aWYgKHNhdmVkTWV0aG9kKSB7XG5cdFx0XHR0aGlzLl9tZXRob2REYXRhU3ViamVjdC5uZXh0KHNhdmVkTWV0aG9kKTtcblx0XHRcdHRoaXMuY3VycmVudE1ldGhvZCA9IHNhdmVkTWV0aG9kO1xuXHRcdH1cblx0XHR0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXREaXJ0eVN0YXRlKG5leHREaXJ0eTogYm9vbGVhbikge1xuXHRcdGlmICh0aGlzLmlzRGlydHkgPT09IG5leHREaXJ0eSkgcmV0dXJuO1xuXHRcdHRoaXMuaXNEaXJ0eSA9IG5leHREaXJ0eTtcblx0XHR0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5pc0RpcnR5KTtcblx0fVxuXG5cdHByaXZhdGUgZXZhbHVhdGVEaXJ0eUZvclNlbGVjdGlvbihjb2RlOiBzdHJpbmcgfCBudWxsKSB7XG5cdFx0aWYgKHRoaXMuc3VwcHJlc3NEaXJ0eSkgcmV0dXJuO1xuXHRcdGlmICghdGhpcy5jb21wYWN0UGF5bWVudFZpZXcpIHJldHVybjtcblx0XHRpZiAoIXRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeSgncGF5bWVudCcpKSB7XG5cdFx0XHR0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIWNvZGUgfHwgIXRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSkge1xuXHRcdFx0dGhpcy5zZXREaXJ0eVN0YXRlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zZXREaXJ0eVN0YXRlKGNvZGUgIT09IHRoaXMubGFzdFNhdmVkTWV0aG9kQ29kZSk7XG5cdH1cblxuXHRwdWJsaWMgZGlzY2FyZENoYW5nZXMoKSB7XG5cdFx0aWYgKCF0aGlzLmxhc3RTYXZlZE1ldGhvZENvZGUpIHtcblx0XHRcdHRoaXMuc2V0RGlydHlTdGF0ZShmYWxzZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3VwcHJlc3NEaXJ0eSA9IHRydWU7XG5cdFx0Y29uc3Qgc2F2ZWRDb2RlID0gdGhpcy5sYXN0U2F2ZWRNZXRob2RDb2RlO1xuXHRcdHRoaXMuc2VsZWN0ZWRNZXRob2RDb2RlID0gc2F2ZWRDb2RlO1xuXHRcdGNvbnN0IHNhdmVkTWV0aG9kID0gdGhpcy5wYXltZW50TWV0aG9kcy5maW5kKG1ldGhvZCA9PiBtZXRob2QuY29kZSA9PT0gc2F2ZWRDb2RlKSB8fCBudWxsO1xuXHRcdHRoaXMuX21ldGhvZERhdGFTdWJqZWN0Lm5leHQoc2F2ZWRNZXRob2QpO1xuXHRcdHRoaXMuY3VycmVudE1ldGhvZCA9IHNhdmVkTWV0aG9kO1xuXHRcdHRoaXMuc2hvd01ldGhvZEVycm9yID0gZmFsc2U7XG5cdFx0dGhpcy5iYWxhbmNlTWV0aG9kUmVqZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLnZhbGlkYXRpbmdNZXRob2RDb2RlID0gbnVsbDtcblx0XHR0aGlzLl9wYXltZW50U2VydmljZS5wdXRQYXltZW50KHNhdmVkQ29kZSlcblx0XHRcdC5jYXRjaChlcnJvciA9PiB0aGlzLl9jaGVja291dFNlcnZpY2Uubm90aWZ5Q2hlY2tvdXRFcnJvcihlcnJvcikpXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3VwcHJlc3NEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLnNldERpcnR5U3RhdGUoZmFsc2UpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRpc1JlZGlyZWN0UmVkc3lzID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdyZWRzeXNfcmVkaXJlY3QnKTtcblx0aXNSZWRpcmVjdENlY2FCYW5rID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjZWNhX2JhbmtfcmVkaXJlY3QnKTtcblx0aXNNUCA9IChjb2RlOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBsb3dlckNvZGUgPSBjb2RlPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXHRcdHJldHVybiBsb3dlckNvZGUuaW5jbHVkZXMoJ21lcmNhZG9fcGFnbycpICYmICFsb3dlckNvZGUuaW5jbHVkZXMoJ2NyZWRpdCcpO1xuXHR9XG5cdGlzTVBUYXJqZXRhRGVDcmVkaXRvID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjcmVkaXQnKTtcblx0aXNNZXRob2RPZmZsaW5lID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJyk7XG5cdGlzUGV5UGFsRXhwcmVzcyA9IChjb2RlOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBsb3dlckNvZGUgPSBjb2RlPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXHRcdHJldHVybiBsb3dlckNvZGUuaW5jbHVkZXMoJ3BheXBhbCcpICYmIGxvd2VyQ29kZS5pbmNsdWRlcygnZXhwcmVzcycpO1xuXHR9XG5cdGlzTW9iYmV4ID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtb2JiZXgnKTtcblx0aXNCYW5jYXJkID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiYW5jYXJkJyk7XG5cdGlzRGVjaWRpciA9IChjb2RlOiBzdHJpbmcpID0+ICEhY29kZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGVjaWRpcicpO1xuXHRpc0N1bHFpID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjdWxxaScpO1xuXHRpc0JhbmtUcmFuc2ZlciA9IChjb2RlOiBzdHJpbmcpID0+ICEhY29kZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmFua190cmFuc2ZlcicpO1xuXHRpc0NhdGFzdHJvID0gKGNvZGU6IHN0cmluZykgPT4gISFjb2RlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjYXRhc3RybycpO1xuXHRpc0JhbWJvbyA9IChjb2RlOiBzdHJpbmcpID0+ICEhY29kZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmFtYm9vJyk7XG5cdGlzUGxhY2VUb1BheSA9IChjb2RlOiBzdHJpbmcpID0+ICEhY29kZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncGxhY2VfdG9fcGF5Jyk7XG5cdGlzQmFsYW5jZUluQWNjb3VudCA9IChjb2RlOiBzdHJpbmcpID0+ICEhY29kZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmFsYW5jZV9pbl9hY2NvdW50Jyk7XG5cblx0cHJpdmF0ZSBpc0F1dG9Db21wbGV0ZU1ldGhvZCA9IChtZXRob2Q6IGFueSkgPT4ge1xuXHRcdGlmICghbWV0aG9kPy5jb2RlKSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3QgY29kZSA9IG1ldGhvZC5jb2RlO1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmlzTVAoY29kZSkgfHxcblx0XHRcdHRoaXMuaXNSZWRpcmVjdFJlZHN5cyhjb2RlKSB8fFxuXHRcdFx0dGhpcy5pc1JlZGlyZWN0Q2VjYUJhbmsoY29kZSkgfHxcblx0XHRcdHRoaXMuaXNQZXlQYWxFeHByZXNzKGNvZGUpIHx8XG5cdFx0XHR0aGlzLmlzUGxhY2VUb1BheShjb2RlKVxuXHRcdCk7XG5cdH1cbn1cbiIsIkBpZihtZXRob2RzJCB8IGFzeW5jOyBhcyBtZXRob2RzKXtcbkBpZihjb21wYWN0UGF5bWVudFZpZXcpe1xuQGlmKG1ldGhvZHNMb2FkaW5nJCB8IGFzeW5jKXtcbjxkaXYgY2xhc3M9XCJwYXltZW50LWNvbXBhY3QgcGF5bWVudC1jb21wYWN0LWZsYXQgcGF5bWVudC1zdGVwLXN1cmZhY2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktNFwiPlxuICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgbXQtMlwiPnt7ICdsb2FkaW5nJyB8IHRyYW5zbGF0ZSB9fS4uLjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbn0gQGVsc2UgaWYobWV0aG9kcy5sZW5ndGgpe1xuPGRpdiBjbGFzcz1cInBheW1lbnQtY29tcGFjdCBwYXltZW50LWNvbXBhY3QtZmxhdCBwYXltZW50LXN0ZXAtc3VyZmFjZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgQGlmKHBheW1lbnRMb2NrZWQpe1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1sb2NrLW1lc3NhZ2VcIj57eyAnc2hpcG1lbnQtbWV0aG9kLXJlcXVpcmVkJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LW9wdGlvbnNcIiBbY2xhc3MuaXMtbG9ja2VkXT1cInBheW1lbnRMb2NrZWRcIj5cbiAgICAgICAgICAgIEBmb3IobWV0aG9kIG9mIG1ldGhvZHM7IHRyYWNrICRpbmRleCl7XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwYXltZW50LW9wdGlvblwiIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZE1ldGhvZENvZGUgPT09IG1ldGhvZC5jb2RlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiaXNQYXltZW50TWV0aG9kRGlzYWJsZWQobWV0aG9kKVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBheW1lbnQtb3B0aW9uLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInBheW1lbnQtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRNZXRob2RDb2RlID09PSBtZXRob2QuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYXltZW50TG9ja2VkIHx8IGlzUGF5bWVudE1ldGhvZERpc2FibGVkKG1ldGhvZClcIiAoY2xpY2spPVwic2V0TWV0aG9kKG1ldGhvZClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBheW1lbnQtb3B0aW9uLXRpdGxlXCI+e3sgbWV0aG9kLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmKG1ldGhvZC5pbWFnZXM/Lmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXltZW50LW9wdGlvbi1sb2dvc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yKGxvZ28gb2YgZ2V0VmlzaWJsZUltYWdlcyhtZXRob2QuaW1hZ2VzKTsgdHJhY2sgJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInBheW1lbnQtb3B0aW9uLWxvZ29cIiBbc3JjXT1cImdldFBheW1lbnRJbWFnZVVybChsb2dvKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cImxvZ28/Lm5hbWUgfHwgKG1ldGhvZC5uYW1lIHx8ICcnKVwiIFt0aXRsZV09XCJsb2dvPy5uYW1lIHx8IChtZXRob2QubmFtZSB8fCAnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYobWV0aG9kLmltYWdlcy5sZW5ndGggPiA0KXtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXltZW50LW9wdGlvbi1tb3JlXCIgW2F0dHIudGl0bGVdPVwiZ2V0SGlkZGVuSW1hZ2VUaXRsZXMobWV0aG9kLmltYWdlcylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICt7eyBtZXRob2QuaW1hZ2VzLmxlbmd0aCAtIDMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGF5bWVudC10b29sdGlwLWxvZ29zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihsb2dvIG9mIGdldEhpZGRlbkltYWdlcyhtZXRob2QuaW1hZ2VzKTsgdHJhY2sgJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwicGF5bWVudC10b29sdGlwLWxvZ29cIiBbc3JjXT1cImdldFBheW1lbnRJbWFnZVVybChsb2dvKVwiIFthbHRdPVwibG9nbz8ubmFtZSB8fCAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICBAaWYoc2VsZWN0ZWRNZXRob2RDb2RlID09PSBtZXRob2QuY29kZSl7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1vcHRpb24tZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIEBpZih2YWxpZGF0aW5nTWV0aG9kQ29kZSA9PT0gbWV0aG9kLmNvZGUpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1pbmxpbmUtZWM+PC9hcHAtbG9hZGluZy1pbmxpbmUtZWM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmKCFzaG93TWV0aG9kRXJyb3IgJiYgY3VycmVudE1ldGhvZD8uY29kZSA9PT0gbWV0aG9kLmNvZGUpe1xuICAgICAgICAgICAgICAgIEBpZihpc01QKG1ldGhvZC5jb2RlKSl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGlkPVwiZmFxc1wiIGNsYXNzPVwicXQgcHgtNSBcIj57eyBtZXRob2QuZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicHgtNVwiPnt7IG1ldGhvZC5pbnN0cnVjdGlvbnMgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbXAtcmVkaXJlY3QtZWMgKHJlYWR5KT1cInZlcmlmeVZhbGlkYXRlKCRldmVudClcIiBbbWV0aG9kXT1cIm1ldGhvZFwiIFthbGxEYXRhXT1cImFsbERhdGEoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1tcC1yZWRpcmVjdC1lYz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmKGlzRGVjaWRpcihtZXRob2QuY29kZSkpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRob2QtY29udGFpbmVyIHRleHQtZGFyayB0ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kZWNpZGlyLWVjIChyZWFkeSk9XCJ2ZXJpZnlWYWxpZGF0ZSgkZXZlbnQpXCIgW21ldGhvZF09XCJtZXRob2RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZXJfZGF0YV09XCJhbGxEYXRhKClcIiBbcGF5bWVudFNlcnZpY2VJbnN0XT1cIl9wYXltZW50U2VydmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxfYW1vdW50XT1cInRvdGFsX2Ftb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1kZWNpZGlyLWVjPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYoaXNNZXRob2RPZmZsaW5lKG1ldGhvZC5jb2RlKSl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLW9mZmxpbmUtZWMgW21ldGhvZF09XCJtZXRob2RcIiBbdmVyaWZ5VmFsaWRhdGVdPVwidmVyaWZ5VmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V0TG9hZGluZ109XCJzZXRMb2FkaW5nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmKGlzQmFua1RyYW5zZmVyKG1ldGhvZC5jb2RlKSl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJhbmstdHJhbnNmZXItZWMgW21ldGhvZF09XCJtZXRob2RcIiBbdmVyaWZ5VmFsaWRhdGVdPVwidmVyaWZ5VmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V0TG9hZGluZ109XCJzZXRMb2FkaW5nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZihzaG93TWV0aG9kRXJyb3Ipe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yIHB4LTMgZnctYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAndGhpcy1wYXltZW50LW1ldGhvZC1jYW5ub3QtYmUtdXNlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmKGlzQmFsYW5jZUluQWNjb3VudChtZXRob2QuY29kZSkgJiYgIXNob3dNZXRob2RFcnJvciAmJiBjdXJyZW50TWV0aG9kPy5jb2RlID09PSBtZXRob2QuY29kZSl7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMCBkZXNjcmlwdGlvbi1jb250XCIgKm5nSWY9XCJtZXRob2QuZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmUgb2YgbWV0aG9kLmRlc2NyaXB0aW9uLnNwbGl0KCdcXHJcXG4nKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIFtpZF09XCInY2MtZGVzYy0nK2lcIiBbY2xhc3NdPVwiJ3F0IHB4LTUgbS0wIGxpbmUtJytpXCI+e3sgbGluZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGhyICpuZ0lmPVwibWV0aG9kLmluc3RydWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0aG9kLmluc3RydWN0aW9uc1wiIGNsYXNzPVwicm93IHB4LTAgaW5zdHJ1Y3Rpb25zLWNvbnQgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiaW5zdHJ1Y3Rpb25zLXRpdGxlXCI+e3sgKCdpbnN0cnVjdGlvbnMnIHwgdHJhbnNsYXRlKSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaW5lIG9mIG1ldGhvZC5pbnN0cnVjdGlvbnMuc3BsaXQoJ1xcclxcbicpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW2NsYXNzXT1cIidweC01IG0tMCBpbnN0cnVjdGlvbnMtdGV4dCBsaW5lLScraSBcIj57eyBsaW5lIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYmFsYW5jZU1ldGhvZFJlamVjdGVkOyBlbHNlIHNob3dDcmVkaXRFcnJvckNvbXBhY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbmQtYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBjb21wcmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihsb2FkaW5nJCB8IGFzeW5jKSB8fCAobG9hZGluZ1N0ZXAkIHwgYXN5bmMpIHx8IGxvYWRpbmdJbnRlcm5hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRMb2FkaW5nKCkgJiYgdmVyaWZ5VmFsaWRhdGUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGF5LXdpdGgnIHwgdHJhbnNsYXRlIH19IHt7IG1ldGhvZC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93Q3JlZGl0RXJyb3JDb21wYWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTIgcHgtMyBmdy1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ25vdC1lbm91Z2gtY3JlZGl0cy10by1jb21wbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIobG9hZGluZyQgfCBhc3luYykgYXMgbG9hZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImxvYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctaW5saW5lLWVjPjwvYXBwLWxvYWRpbmctaW5saW5lLWVjPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbn0gQGVsc2UgaWYoc2hvdWxkU2hvd05vUGF5bWVudE1ldGhvZHMobWV0aG9kcykpe1xuPGRpdiBjbGFzcz1cInBheW1lbnQtY29tcGFjdCBwYXltZW50LWNvbXBhY3QtZmxhdCBwYXltZW50LXN0ZXAtc3VyZmFjZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+e3sgJ25vLXBheW1lbnQtbWV0aG9kcycgfCB0cmFuc2xhdGUgfX08L2g1PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxufVxufSBAZWxzZSB7XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgdGV4dC1kYXJrIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND57eyAnc2VsZWN0LW1ldGhvZCcgfCB0cmFuc2xhdGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICBAaWYobWV0aG9kc0xvYWRpbmckIHwgYXN5bmMpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1pbmxpbmUtZWM+PC9hcHAtbG9hZGluZy1pbmxpbmUtZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IG10LTJcIj57eyAnbG9hZGluZycgfCB0cmFuc2xhdGUgfX0uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmKG1ldGhvZHMubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiByb2xlPVwidG9vbGJhclwiIGFyaWEtbGFiZWw9XCJFbnZpb3MgdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJHcnVwbyBib3RvbmVzIGVudmlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1jb250ZW50LXN0YXJ0IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG1ldGhvZCBvZiBtZXRob2RzOyB0cmFjayAkaW5kZXg7IGxldCB4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBteC0xIG1iLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldE1ldGhvZChtZXRob2QpIDsgc2V0QWN0aXZlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1ldGhvZC5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYoc2hvdWxkU2hvd05vUGF5bWVudE1ldGhvZHMobWV0aG9kcykpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IHctMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj57eyAnbm8tcGF5bWVudC1tZXRob2RzJyB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYobG9hZGluZ0ludGVybmFsKXtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctaW5saW5lLWVjPjwvYXBwLWxvYWRpbmctaW5saW5lLWVjPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZihtZXRob2REYXRhJCB8IGFzeW5jOyBhcyBtZXRob2Qpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihtZXRob2QgJiYgIXNob3dNZXRob2RFcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoaXNNUChtZXRob2QuY29kZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBpZD1cImZhcXNcIiBjbGFzcz1cInF0IHB4LTUgXCI+e3sgbWV0aG9kLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJweC01XCI+e3sgbWV0aG9kLmluc3RydWN0aW9ucyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbXAtcmVkaXJlY3QtZWMgKHJlYWR5KT1cInZlcmlmeVZhbGlkYXRlKCRldmVudClcIiBbbWV0aG9kXT1cIm1ldGhvZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbERhdGFdPVwiYWxsRGF0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1tcC1yZWRpcmVjdC1lYz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRob2QtY29udGFpbmVyIHRleHQtZGFyayB0ZXh0LXN0YXJ0XCIgKm5nSWY9XCJpc0RlY2lkaXIobWV0aG9kLmNvZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWRlY2lkaXItZWMgKHJlYWR5KT1cInZlcmlmeVZhbGlkYXRlKCRldmVudClcIiBbbWV0aG9kXT1cIm1ldGhvZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2VyX2RhdGFdPVwiYWxsRGF0YSgpXCIgW3BheW1lbnRTZXJ2aWNlSW5zdF09XCJfcGF5bWVudFNlcnZpY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxfYW1vdW50XT1cInRvdGFsX2Ftb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWRlY2lkaXItZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpc01ldGhvZE9mZmxpbmUobWV0aG9kLmNvZGUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRob2QtY29udGFpbmVyIHRleHQtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1vZmZsaW5lLWVjIFttZXRob2RdPVwibWV0aG9kXCIgW3ZlcmlmeVZhbGlkYXRlXT1cInZlcmlmeVZhbGlkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V0TG9hZGluZ109XCJzZXRMb2FkaW5nXCIgW2xvYWRpbmckXT1cImxvYWRpbmckXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpc0JhbmtUcmFuc2ZlcihtZXRob2QuY29kZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGhvZC1jb250YWluZXIgdGV4dC1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJhbmstdHJhbnNmZXItZWMgW21ldGhvZF09XCJtZXRob2RcIiBbdmVyaWZ5VmFsaWRhdGVdPVwidmVyaWZ5VmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXRMb2FkaW5nXT1cInNldExvYWRpbmdcIiBbbG9hZGluZyRdPVwibG9hZGluZyRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHNob3dNZXRob2RFcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMiBweC0zIGZ3LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAndGhpcy1wYXltZW50LW1ldGhvZC1jYW5ub3QtYmUtdXNlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzQmFsYW5jZUluQWNjb3VudChtZXRob2QuY29kZSkgJiYgIXNob3dNZXRob2RFcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0aG9kLWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTAgZGVzY3JpcHRpb24tY29udFwiICpuZ0lmPVwibWV0aG9kLmRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmUgb2YgbWV0aG9kLmRlc2NyaXB0aW9uLnNwbGl0KCdcXHJcXG4nKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW2lkXT1cIidjYy1kZXNjLScraVwiIFtjbGFzc109XCIncXQgcHgtNSBtLTAgbGluZS0nK2lcIj57eyBsaW5lIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgKm5nSWY9XCJtZXRob2QuaW5zdHJ1Y3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1ldGhvZC5pbnN0cnVjdGlvbnNcIiBjbGFzcz1cInJvdyBweC0wIGluc3RydWN0aW9ucy1jb250IG1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiaW5zdHJ1Y3Rpb25zLXRpdGxlXCI+e3sgKCdpbnN0cnVjdGlvbnMnIHwgdHJhbnNsYXRlKSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmUgb2YgbWV0aG9kLmluc3RydWN0aW9ucy5zcGxpdCgnXFxyXFxuJyk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIFtjbGFzc109XCIncHgtNSBtLTAgaW5zdHJ1Y3Rpb25zLXRleHQgbGluZS0nK2kgXCI+e3sgbGluZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJhbGFuY2VNZXRob2RSZWplY3RlZDsgZWxzZSBzaG93Q3JlZGl0RXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuZC1idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gY29tcHJhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihsb2FkaW5nJCB8IGFzeW5jKSB8fCAobG9hZGluZ1N0ZXAkIHwgYXN5bmMpIHx8IGxvYWRpbmdJbnRlcm5hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldExvYWRpbmcoKSAmJiB2ZXJpZnlWYWxpZGF0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BheS13aXRoJyB8IHRyYW5zbGF0ZSB9fSB7eyBtZXRob2QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93Q3JlZGl0RXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yIHB4LTMgZnctYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ25vdC1lbm91Z2gtY3JlZGl0cy10by1jb21wbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIobG9hZGluZyQgfCBhc3luYykgYXMgbG9hZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwibG9hZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ0ludGVybmFsIHx8IChsb2FkaW5nU3RlcCQgfCBhc3luYykgfHwgKGxvYWRpbmckIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiPnt7J2JhY2snfHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbn1cbn1cbiJdfQ==