@snabcentr/client-ui 4.15.1 → 4.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.d.ts +8 -0
  2. package/catalog/price-history/sc-price-history.component.d.ts +4 -0
  3. package/catalog/sc-catalog.module.d.ts +1 -1
  4. package/configurators/sandwich/sc-sandwich.component.d.ts +4 -0
  5. package/configurators/sandwich_m2/sc-sandwich-m2.component.d.ts +8 -0
  6. package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +0 -6
  7. package/esm2022/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.mjs +22 -18
  8. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +7 -6
  9. package/esm2022/catalog/price-history/sc-price-history.component.mjs +9 -5
  10. package/esm2022/catalog/sc-catalog.module.mjs +5 -3
  11. package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +11 -6
  12. package/esm2022/configurators/sandwich_m2/sc-sandwich-m2.component.mjs +19 -11
  13. package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +6 -14
  14. package/esm2022/order/order-item/sc-order-item.component.mjs +8 -4
  15. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +9 -5
  16. package/esm2022/validators/step-validator.mjs +4 -4
  17. package/fesm2022/snabcentr-client-ui.mjs +80 -57
  18. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  19. package/order/order-item/sc-order-item.component.d.ts +4 -0
  20. package/order/order-items-list/sc-order-items-list.component.d.ts +4 -0
  21. package/package.json +2 -2
  22. package/release_notes.tmp +4 -2
  23. package/validators/step-validator.d.ts +1 -2
@@ -3,7 +3,7 @@ import { HttpErrorResponse } from '@angular/common/http';
3
3
  import { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject } from '@angular/core';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { FormControl, FormGroup, Validators } from '@angular/forms';
6
- import { ScISuggestionType, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
6
+ import { ScISuggestionType, ScNumberHelper, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
7
7
  import { TUI_IS_MOBILE } from '@taiga-ui/cdk';
8
8
  import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
9
9
  import { getCountries } from 'libphonenumber-js';
@@ -28,14 +28,6 @@ import * as i12 from "@taiga-ui/experimental";
28
28
  * Компонент добавления адреса доставки.
29
29
  */
30
30
  export class ScAddDeliveryAddressDialogComponent {
31
- /**
32
- * Округляет координаты до 6 цифр после запятой.
33
- *
34
- * @param coords Координаты точки.
35
- */
36
- static roundCoordinate(coords) {
37
- return coords.map((coord) => Math.round(coord * 1e6) / 1e6);
38
- }
39
31
  /**
40
32
  * Инициализирует экземпляр класса {@link ScAddDeliveryAddressDialogComponent}.
41
33
  *
@@ -170,7 +162,7 @@ export class ScAddDeliveryAddressDialogComponent {
170
162
  */
171
163
  onSelectedAddress(suggestion) {
172
164
  if ('addressString' in suggestion && suggestion.geoCoordinates) {
173
- const coords = ScAddDeliveryAddressDialogComponent.roundCoordinate([suggestion.geoCoordinates.lat, suggestion.geoCoordinates.long]);
165
+ const coords = [suggestion.geoCoordinates.lat, suggestion.geoCoordinates.long].map((coord) => ScNumberHelper.roundCoordinate(coord));
174
166
  this.addressPlacemark ??= this.createPlacemark(coords);
175
167
  this.setGeoCoordinates(coords);
176
168
  if (!this.yaMap?.geoObjects.getLength()) {
@@ -193,8 +185,8 @@ export class ScAddDeliveryAddressDialogComponent {
193
185
  this.addressPlacemark.geometry?.setCoordinates(coords);
194
186
  this.form.patchValue({
195
187
  coordinates: {
196
- lat: Number(coords[0].toFixed(6)),
197
- long: Number(coords[1].toFixed(6)),
188
+ lat: coords[0],
189
+ long: coords[1],
198
190
  },
199
191
  });
200
192
  }
@@ -230,7 +222,7 @@ export class ScAddDeliveryAddressDialogComponent {
230
222
  placemark.events.add('dragend', () => {
231
223
  const coord = this.addressPlacemark?.geometry?.getCoordinates();
232
224
  if (coord) {
233
- this.setGeoCoordinates(ScAddDeliveryAddressDialogComponent.roundCoordinate(coord));
225
+ this.setGeoCoordinates(coord.map((value) => ScNumberHelper.roundCoordinate(value)));
234
226
  }
235
227
  });
236
228
  return placemark;
@@ -245,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
245
237
  type: Inject,
246
238
  args: [POLYMORPHEUS_CONTEXT]
247
239
  }] }, { type: i1.ScConvertersService }] });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRkFBa0Y7QUFFbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQVFILGlCQUFpQixFQUVqQixzQkFBc0IsR0FFekIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFB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QUksQ0FBQyxpQkFBaUIsQ0FBQyxtQ0FBbUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDOytHQTdRUSxtQ0FBbUMsOEZBaUpoQyxvQkFBb0I7bUdBakp2QixtQ0FBbUMsc0VDdkNoRCw0ak5BcUpBOzs0RkQ5R2EsbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNJLGdDQUFnQyxtQkFFekIsdUJBQXVCLENBQUMsTUFBTTs7MEJBbUoxQyxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCxsb2Rhc2gvcHJlZmVyLWxvZGFzaC1tZXRob2QgKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbmplY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgU2NJQXBpRXJyb3JSZXNwb25zZSxcbiAgICBTY0lEZWxpdmVyeUFkZHJlc3MsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlLFxuICAgIFNjSU9yZ0NvbnRhY3QsXG4gICAgU2NJU3VnZ2VzdGlvbkFkZHJlc3MsXG4gICAgU2NJU3VnZ2VzdGlvblR5cGUsXG4gICAgU2NTdWdnZXN0aW9uLFxuICAgIFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sXG4gICAgU2NVc2VyTWV0cmlrYVNlcnZpY2UsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVFVJX0lTX01PQklMRSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpRGlhbG9nQ29udGV4dCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUNvdW50cnlJc29Db2RlIH0gZnJvbSAnQHRhaWdhLXVpL2kxOG4nO1xuaW1wb3J0IHsgUE9MWU1PUlBIRVVTX0NPTlRFWFQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IFlhUmVhZHlFdmVudCB9IGZyb20gJ2FuZ3VsYXI4LXlhbmRleC1tYXBzJztcbmltcG9ydCB7IGdldENvdW50cmllcyB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSVNfREVGQVVMVF9DT1VOVFJZIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IFNjSGVscE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBwaG9uZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvc2MtcGhvbmUtdmFsaWRhdG9yJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiDQntC60YDRg9Cz0LvRj9C10YIg0LrQvtC+0YDQtNC40L3QsNGC0Ysg0LTQviA2INGG0LjRhNGAINC/0L7RgdC70LUg0LfQsNC/0Y/RgtC+0LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29vcmRzINCa0L7QvtGA0LTQuNC90LDRgtGLINGC0L7Rh9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcm91bmRDb29yZGluYXRlKGNvb3JkczogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBjb29yZHMubWFwKChjb29yZCkgPT4gTWF0aC5yb3VuZChjb29yZCAqIDFlNikgLyAxZTYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQtNC70Y8g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7Qs9C+INGD0L/RgNCw0LLQu9C10L3QuNGPINGD0L3QuNGH0YLQvtC20LXQvdC40LXQvCDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINC+0YLQvtCx0YDQsNC20LDQtdGC0YHRjyDRjdGC0L7RgiDQutC+0LzQv9C+0L3QtdC90YIg0L3QsCDQvNC+0LHQuNC70YzQvdC+0Lwg0YPRgdGC0YDQvtC50YHRgtCy0LUg0LjQu9C4INC90LXRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGU6IGJvb2xlYW4gPSBpbmplY3QoVFVJX0lTX01PQklMRSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0L7RgNC00LjQvdCw0YLRiyDRhtC10L3RgtGA0LAg0LrQsNGA0YLRiyDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdENlbnRlck1hcDogbnVtYmVyW10gPSBbNTcuMDAwMzUzLCA0MC45NzM5M107XG5cbiAgICAvKipcbiAgICAgKiDQnNCw0YHRiNGC0LDQsSDQutCw0YDRgtGLINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Wm9vbU1hcDogbnVtYmVyID0gMTE7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LTQsNC90L3Ri9GFINC60L7QvdGC0LDQutGC0L7QsiDQtNC7INC/0L7QvNC+0YnQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXNlckhlbHBDb250YWN0cyQ6IE9ic2VydmFibGU8U2NJT3JnQ29udGFjdFtdPiA9IGluamVjdChTY0hlbHBOb3RpZmljYXRpb25TZXJ2aWNlKS51c2VySGVscENvbnRhY3RzO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDRgtC10LrRg9GJ0LDRjyDRgdGC0YDQsNC90LAg0Y/QstC70Y/QtdGC0YHRjyDQstC10YDQvdC+0LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRGVmYXVsdENvdW50cnk6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBpbmplY3QoSVNfREVGQVVMVF9DT1VOVFJZKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGC0YDQsNC9LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb3VudHJpZXM6IHJlYWRvbmx5IFR1aUNvdW50cnlJc29Db2RlW10gPSBnZXRDb3VudHJpZXMoKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8U2NJRGVsaXZlcnlBZGRyZXNzIHwgbnVsbD4gPSB0aGlzLm9uU3VibWl0JC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lEZWxpdmVyeUFkZHJlc3NPbkRhdGFDcmVhdGUpLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLmNyZWF0ZURlbGl2ZXJ5QWRkcmVzcyQodGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsUmVjdXJzaXZlPFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZT4odmFsdWUpKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IGVycm9yLmVycm9yIGFzIFNjSUFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpPy5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogZXJyb3JzW2tleV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7fSBhcyBTY0lEZWxpdmVyeUFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucmVxdWVzdCQucGlwZShtYXAoKGRhdGEpID0+IGRhdGEgPT09IG51bGwpKTtcblxuICAgIC8qKlxuICAgICAqINCT0YDRg9C/0L/QsCDRgSDQv9C+0LvRj9C80Lgg0LDQtNGA0LXRgdC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGFkZHJlc3NDb250cm9sOiBGb3JtQ29udHJvbDxTY0lTdWdnZXN0aW9uQWRkcmVzcyB8IHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPFNjSVN1Z2dlc3Rpb25BZGRyZXNzIHwgc3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0YHRgtGA0L7QudC60Lgg0LrQsNGA0YLRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3B0aW9uczogeW1hcHMuSU1hcE9wdGlvbnMgPSB7XG4gICAgICAgIGF1dG9GaXRUb1ZpZXdwb3J0OiAnYWx3YXlzJyxcbiAgICAgICAgeWFuZGV4TWFwRGlzYWJsZVBvaUludGVyYWN0aXZpdHk6IGZhbHNlLFxuICAgICAgICBtYXhab29tOiAxOSxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3NDb250cm9sLFxuICAgICAgICBjb29yZGluYXRlczogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBsYXQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIGxvbmc6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbnRhY3Q6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgcGhvbmVWYWxpZGF0b3IoKV0pLFxuICAgICAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLmVtYWlsKSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KLQvtGH0LrQsCDQsNC00YDQtdGB0LAg0L3QsCDQutCw0YDRgtC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRyZXNzUGxhY2VtYXJrPzogeW1hcHMuUGxhY2VtYXJrO1xuXG4gICAgLyoqXG4gICAgICog0K/QvdC00LXQutGBINC60LDRgNGC0LAuXG4gICAgICovXG4gICAgcHVibGljIHlhTWFwPzogeW1hcHMuTWFwO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0FkZERlbGl2ZXJ5QWRkcmVzc0RpYWxvZ0NvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaXZlcnlBZGRyZXNzU2VydmljZSDQodC10YDQstC40YEg0YDQsNCx0L7RgtGLINGBINCw0LTRgNC10YHQsNC80Lgg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqIEBwYXJhbSBjb250ZXh0INCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlOiBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSxcbiAgICAgICAgQEluamVjdChQT0xZTU9SUEhFVVNfQ09OVEVYVCkgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ6IFR1aURpYWxvZ0NvbnRleHQ8dm9pZCwgdm9pZD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGluaGVyaXRkb2MgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0udXNlclByb2ZpbGVEZWxpdmVyeUFkZHJlc3NBZGRTaG93LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZHJlc3NDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVHZW9Db29yZGluYXRlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQt9Cw0LPRgNGD0LfQutC4INC60LDRgNGC0Ysg0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCDQrdC60LfQtdC80L/Qu9GP0YAg0YbQtdC70LXQstC+0LPQviDQvtCx0YrQtdC60YLQsC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0LnRhcmdldCDQrdC60LfQtdC80L/Qu9GP0YAg0YbQtdC70LXQstC+0LPQviDQvtCx0YrQtdC60YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25NYXBSZWFkeUhhbmRsZSh7IHRhcmdldCB9OiBZYVJlYWR5RXZlbnQ8eW1hcHMuTWFwPik6IHZvaWQge1xuICAgICAgICB0aGlzLnlhTWFwID0gdGFyZ2V0O1xuXG4gICAgICAgIGlmICh0aGlzLmFkZHJlc3NQbGFjZW1hcmspIHtcbiAgICAgICAgICAgIHRhcmdldC5nZW9PYmplY3RzLmFkZCh0aGlzLmFkZHJlc3NQbGFjZW1hcmspO1xuXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmFkZHJlc3NQbGFjZW1hcmsuZ2VvbWV0cnk/LmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0LLRi9Cx0L7RgNCwINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHN1Z2dlc3Rpb24g0J7QsdGK0LXQutGCINC/0L7QtNGB0LrQsNC30LrQuCDQsNGA0LXRgdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBTY1N1Z2dlc3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCdhZGRyZXNzU3RyaW5nJyBpbiBzdWdnZXN0aW9uICYmIHN1Z2dlc3Rpb24uZ2VvQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50LnJvdW5kQ29vcmRpbmF0ZShbc3VnZ2VzdGlvbi5nZW9Db29yZGluYXRlcy5sYXQsIHN1Z2dlc3Rpb24uZ2VvQ29vcmRpbmF0ZXMubG9uZ10pO1xuXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NQbGFjZW1hcmsgPz89IHRoaXMuY3JlYXRlUGxhY2VtYXJrKGNvb3Jkcyk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0R2VvQ29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnlhTWFwPy5nZW9PYmplY3RzLmdldExlbmd0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55YU1hcD8uZ2VvT2JqZWN0cy5hZGQodGhpcy5hZGRyZXNzUGxhY2VtYXJrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5hZGRyZXNzUGxhY2VtYXJrLmdlb21ldHJ5Py5nZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgaWYgKGJvdW5kcykge1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldFpvb20oMTcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIGFkZHJlc3NQbGFjZW1hcmt9INGC0L7Rh9C60YMg0L3QsCDQvtC/0YDQtdC00LXQu9GR0L3QvdGL0LUg0LrQvtC+0YDQtNC40L3QsNGC0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29vcmRzINCa0L7QvtGA0LTQuNC90LDRgtGLINGC0L7Rh9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRHZW9Db29yZGluYXRlcyhjb29yZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFkZHJlc3NQbGFjZW1hcmspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1BsYWNlbWFyay5nZW9tZXRyeT8uc2V0Q29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhdDogTnVtYmVyKGNvb3Jkc1swXS50b0ZpeGVkKDYpKSxcbiAgICAgICAgICAgICAgICAgICAgbG9uZzogTnVtYmVyKGNvb3Jkc1sxXS50b0ZpeGVkKDYpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiB7QGxpbmsgYWRkcmVzc1BsYWNlbWFya30g0YLQvtGH0LrRgyDQvdCwINC+0L/RgNC10LTQtdC70ZHQvdC90YvQtSDQutC+0L7RgNC00LjQvdCw0YLRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUdlb0Nvb3JkaW5hdGVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hZGRyZXNzUGxhY2VtYXJrKSB7XG4gICAgICAgICAgICB0aGlzLnlhTWFwPy5nZW9PYmplY3RzLnJlbW92ZSh0aGlzLmFkZHJlc3NQbGFjZW1hcmspO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsb25nOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy55YU1hcD8uc2V0Q2VudGVyKHRoaXMuZGVmYXVsdENlbnRlck1hcCk7XG4gICAgICAgICAgICB0aGlzLnlhTWFwPy5zZXRab29tKHRoaXMuZGVmYXVsdFpvb21NYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0L7QsdGK0LXQutGCINGC0L7Rh9C60Lgg0Lgg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YHQvtCx0YvRgtC40Y8g0LTQu9GPINC90LXQs9C+LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvb3JkcyDQmtC+0L7RgNC00LjQvdCw0YLRiyDRgtC+0YfQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlUGxhY2VtYXJrKGNvb3JkczogbnVtYmVyW10pOiB5bWFwcy5QbGFjZW1hcmsge1xuICAgICAgICBjb25zdCBwbGFjZW1hcmsgPSBuZXcgeW1hcHMuUGxhY2VtYXJrKFxuICAgICAgICAgICAgY29vcmRzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGljb25DYXB0aW9uOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJlc2V0OiAnaXNsYW5kcycsXG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHBsYWNlbWFyay5ldmVudHMuYWRkKCdkcmFnZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLmFkZHJlc3NQbGFjZW1hcms/Lmdlb21ldHJ5Py5nZXRDb29yZGluYXRlcygpO1xuXG4gICAgICAgICAgICBpZiAoY29vcmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEdlb0Nvb3JkaW5hdGVzKFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50LnJvdW5kQ29vcmRpbmF0ZShjb29yZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGxhY2VtYXJrO1xuICAgIH1cbn1cbiIsIkBsZXQgaXNFbmFibGVkQWRkRGVsaXZlcnlBZGRyZXNzID0gaXNEZWZhdWx0Q291bnRyeSB8IGFzeW5jO1xuXG5AaWYgKGlzRW5hYmxlZEFkZERlbGl2ZXJ5QWRkcmVzcykge1xuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93XCI+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICAgICAgKG5nU3VibWl0KT1cIm9uU3VibWl0JC5uZXh0KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICDQkNC00YDQtdGBINC00L7RgdGC0LDQstC60LhcbiAgICAgICAgICAgICAgICA8dHVpLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtwc2V1ZG9JbnZhbGlkXT1cIihhZGRyZXNzQ29udHJvbC52YWxpZCAmJiBmb3JtLmNvbnRyb2xzLmNvb3JkaW5hdGVzLmludmFsaWQpIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5hZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZENsaWNrKT1cIm9uU2VsZWN0ZWRBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkZHJlc3NDb250cm9sLnZhbGlkICYmIGZvcm0uY29udHJvbHMuY29vcmRpbmF0ZXMuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgIGVycm9yPVwi0JLRi9Cx0LXRgNC40YLQtSDQstCw0YDQuNCw0L3RgiDQuNC3INGB0L/QuNGB0LrQsFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwTmFtZT1cImNvbnRhY3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIGdhcC0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInctZnVsbCBmb250LWJvbGRcIj7QmtC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQvjo8L3A+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICDQpC7QmC7Qni5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICDQpC7QmC7Qni5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZmlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCi0LXQu9C10YTQvtC9XG4gICAgICAgICAgICAgICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50cnlTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50cmllc109XCIoY291bnRyaWVzIHwgdHVpU29ydENvdW50cmllcyB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICDQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1xuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlUZXh0ZmllbGRMZWdhY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICDQlNC+0LvQttC90L7RgdGC0YxcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiPiDQlNC+0LvQttC90L7RgdGC0YwgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLThcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbaWNvblN0YXJ0XT1cImlzTW9iaWxlID8gJ0B0dWkueCcgOiAnQHR1aS54J1wiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J7RgtC80LXQvdCwXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2ljb25TdGFydF09XCJpc01vYmlsZSA/ICdAdHVpLnNhdmUnIDogJ0B0dWkuc2F2ZSdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0YxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSAtei0xMCBmbGV4IHNpemUtZnVsbCBtZDp3LTEvMlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd6LTAgcmVsYXRpdmUnOiBhZGRyZXNzUGxhY2VtYXJrIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWF1dG9cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BvaW50ZXItZXZlbnRzLW5vbmUgb3BhY2l0eS01MCc6IGZvcm0uY29udHJvbHMuY29vcmRpbmF0ZXMuaW52YWxpZCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8eWEtbWFwXG4gICAgICAgICAgICAgICAgICAgIFt6b29tXT1cIjExXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cInsgY29udHJvbHM6IFtdIH1cIlxuICAgICAgICAgICAgICAgICAgICAocmVhZHkpPVwib25NYXBSZWFkeUhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIEBsZXQgaGVscENvbnRhY3RzID0gdXNlckhlbHBDb250YWN0cyQgfCBhc3luYztcblxuICAgIEBpZiAoaGVscENvbnRhY3RzICYmIGhlbHBDb250YWN0cy5sZW5ndGgpIHtcbiAgICAgICAgPHR1aS1wdXNoXG4gICAgICAgICAgICB0eXBlPVwi0KfRgtC+0LHRiyDQtNC+0LHQsNCy0LjRgtGMINCw0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuCwg0YHQstGP0LbQuNGC0LXRgdGMINGBINC90LDQvNC4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiIXctYXV0b1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0dWktaWNvbiBpY29uPVwiQHR1aS5tZXNzYWdlLXNxdWFyZVwiIC8+XG4gICAgICAgICAgICA8c2MtbWFuYWdlci1jYXJkIFttYW5hZ2VyXT1cImhlbHBDb250YWN0c1swXVwiIC8+XG4gICAgICAgIDwvdHVpLXB1c2g+XG4gICAgfVxufVxuIl19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRkFBa0Y7QUFFbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQVFILGlCQUFpQixFQUNqQixjQUFjLEVBRWQsc0JBQXNCLEdBRXpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFB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b0JBQW9CO21HQXhJdkIsbUNBQW1DLHNFQ3hDaEQsNGpOQXFKQTs7NEZEN0dhLG1DQUFtQztrQkFML0MsU0FBUzsrQkFDSSxnQ0FBZ0MsbUJBRXpCLHVCQUF1QixDQUFDLE1BQU07OzBCQTBJMUMsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QsbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kICovXG5cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgSW5qZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgU2NEZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzLFxuICAgIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSxcbiAgICBTY0lPcmdDb250YWN0LFxuICAgIFNjSVN1Z2dlc3Rpb25BZGRyZXNzLFxuICAgIFNjSVN1Z2dlc3Rpb25UeXBlLFxuICAgIFNjTnVtYmVySGVscGVyLFxuICAgIFNjU3VnZ2VzdGlvbixcbiAgICBTY1VzZXJNZXRyaWthR29hbHNFbnVtLFxuICAgIFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlDb3VudHJ5SXNvQ29kZSB9IGZyb20gJ0B0YWlnYS11aS9pMThuJztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBZYVJlYWR5RXZlbnQgfSBmcm9tICdhbmd1bGFyOC15YW5kZXgtbWFwcyc7XG5pbXBvcnQgeyBnZXRDb3VudHJpZXMgfSBmcm9tICdsaWJwaG9uZW51bWJlci1qcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElTX0RFRkFVTFRfQ09VTlRSWSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBTY0hlbHBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcGhvbmVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3NjLXBob25lLXZhbGlkYXRvcic7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC00L7QsdCw0LLQu9C10L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8g0YPQvdC40YfRgtC+0LbQtdC90LjQtdC8INC30LDQstC40YHQuNC80L7RgdGC0LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvtGA0LTQuNC90LDRgtGLINGG0LXQvdGC0YDQsCDQutCw0YDRgtGLINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Q2VudGVyTWFwOiBudW1iZXJbXSA9IFs1Ny4wMDAzNTMsIDQwLjk3MzkzXTtcblxuICAgIC8qKlxuICAgICAqINCc0LDRgdGI0YLQsNCxINC60LDRgNGC0Ysg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRab29tTWFwOiBudW1iZXIgPSAxMTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQtNCw0L3QvdGL0YUg0LrQvtC90YLQsNC60YLQvtCyINC00Lsg0L/QvtC80L7RidC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB1c2VySGVscENvbnRhY3RzJDogT2JzZXJ2YWJsZTxTY0lPcmdDb250YWN0W10+ID0gaW5qZWN0KFNjSGVscE5vdGlmaWNhdGlvblNlcnZpY2UpLnVzZXJIZWxwQ29udGFjdHM7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INGC0LXQutGD0YnQsNGPINGB0YLRgNCw0L3QsCDRj9Cy0LvRj9C10YLRgdGPINCy0LXRgNC90L7QuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNEZWZhdWx0Q291bnRyeTogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGluamVjdChJU19ERUZBVUxUX0NPVU5UUlkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YLRgNCw0L0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvdW50cmllczogcmVhZG9ubHkgVHVpQ291bnRyeUlzb0NvZGVbXSA9IGdldENvdW50cmllcygpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC00LDQvdC90YvRhSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQsNC00YDQtdGBINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTxTY0lEZWxpdmVyeUFkZHJlc3MgfCBudWxsPiA9IHRoaXMub25TdWJtaXQkLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5mb3JtLnZhbHVlIGFzIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UuY3JlYXRlRGVsaXZlcnlBZGRyZXNzJCh0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGxSZWN1cnNpdmU8U2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlPih2YWx1ZSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNvbXBsZXRlV2l0aCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvcnNba2V5XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9IGFzIFNjSURlbGl2ZXJ5QWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKG1hcCgoZGF0YSkgPT4gZGF0YSA9PT0gbnVsbCkpO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINGBINC/0L7Qu9GP0LzQuCDQsNC00YDQtdGB0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkcmVzc0NvbnRyb2w6IEZvcm1Db250cm9sPFNjSVN1Z2dlc3Rpb25BZGRyZXNzIHwgc3RyaW5nIHwgbnVsbD4gPSBuZXcgRm9ybUNvbnRyb2w8U2NJU3VnZ2VzdGlvbkFkZHJlc3MgfCBzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQutCw0YDRgtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBvcHRpb25zOiB5bWFwcy5JTWFwT3B0aW9ucyA9IHtcbiAgICAgICAgYXV0b0ZpdFRvVmlld3BvcnQ6ICdhbHdheXMnLFxuICAgICAgICB5YW5kZXhNYXBEaXNhYmxlUG9pSW50ZXJhY3Rpdml0eTogZmFsc2UsXG4gICAgICAgIG1heFpvb206IDE5LFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiDQpNC+0YDQvNCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuYWRkcmVzc0NvbnRyb2wsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIGxhdDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgbG9uZzogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB9KSxcbiAgICAgICAgY29udGFjdDogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBwaG9uZVZhbGlkYXRvcigpXSksXG4gICAgICAgICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMuZW1haWwpLFxuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQotC+0YfQutCwINCw0LTRgNC10YHQsCDQvdCwINC60LDRgNGC0LUuXG4gICAgICovXG4gICAgcHVibGljIGFkZHJlc3NQbGFjZW1hcms/OiB5bWFwcy5QbGFjZW1hcms7XG5cbiAgICAvKipcbiAgICAgKiDQr9C90LTQtdC60YEg0LrQsNGA0YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgeWFNYXA/OiB5bWFwcy5NYXA7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LDQtNGA0LXRgdCw0LzQuCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqIEBwYXJhbSB1c2VyTWV0cmlrYVNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICogQHBhcmFtIGNvbnRleHQg0JrQvtC90YLQtdC60YHRgiDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwLCDQsiDQutC+0YLQvtGA0L7QvCDQvtGC0LrRgNGL0YIg0LrQvtC80L/QvtC90LXQvdGCLlxuICAgICAqIEBwYXJhbSBjb252ZXJ0ZXJzU2VydmljZSDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2U6IFNjRGVsaXZlcnlBZGRyZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFBPTFlNT1JQSEVVU19DT05URVhUKSBwdWJsaWMgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dDx2b2lkLCB2b2lkPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZTogU2NDb252ZXJ0ZXJzU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS51c2VyUHJvZmlsZURlbGl2ZXJ5QWRkcmVzc0FkZFNob3csXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkcmVzc0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUdlb0Nvb3JkaW5hdGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INC30LDQs9GA0YPQt9C60Lgg0LrQsNGA0YLRiyDQvdCwINGB0YLRgNCw0L3QuNGG0LUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0INCt0LrQt9C10LzQv9C70Y/RgCDRhtC10LvQtdCy0L7Qs9C+INC+0LHRitC10LrRgtCwLlxuICAgICAqIEBwYXJhbSB0YXJnZXQudGFyZ2V0INCt0LrQt9C10LzQv9C70Y/RgCDRhtC10LvQtdCy0L7Qs9C+INC+0LHRitC10LrRgtCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbk1hcFJlYWR5SGFuZGxlKHsgdGFyZ2V0IH06IFlhUmVhZHlFdmVudDx5bWFwcy5NYXA+KTogdm9pZCB7XG4gICAgICAgIHRoaXMueWFNYXAgPSB0YXJnZXQ7XG5cbiAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1BsYWNlbWFyaykge1xuICAgICAgICAgICAgdGFyZ2V0Lmdlb09iamVjdHMuYWRkKHRoaXMuYWRkcmVzc1BsYWNlbWFyayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuYWRkcmVzc1BsYWNlbWFyay5nZW9tZXRyeT8uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIGlmIChib3VuZHMpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0Qm91bmRzKGJvdW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQstGL0LHQvtGA0LAg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbiDQntCx0YrQtdC60YIg0L/QvtC00YHQutCw0LfQutC4INCw0YDQtdGB0LAuXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb246IFNjU3VnZ2VzdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoJ2FkZHJlc3NTdHJpbmcnIGluIHN1Z2dlc3Rpb24gJiYgc3VnZ2VzdGlvbi5nZW9Db29yZGluYXRlcykge1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gW3N1Z2dlc3Rpb24uZ2VvQ29vcmRpbmF0ZXMubGF0LCBzdWdnZXN0aW9uLmdlb0Nvb3JkaW5hdGVzLmxvbmddLm1hcCgoY29vcmQpID0+IFNjTnVtYmVySGVscGVyLnJvdW5kQ29vcmRpbmF0ZShjb29yZCkpO1xuXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NQbGFjZW1hcmsgPz89IHRoaXMuY3JlYXRlUGxhY2VtYXJrKGNvb3Jkcyk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0R2VvQ29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnlhTWFwPy5nZW9PYmplY3RzLmdldExlbmd0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55YU1hcD8uZ2VvT2JqZWN0cy5hZGQodGhpcy5hZGRyZXNzUGxhY2VtYXJrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5hZGRyZXNzUGxhY2VtYXJrLmdlb21ldHJ5Py5nZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgaWYgKGJvdW5kcykge1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldFpvb20oMTcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIGFkZHJlc3NQbGFjZW1hcmt9INGC0L7Rh9C60YMg0L3QsCDQvtC/0YDQtdC00LXQu9GR0L3QvdGL0LUg0LrQvtC+0YDQtNC40L3QsNGC0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29vcmRzINCa0L7QvtGA0LTQuNC90LDRgtGLINGC0L7Rh9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRHZW9Db29yZGluYXRlcyhjb29yZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFkZHJlc3NQbGFjZW1hcmspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1BsYWNlbWFyay5nZW9tZXRyeT8uc2V0Q29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhdDogY29vcmRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsb25nOiBjb29yZHNbMV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIGFkZHJlc3NQbGFjZW1hcmt9INGC0L7Rh9C60YMg0L3QsCDQvtC/0YDQtdC00LXQu9GR0L3QvdGL0LUg0LrQvtC+0YDQtNC40L3QsNGC0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVHZW9Db29yZGluYXRlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1BsYWNlbWFyaykge1xuICAgICAgICAgICAgdGhpcy55YU1hcD8uZ2VvT2JqZWN0cy5yZW1vdmUodGhpcy5hZGRyZXNzUGxhY2VtYXJrKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbG9uZzogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldENlbnRlcih0aGlzLmRlZmF1bHRDZW50ZXJNYXApO1xuICAgICAgICAgICAgdGhpcy55YU1hcD8uc2V0Wm9vbSh0aGlzLmRlZmF1bHRab29tTWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC+0LHRitC10LrRgiDRgtC+0YfQutC4INC4INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINGB0L7QsdGL0YLQuNGPINC00LvRjyDQvdC10LPQvi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb29yZHMg0JrQvtC+0YDQtNC40L3QsNGC0Ysg0YLQvtGH0LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVBsYWNlbWFyayhjb29yZHM6IG51bWJlcltdKTogeW1hcHMuUGxhY2VtYXJrIHtcbiAgICAgICAgY29uc3QgcGxhY2VtYXJrID0gbmV3IHltYXBzLlBsYWNlbWFyayhcbiAgICAgICAgICAgIGNvb3JkcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpY29uQ2FwdGlvbjogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByZXNldDogJ2lzbGFuZHMnLFxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBwbGFjZW1hcmsuZXZlbnRzLmFkZCgnZHJhZ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkID0gdGhpcy5hZGRyZXNzUGxhY2VtYXJrPy5nZW9tZXRyeT8uZ2V0Q29vcmRpbmF0ZXMoKTtcblxuICAgICAgICAgICAgaWYgKGNvb3JkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHZW9Db29yZGluYXRlcyhjb29yZC5tYXAoKHZhbHVlKSA9PiBTY051bWJlckhlbHBlci5yb3VuZENvb3JkaW5hdGUodmFsdWUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwbGFjZW1hcms7XG4gICAgfVxufVxuIiwiQGxldCBpc0VuYWJsZWRBZGREZWxpdmVyeUFkZHJlc3MgPSBpc0RlZmF1bHRDb3VudHJ5IHwgYXN5bmM7XG5cbkBpZiAoaXNFbmFibGVkQWRkRGVsaXZlcnlBZGRyZXNzKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3dcIj5cbiAgICAgICAgPGZvcm1cbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAobmdTdWJtaXQpPVwib25TdWJtaXQkLm5leHQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgIDx0dWktaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW3BzZXVkb0ludmFsaWRdPVwiKGFkZHJlc3NDb250cm9sLnZhbGlkICYmIGZvcm0uY29udHJvbHMuY29vcmRpbmF0ZXMuaW52YWxpZCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4XG4gICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2xpY2spPVwib25TZWxlY3RlZEFkZHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkTGVnYWN5XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWRkcmVzc0NvbnRyb2wudmFsaWQgJiYgZm9ybS5jb250cm9scy5jb29yZGluYXRlcy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I9XCLQktGL0LHQtdGA0LjRgtC1INCy0LDRgNC40LDQvdGCINC40Lcg0YHQv9C40YHQutCwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY29udGFjdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGdyb3cgZmxleC1jb2wgZ2FwLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidy1mdWxsIGZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+OjwvcD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCkLtCYLtCeLlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgINCkLtCYLtCeLlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5maW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAg0KLQtdC70LXRhNC+0L1cbiAgICAgICAgICAgICAgICAgICAgPHR1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSW5wdXRQaG9uZUludGVybmF0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY291bnRyeVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY291bnRyaWVzXT1cIihjb3VudHJpZXMgfCB0dWlTb3J0Q291bnRyaWVzIHwgYXN5bmMpIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCU0L7Qu9C20L3QvtGB0YLRjFxuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCI+INCU0L7Qu9C20L3QvtGB0YLRjCA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtOFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uU3RhcnRdPVwiaXNNb2JpbGUgPyAnQHR1aS54JyA6ICdAdHVpLngnXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQntGC0LzQtdC90LBcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbaWNvblN0YXJ0XT1cImlzTW9iaWxlID8gJ0B0dWkuc2F2ZScgOiAnQHR1aS5zYXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIhIShsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIC16LTEwIGZsZXggc2l6ZS1mdWxsIG1kOnctMS8yXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3otMCByZWxhdGl2ZSc6IGFkZHJlc3NQbGFjZW1hcmsgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtYXV0b1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTUwJzogZm9ybS5jb250cm9scy5jb29yZGluYXRlcy5pbnZhbGlkIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx5YS1tYXBcbiAgICAgICAgICAgICAgICAgICAgW3pvb21dPVwiMTFcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwieyBjb250cm9sczogW10gfVwiXG4gICAgICAgICAgICAgICAgICAgIChyZWFkeSk9XCJvbk1hcFJlYWR5SGFuZGxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgQGxldCBoZWxwQ29udGFjdHMgPSB1c2VySGVscENvbnRhY3RzJCB8IGFzeW5jO1xuXG4gICAgQGlmIChoZWxwQ29udGFjdHMgJiYgaGVscENvbnRhY3RzLmxlbmd0aCkge1xuICAgICAgICA8dHVpLXB1c2hcbiAgICAgICAgICAgIHR5cGU9XCLQp9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0LDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4LCDRgdCy0Y/QttC40YLQtdGB0Ywg0YEg0L3QsNC80LhcIlxuICAgICAgICAgICAgY2xhc3M9XCIhdy1hdXRvXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHR1aS1pY29uIGljb249XCJAdHVpLm1lc3NhZ2Utc3F1YXJlXCIgLz5cbiAgICAgICAgICAgIDxzYy1tYW5hZ2VyLWNhcmQgW21hbmFnZXJdPVwiaGVscENvbnRhY3RzWzBdXCIgLz5cbiAgICAgICAgPC90dWktcHVzaD5cbiAgICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, inject, input, output, signal } from '@angular/core';
3
3
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { RouterModule } from '@angular/router';
5
- import { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';
5
+ import { ScNumberHelper, SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';
6
6
  import { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';
7
7
  import { TuiAutoFocus } from '@taiga-ui/cdk';
8
8
  import { TuiAppearance, TuiButton, TuiFormatNumberPipe, TuiHint, TuiHintDirective, TuiHintDriver, TuiHintHover, tuiHintOptionsProvider, TuiHintPosition, TuiIcon, TuiLink, tuiTextfieldOptionsProvider, } from '@taiga-ui/core';
@@ -32,6 +32,10 @@ export class ScOrderItemComponent extends AbstractScPriceCard {
32
32
  * Событие нажатия на кнопку редактирования конфигурации.
33
33
  */
34
34
  this.clickSettings = output();
35
+ /**
36
+ * Настройки вывода сумм в рублях.
37
+ */
38
+ this.moneyFormat = ScNumberHelper.getMoneyFormat();
35
39
  /**
36
40
  * Сервис диалогового окна предварительного просмотра.
37
41
  */
@@ -66,7 +70,7 @@ export class ScOrderItemComponent extends AbstractScPriceCard {
66
70
  appearance: signal('textfield'),
67
71
  }),
68
72
  tuiHintOptionsProvider({ direction: 'top', showDelay: 100, hideDelay: 100 }),
69
- ], usesInheritance: true, ngImport: i0, template: "@if (product && orderItem) {\n <div class=\"@container relative flex w-full gap-4 rounded-xl p-1 text-body-s hover:bg-tui-background-neutral-1\">\n <sc-noindex-wrapper>\n @let isDisabled = product.isHidden || product.isNull;\n <sc-hover-image-carousel\n (click)=\"isDisabled ? null : clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"aspect-square w-24 shrink-0 cursor-pointer self-start\"\n />\n <div class=\"flex w-full flex-col gap-y-1 gap-x-4 @5xl:flex-row @5xl:items-center @5xl:gap-5\">\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </div>\n <div class=\"flex flex-col gap-1\">\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n [class.disabled]=\"isDisabled\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n @if (product.supplierSku) {\n <span class=\"text-tui-text-02\"> \u0410\u0440\u0442\u0438\u043A\u0443\u043B \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F: {{ product.supplierSku }} </span>\n }\n @if (product.pack) {\n <div class=\"flex items-center gap-1 text-tui-text-02\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n @if (product.ignoreMinCountCheck) {\n <tui-icon\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n />\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n }\n </div>\n }\n\n <sc-cost-with-discount\n scPrint=\"cost\"\n [product]=\"product\"\n />\n </div>\n @if (orderItem.specificationImgUrl) {\n <a\n tuiLink\n (click)=\"showSpecification(specificationPreview)\"\n [class.disabled]=\"isDisabled\"\n >\n \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F\n </a>\n }\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"grid grid-cols-1 @lg:grid-cols-3 gap-2 @2xl:gap-4 @2xl:grid-rows-1\">\n <div class=\"grid grid-cols-1 items-center @lg:gap-2 @2xl:grid-cols-2 @lg:col-span-2\">\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls() && showQuantityControl) {\n <!-- \u041F\u043E\u043B\u0435 \u0432\u0432\u043E\u0434\u0430 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-input-quantity\n #inputQuantity\n [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [showCross]=\"false\"\n [isDisabled]=\"isDisabled\"\n [step]=\"ScUnitsHelper.getProductMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"showLoader()\"\n (clickClearEvent)=\"clickClearEvent.emit(orderItem)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-32 shrink-0\"\n />\n } @else {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n >\n <div class=\"!text-body-m text-start\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E:\n <strong> {{ orderItem.quantity }} \u0448\u0442.</strong>\n </div>\n </button>\n }\n\n @let showAdditionalInfo = orderItem.configurator || orderItem.height || orderItem.length || orderItem.width || orderItem.marker;\n @if (showAdditionalInfo) {\n <div class=\"flex items-center gap-2 @lg:gap-3 max-w-min\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls()) {\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n [disabled]=\"isDisabled\"\n [loading]=\"showLoader()\"\n (click)=\"clickSettings.emit()\"\n size=\"s\"\n [appearance]=\"isConfiguratorHintVisible() ? 'primary' : 'secondary'\"\n class=\"shrink-0\"\n ></button>\n }\n\n <!-- \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435. -->\n <div\n class=\"flex flex-col gap-x-1 text-tui-base-07\"\n [class.text-body-m]=\"!isShowEditControls()\"\n >\n @if (orderItem.marker) {\n <p>\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ orderItem.marker }}</p>\n }\n @if (orderItem.width) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0448\u0438\u0440\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0428\u0438\u0440\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.width }} \u043C.</span>\n </button>\n }\n @if (orderItem.height) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u044B\u0441\u043E\u0442\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0412\u044B\u0441\u043E\u0442\u0430: <span class=\"text-body-s-bold\">{{ orderItem.height }} \u043C.</span>\n </button>\n } @else if (orderItem.length) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0434\u043B\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0414\u043B\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.length }} \u043C.</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- \u0421\u0443\u043C\u043C\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 \u0438 \u0441\u043A\u043B\u0430\u0434\u0441\u043A\u043E\u0435 \u043D\u0430\u043B\u0438\u0447\u0438\u0435. -->\n <div\n scPrint=\"cost\"\n class=\"flex min-w-[11rem] flex-col @lg:justify-end @2xl:!justify-center text-body-m\"\n >\n <p class=\"whitespace-nowrap\">\n \u0421\u0443\u043C\u043C\u0430:\n <strong> {{ orderItem.costRub | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}</strong>\n </p>\n <sc-price-warehouse-stock\n scPrint=\"defaultNoPrint\"\n [product]=\"product\"\n />\n </div>\n </div>\n </div>\n </sc-noindex-wrapper>\n </div>\n} @else {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"], outputs: ["tuiHintVisible"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: TuiHighlight, selector: "[tuiHighlight]", inputs: ["tuiHighlight", "tuiHighlightColor"] }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "component", type: ScHoverImageCarouselComponent, selector: "sc-hover-image-carousel", inputs: ["images", "isShowActions", "productName"] }, { kind: "component", type: CostWithDiscountComponent, selector: "sc-cost-with-discount", inputs: ["product", "size"] }, { kind: "component", type: ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "component", type: ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "ignoreStepValidators", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "pipe", type: TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "component", type: i5.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable", "initialScale"] }, { kind: "directive", type: i5.TuiPreviewAction, selector: "[tuiPreviewAction]" }, { kind: "component", type: ScNoindexWrapperComponent, selector: "sc-noindex-wrapper" }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
73
+ ], usesInheritance: true, ngImport: i0, template: "@if (product && orderItem) {\n <div class=\"@container relative flex w-full gap-4 rounded-xl p-1 text-body-s hover:bg-tui-background-neutral-1\">\n <sc-noindex-wrapper>\n @let isDisabled = product.isHidden || product.isNull;\n <sc-hover-image-carousel\n (click)=\"isDisabled ? null : clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"aspect-square w-24 shrink-0 cursor-pointer self-start\"\n />\n <div class=\"flex w-full flex-col gap-y-1 gap-x-4 @5xl:flex-row @5xl:items-center @5xl:gap-5\">\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </div>\n <div class=\"flex flex-col gap-1\">\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n [class.disabled]=\"isDisabled\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n @if (product.supplierSku) {\n <span class=\"text-tui-text-02\"> \u0410\u0440\u0442\u0438\u043A\u0443\u043B \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F: {{ product.supplierSku }} </span>\n }\n @if (product.pack) {\n <div class=\"flex items-center gap-1 text-tui-text-02\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n @if (product.ignoreMinCountCheck) {\n <tui-icon\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n />\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n }\n </div>\n }\n\n <sc-cost-with-discount\n scPrint=\"cost\"\n [product]=\"product\"\n />\n </div>\n @if (orderItem.specificationImgUrl) {\n <a\n tuiLink\n (click)=\"showSpecification(specificationPreview)\"\n [class.disabled]=\"isDisabled\"\n >\n \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F\n </a>\n }\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"grid grid-cols-1 @lg:grid-cols-3 gap-2 @2xl:gap-4 @2xl:grid-rows-1\">\n <div class=\"grid grid-cols-1 items-center @lg:gap-2 @2xl:grid-cols-2 @lg:col-span-2\">\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls() && showQuantityControl) {\n <!-- \u041F\u043E\u043B\u0435 \u0432\u0432\u043E\u0434\u0430 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-input-quantity\n #inputQuantity\n [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [showCross]=\"false\"\n [isDisabled]=\"isDisabled\"\n [step]=\"ScUnitsHelper.getProductMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"showLoader()\"\n (clickClearEvent)=\"clickClearEvent.emit(orderItem)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-32 shrink-0\"\n />\n } @else {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n >\n <div class=\"!text-body-m text-start\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E:\n <strong> {{ orderItem.quantity }} \u0448\u0442.</strong>\n </div>\n </button>\n }\n\n @let showAdditionalInfo = orderItem.configurator || orderItem.height || orderItem.length || orderItem.width || orderItem.marker;\n @if (showAdditionalInfo) {\n <div class=\"flex items-center gap-2 @lg:gap-3 max-w-min\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls()) {\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n [disabled]=\"isDisabled\"\n [loading]=\"showLoader()\"\n (click)=\"clickSettings.emit()\"\n size=\"s\"\n [appearance]=\"isConfiguratorHintVisible() ? 'primary' : 'secondary'\"\n class=\"shrink-0\"\n ></button>\n }\n\n <!-- \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435. -->\n <div\n class=\"flex flex-col gap-x-1 text-tui-base-07\"\n [class.text-body-m]=\"!isShowEditControls()\"\n >\n @if (orderItem.marker) {\n <p>\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ orderItem.marker }}</p>\n }\n @if (orderItem.width) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0448\u0438\u0440\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0428\u0438\u0440\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.width }} \u043C.</span>\n </button>\n }\n @if (orderItem.height) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u044B\u0441\u043E\u0442\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0412\u044B\u0441\u043E\u0442\u0430: <span class=\"text-body-s-bold\">{{ orderItem.height }} \u043C.</span>\n </button>\n } @else if (orderItem.length) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0434\u043B\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0414\u043B\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.length }} \u043C.</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- \u0421\u0443\u043C\u043C\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 \u0438 \u0441\u043A\u043B\u0430\u0434\u0441\u043A\u043E\u0435 \u043D\u0430\u043B\u0438\u0447\u0438\u0435. -->\n <div\n scPrint=\"cost\"\n class=\"flex min-w-[11rem] flex-col @lg:justify-end @2xl:!justify-center text-body-m\"\n >\n <p class=\"whitespace-nowrap\">\n \u0421\u0443\u043C\u043C\u0430:\n <strong> {{ orderItem.costRub | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</strong>\n </p>\n <sc-price-warehouse-stock\n scPrint=\"defaultNoPrint\"\n [product]=\"product\"\n />\n </div>\n </div>\n </div>\n </sc-noindex-wrapper>\n </div>\n} @else {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"], outputs: ["tuiHintVisible"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: TuiHighlight, selector: "[tuiHighlight]", inputs: ["tuiHighlight", "tuiHighlightColor"] }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "component", type: ScHoverImageCarouselComponent, selector: "sc-hover-image-carousel", inputs: ["images", "isShowActions", "productName"] }, { kind: "component", type: CostWithDiscountComponent, selector: "sc-cost-with-discount", inputs: ["product", "size"] }, { kind: "component", type: ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "component", type: ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "ignoreStepValidators", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "pipe", type: TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "component", type: i5.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable", "initialScale"] }, { kind: "directive", type: i5.TuiPreviewAction, selector: "[tuiPreviewAction]" }, { kind: "component", type: ScNoindexWrapperComponent, selector: "sc-noindex-wrapper" }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
70
74
  }
71
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemComponent, decorators: [{
72
76
  type: Component,
@@ -103,6 +107,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
103
107
  appearance: signal('textfield'),
104
108
  }),
105
109
  tuiHintOptionsProvider({ direction: 'top', showDelay: 100, hideDelay: 100 }),
106
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (product && orderItem) {\n <div class=\"@container relative flex w-full gap-4 rounded-xl p-1 text-body-s hover:bg-tui-background-neutral-1\">\n <sc-noindex-wrapper>\n @let isDisabled = product.isHidden || product.isNull;\n <sc-hover-image-carousel\n (click)=\"isDisabled ? null : clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"aspect-square w-24 shrink-0 cursor-pointer self-start\"\n />\n <div class=\"flex w-full flex-col gap-y-1 gap-x-4 @5xl:flex-row @5xl:items-center @5xl:gap-5\">\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </div>\n <div class=\"flex flex-col gap-1\">\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n [class.disabled]=\"isDisabled\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n @if (product.supplierSku) {\n <span class=\"text-tui-text-02\"> \u0410\u0440\u0442\u0438\u043A\u0443\u043B \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F: {{ product.supplierSku }} </span>\n }\n @if (product.pack) {\n <div class=\"flex items-center gap-1 text-tui-text-02\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n @if (product.ignoreMinCountCheck) {\n <tui-icon\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n />\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n }\n </div>\n }\n\n <sc-cost-with-discount\n scPrint=\"cost\"\n [product]=\"product\"\n />\n </div>\n @if (orderItem.specificationImgUrl) {\n <a\n tuiLink\n (click)=\"showSpecification(specificationPreview)\"\n [class.disabled]=\"isDisabled\"\n >\n \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F\n </a>\n }\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"grid grid-cols-1 @lg:grid-cols-3 gap-2 @2xl:gap-4 @2xl:grid-rows-1\">\n <div class=\"grid grid-cols-1 items-center @lg:gap-2 @2xl:grid-cols-2 @lg:col-span-2\">\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls() && showQuantityControl) {\n <!-- \u041F\u043E\u043B\u0435 \u0432\u0432\u043E\u0434\u0430 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-input-quantity\n #inputQuantity\n [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [showCross]=\"false\"\n [isDisabled]=\"isDisabled\"\n [step]=\"ScUnitsHelper.getProductMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"showLoader()\"\n (clickClearEvent)=\"clickClearEvent.emit(orderItem)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-32 shrink-0\"\n />\n } @else {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n >\n <div class=\"!text-body-m text-start\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E:\n <strong> {{ orderItem.quantity }} \u0448\u0442.</strong>\n </div>\n </button>\n }\n\n @let showAdditionalInfo = orderItem.configurator || orderItem.height || orderItem.length || orderItem.width || orderItem.marker;\n @if (showAdditionalInfo) {\n <div class=\"flex items-center gap-2 @lg:gap-3 max-w-min\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls()) {\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n [disabled]=\"isDisabled\"\n [loading]=\"showLoader()\"\n (click)=\"clickSettings.emit()\"\n size=\"s\"\n [appearance]=\"isConfiguratorHintVisible() ? 'primary' : 'secondary'\"\n class=\"shrink-0\"\n ></button>\n }\n\n <!-- \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435. -->\n <div\n class=\"flex flex-col gap-x-1 text-tui-base-07\"\n [class.text-body-m]=\"!isShowEditControls()\"\n >\n @if (orderItem.marker) {\n <p>\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ orderItem.marker }}</p>\n }\n @if (orderItem.width) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0448\u0438\u0440\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0428\u0438\u0440\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.width }} \u043C.</span>\n </button>\n }\n @if (orderItem.height) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u044B\u0441\u043E\u0442\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0412\u044B\u0441\u043E\u0442\u0430: <span class=\"text-body-s-bold\">{{ orderItem.height }} \u043C.</span>\n </button>\n } @else if (orderItem.length) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0434\u043B\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0414\u043B\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.length }} \u043C.</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- \u0421\u0443\u043C\u043C\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 \u0438 \u0441\u043A\u043B\u0430\u0434\u0441\u043A\u043E\u0435 \u043D\u0430\u043B\u0438\u0447\u0438\u0435. -->\n <div\n scPrint=\"cost\"\n class=\"flex min-w-[11rem] flex-col @lg:justify-end @2xl:!justify-center text-body-m\"\n >\n <p class=\"whitespace-nowrap\">\n \u0421\u0443\u043C\u043C\u0430:\n <strong> {{ orderItem.costRub | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}</strong>\n </p>\n <sc-price-warehouse-stock\n scPrint=\"defaultNoPrint\"\n [product]=\"product\"\n />\n </div>\n </div>\n </div>\n </sc-noindex-wrapper>\n </div>\n} @else {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n}\n" }]
110
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (product && orderItem) {\n <div class=\"@container relative flex w-full gap-4 rounded-xl p-1 text-body-s hover:bg-tui-background-neutral-1\">\n <sc-noindex-wrapper>\n @let isDisabled = product.isHidden || product.isNull;\n <sc-hover-image-carousel\n (click)=\"isDisabled ? null : clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"aspect-square w-24 shrink-0 cursor-pointer self-start\"\n />\n <div class=\"flex w-full flex-col gap-y-1 gap-x-4 @5xl:flex-row @5xl:items-center @5xl:gap-5\">\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </div>\n <div class=\"flex flex-col gap-1\">\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n [class.disabled]=\"isDisabled\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n @if (product.supplierSku) {\n <span class=\"text-tui-text-02\"> \u0410\u0440\u0442\u0438\u043A\u0443\u043B \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F: {{ product.supplierSku }} </span>\n }\n @if (product.pack) {\n <div class=\"flex items-center gap-1 text-tui-text-02\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n @if (product.ignoreMinCountCheck) {\n <tui-icon\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n />\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n }\n </div>\n }\n\n <sc-cost-with-discount\n scPrint=\"cost\"\n [product]=\"product\"\n />\n </div>\n @if (orderItem.specificationImgUrl) {\n <a\n tuiLink\n (click)=\"showSpecification(specificationPreview)\"\n [class.disabled]=\"isDisabled\"\n >\n \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F\n </a>\n }\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"grid grid-cols-1 @lg:grid-cols-3 gap-2 @2xl:gap-4 @2xl:grid-rows-1\">\n <div class=\"grid grid-cols-1 items-center @lg:gap-2 @2xl:grid-cols-2 @lg:col-span-2\">\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls() && showQuantityControl) {\n <!-- \u041F\u043E\u043B\u0435 \u0432\u0432\u043E\u0434\u0430 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-input-quantity\n #inputQuantity\n [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [showCross]=\"false\"\n [isDisabled]=\"isDisabled\"\n [step]=\"ScUnitsHelper.getProductMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"showLoader()\"\n (clickClearEvent)=\"clickClearEvent.emit(orderItem)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-32 shrink-0\"\n />\n } @else {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n >\n <div class=\"!text-body-m text-start\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E:\n <strong> {{ orderItem.quantity }} \u0448\u0442.</strong>\n </div>\n </button>\n }\n\n @let showAdditionalInfo = orderItem.configurator || orderItem.height || orderItem.length || orderItem.width || orderItem.marker;\n @if (showAdditionalInfo) {\n <div class=\"flex items-center gap-2 @lg:gap-3 max-w-min\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (isShowEditControls()) {\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n [disabled]=\"isDisabled\"\n [loading]=\"showLoader()\"\n (click)=\"clickSettings.emit()\"\n size=\"s\"\n [appearance]=\"isConfiguratorHintVisible() ? 'primary' : 'secondary'\"\n class=\"shrink-0\"\n ></button>\n }\n\n <!-- \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435. -->\n <div\n class=\"flex flex-col gap-x-1 text-tui-base-07\"\n [class.text-body-m]=\"!isShowEditControls()\"\n >\n @if (orderItem.marker) {\n <p>\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ orderItem.marker }}</p>\n }\n @if (orderItem.width) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0448\u0438\u0440\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0428\u0438\u0440\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.width }} \u043C.</span>\n </button>\n }\n @if (orderItem.height) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u044B\u0441\u043E\u0442\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0412\u044B\u0441\u043E\u0442\u0430: <span class=\"text-body-s-bold\">{{ orderItem.height }} \u043C.</span>\n </button>\n } @else if (orderItem.length) {\n <button\n [appearance]=\"isShowEditControls() ? 'action-grayscale' : ''\"\n tuiTheme=\"light\"\n tuiHint=\"\u0414\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0434\u043B\u0438\u043D\u044B \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043E\u0440\u043E\u043C\"\n (tuiHintVisible)=\"configuratorHintVisible($event)\"\n tuiLink\n [style.text-decoration-line]=\"isShowEditControls() ? 'underline' : 'none'\"\n [class.pointer-events-none]=\"!isShowEditControls()\"\n class=\"text-body-s self-start whitespace-nowrap\"\n >\n \u0414\u043B\u0438\u043D\u0430: <span class=\"text-body-s-bold\">{{ orderItem.length }} \u043C.</span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- \u0421\u0443\u043C\u043C\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 \u0438 \u0441\u043A\u043B\u0430\u0434\u0441\u043A\u043E\u0435 \u043D\u0430\u043B\u0438\u0447\u0438\u0435. -->\n <div\n scPrint=\"cost\"\n class=\"flex min-w-[11rem] flex-col @lg:justify-end @2xl:!justify-center text-body-m\"\n >\n <p class=\"whitespace-nowrap\">\n \u0421\u0443\u043C\u043C\u0430:\n <strong> {{ orderItem.costRub | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</strong>\n </p>\n <sc-price-warehouse-stock\n scPrint=\"defaultNoPrint\"\n [product]=\"product\"\n />\n </div>\n </div>\n </div>\n </sc-noindex-wrapper>\n </div>\n} @else {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n}\n" }]
107
111
  }] });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbS9zYy1vcmRlci1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtL3NjLW9yZGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQW9CLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDSCxhQUFhLEVBQ2IsU0FBUyxFQUVULG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixPQUFPLEVBQ1AsT0FBTyxFQUNQLDJCQUEyQixHQUM5QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtC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LHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBPdXRwdXRFbWl0dGVyUmVmLCBzaWduYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTRUFSQ0hfVEVSTV9QUk9WSURFUlMgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aUN1cnJlbmN5UGlwZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZSc7XG5pbXBvcnQgeyBUdWlBdXRvRm9jdXMgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7XG4gICAgVHVpQXBwZWFyYW5jZSxcbiAgICBUdWlCdXR0b24sXG4gICAgVHVpRGlhbG9nQ29udGV4dCxcbiAgICBUdWlGb3JtYXROdW1iZXJQaXBlLFxuICAgIFR1aUhpbnQsXG4gICAgVHVpSGludERpcmVjdGl2ZSxcbiAgICBUdWlIaW50RHJpdmVyLFxuICAgIFR1aUhpbnRIb3ZlcixcbiAgICB0dWlIaW50T3B0aW9uc1Byb3ZpZGVyLFxuICAgIFR1aUhpbnRQb3NpdGlvbixcbiAgICBUdWlJY29uLFxuICAgIFR1aUxpbmssXG4gICAgdHVpVGV4dGZpZWxkT3B0aW9uc1Byb3ZpZGVyLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlCdXR0b25Mb2FkaW5nLCBUdWlIaWdobGlnaHQsIFR1aVByZXZpZXcsIFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeSc7XG5cbmltcG9ydCB7IENvc3RXaXRoRGlzY291bnRDb21wb25lbnQsIFNjSG92ZXJJbWFnZUNhcm91c2VsQ29tcG9uZW50LCBTY0lucHV0UXVhbnRpdHlDb21wb25lbnQsIFNjUHJpY2VXYXJlaG91c2VTdG9ja0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NhdGFsb2cnO1xuaW1wb3J0IHsgQWJzdHJhY3RTY1ByaWNlQ2FyZCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgU2NQcmludERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcHJpbnQvc2MtcHJpbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNjTm9pbmRleFdyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2luZGV4LXdyYXBwZXInO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGN0LvQtdC80LXQvdGC0LAg0LrQvtGA0LfQuNC90YsuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1vcmRlci1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtb3JkZXItaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlJY29uLFxuICAgICAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpSGludCxcbiAgICAgICAgVHVpTGluayxcbiAgICAgICAgVHVpSGlnaGxpZ2h0LFxuICAgICAgICBUdWlIaW50RHJpdmVyLFxuICAgICAgICBUdWlIaW50SG92ZXIsXG4gICAgICAgIFR1aUhpbnRQb3NpdGlvbixcbiAgICAgICAgVHVpSGludERpcmVjdGl2ZSxcbiAgICAgICAgVHVpQXV0b0ZvY3VzLFxuICAgICAgICBTY0hvdmVySW1hZ2VDYXJvdXNlbENvbXBvbmVudCxcbiAgICAgICAgQ29zdFdpdGhEaXNjb3VudENvbXBvbmVudCxcbiAgICAgICAgU2NQcmljZVdhcmVob3VzZVN0b2NrQ29tcG9uZW50LFxuICAgICAgICBTY0lucHV0UXVhbnRpdHlDb21wb25lbnQsXG4gICAgICAgIFR1aUN1cnJlbmN5UGlwZSxcbiAgICAgICAgVHVpRm9ybWF0TnVtYmVyUGlwZSxcbiAgICAgICAgVHVpUHJldmlldyxcbiAgICAgICAgU2NOb2luZGV4V3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgVHVpQXBwZWFyYW5jZSxcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgU2NQcmludERpcmVjdGl2ZSxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBTRUFSQ0hfVEVSTV9QUk9WSURFUlMsXG4gICAgICAgIHR1aVRleHRmaWVsZE9wdGlvbnNQcm92aWRlcih7XG4gICAgICAgICAgICBhcHBlYXJhbmNlOiBzaWduYWwoJ3RleHRmaWVsZCcpLFxuICAgICAgICB9KSxcbiAgICAgICAgdHVpSGludE9wdGlvbnNQcm92aWRlcih7IGRpcmVjdGlvbjogJ3RvcCcsIHNob3dEZWxheTogMTAwLCBoaWRlRGVsYXk6IDEwMCB9KSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY09yZGVySXRlbUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0U2NQcmljZUNhcmQge1xuICAgIC8qKlxuICAgICAqINCS0LjQtNC40LzQvtGB0YLRjCDQv9C+0LTRgdC60LDQt9C60Lgg0L/RgNC+INC40LfQvNC10L3QtdC90LjQtSDRgNCw0LfQvNC10YDQvtCyINGH0LXRgNC10Lcg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGALlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0NvbmZpZ3VyYXRvckhpbnRWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjbGlja1NldHRpbmdzOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+0LPQviDQv9GA0L7RgdC80L7RgtGA0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgPSBpbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDRjdC70LXQvNC10L3RgtGLINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGlzU2hvd0VkaXRDb250cm9scyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHQv9C10YbQuNGE0LjQutCw0YbQuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNwZWNpZmljYXRpb25QcmV2aWV3UmVmZXJlbmNlINCo0LDQsdC70L7QvSDRgdC/0LXRhtC40YTQuNC60LDRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNob3dTcGVjaWZpY2F0aW9uKHNwZWNpZmljYXRpb25QcmV2aWV3UmVmZXJlbmNlOiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0Pik6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlLm9wZW4oc3BlY2lmaWNhdGlvblByZXZpZXdSZWZlcmVuY2UpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDQv9C+0LrQsNC3INC/0L7QtNGB0LrQsNC30LrQuCDQv9C+INGA0LDQt9C80LXRgNCw0LwgKNGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGPINGBINC/0L7QtNGB0LLQtdGC0LrQvtC5INC60L3QvtC/0LrQuCDQvdCw0YHRgtGA0L7QtdC6KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpYmxlINCf0YDQuNC30L3QsNC6INCy0LjQtNC40LzQvtGB0YLQuCDQv9C+0LTRgdC60LDQt9C60LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyYXRvckhpbnRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaG93RWRpdENvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDb25maWd1cmF0b3JIaW50VmlzaWJsZS5zZXQodmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKHByb2R1Y3QgJiYgb3JkZXJJdGVtKSB7XG4gICAgPGRpdiBjbGFzcz1cIkBjb250YWluZXIgcmVsYXRpdmUgZmxleCB3LWZ1bGwgZ2FwLTQgcm91bmRlZC14bCBwLTEgdGV4dC1ib2R5LXMgaG92ZXI6YmctdHVpLWJhY2tncm91bmQtbmV1dHJhbC0xXCI+XG4gICAgICAgIDxzYy1ub2luZGV4LXdyYXBwZXI+XG4gICAgICAgICAgICBAbGV0IGlzRGlzYWJsZWQgPSBwcm9kdWN0LmlzSGlkZGVuIHx8IHByb2R1Y3QuaXNOdWxsO1xuICAgICAgICAgICAgPHNjLWhvdmVyLWltYWdlLWNhcm91c2VsXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRGlzYWJsZWQgPyBudWxsIDogY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICBbaW1hZ2VzXT1cIiFpc01vYmlsZSA/IGdldENhcmRJbWFnZVByZXZpZXdMaXN0KHByb2R1Y3QpIDogW2dldENhcmRJbWFnZVByZXZpZXcoKV1cIlxuICAgICAgICAgICAgICAgIFtpc1Nob3dBY3Rpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFzcGVjdC1zcXVhcmUgdy0yNCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBzZWxmLXN0YXJ0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLXktMSBnYXAteC00IEA1eGw6ZmxleC1yb3cgQDV4bDppdGVtcy1jZW50ZXIgQDV4bDpnYXAtNVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgZmxleC0xIGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaWdobGlnaHRdPVwiKHNlYXJjaCQgfCBhc3luYykgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LTAyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAg0JDRgNGC0LjQutGD0Ls6IHt7IHByb2R1Y3QuY29kZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiaHJlZiA/PyBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpSGlnaGxpZ2h0XT1cIihzZWFyY2gkIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIXRleHQtYm9keS1tLWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9kdWN0LnN1cHBsaWVyU2t1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LTAyXCI+INCQ0YDRgtC40LrRg9C7INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GPOiB7eyBwcm9kdWN0LnN1cHBsaWVyU2t1IH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJvZHVjdC5wYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtdHVpLXRleHQtMDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0J3QvtGA0LzQsCDRg9C/0LDQutC+0LLQutC4OiB7eyBwcm9kdWN0LnBhY2sgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9kdWN0Lmlnbm9yZU1pbkNvdW50Q2hlY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJAdHVpLnBhY2thZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaW50XT1cIm1pbkNvdW50SGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlIaW50RGlyZWN0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS14bCB0ZXh0LXR1aS10ZXh0LTAxIG9wYWNpdHktOTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWluQ291bnRIaW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCU0L7RgdGC0YPQv9C10L0g0LfQsNC60LDQtyA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQv9GA0L7QuNC30LLQvtC70YzQvdC+0LPQviA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQutC+0LvQuNGH0LXRgdGC0LLQsFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2MtY29zdC13aXRoLWRpc2NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NQcmludD1cImNvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cInByb2R1Y3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAob3JkZXJJdGVtLnNwZWNpZmljYXRpb25JbWdVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U3BlY2lmaWNhdGlvbihzcGVjaWZpY2F0aW9uUHJldmlldylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQodC/0LXRhtC40YTQuNC60LDRhtC40Y9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNzcGVjaWZpY2F0aW9uUHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1wcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdGF0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJvcmRlckl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybCBhcyBzcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJwcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJvcmRlckl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkueFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgQGxnOmdyaWQtY29scy0zIGdhcC0yIEAyeGw6Z2FwLTQgQDJ4bDpncmlkLXJvd3MtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBpdGVtcy1jZW50ZXIgQGxnOmdhcC0yIEAyeGw6Z3JpZC1jb2xzLTIgQGxnOmNvbC1zcGFuLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTaG93RWRpdENvbnRyb2xzKCkgJiYgc2hvd1F1YW50aXR5Q29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g0J/QvtC70LUg0LLQstC+0LTQsCDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1pbnB1dC1xdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRRdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpQXV0b0ZvY3VzXT1cImF1dG9Gb2N1c2VRdWFudGl0eUlucHV0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0Nyb3NzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cIlNjVW5pdHNIZWxwZXIuZ2V0UHJvZHVjdE11bHRpcGxpY2l0eShwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTdGVwVmFsaWRhdG9yc109XCJwcm9kdWN0Lmlnbm9yZU1pbkNvdW50Q2hlY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJzaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tDbGVhckV2ZW50KT1cImNsaWNrQ2xlYXJFdmVudC5lbWl0KG9yZGVySXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJpbnB1dFF1YW50aXR5Lm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQ/LmJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0zMiBzaHJpbmstMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiaXNTaG93RWRpdENvbnRyb2xzKCkgPyAnYWN0aW9uLWdyYXlzY2FsZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRoZW1lPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlIaW50PVwi0JTQu9GPINC40LfQvNC10L3QtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiF0ZXh0LWJvZHktbSB0ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQmtC+0LvQuNGH0LXRgdGC0LLQvjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+IHt7IG9yZGVySXRlbS5xdWFudGl0eSB9fSDRiNGCLjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBzaG93QWRkaXRpb25hbEluZm8gPSBvcmRlckl0ZW0uY29uZmlndXJhdG9yIHx8IG9yZGVySXRlbS5oZWlnaHQgfHwgb3JkZXJJdGVtLmxlbmd0aCB8fCBvcmRlckl0ZW0ud2lkdGggfHwgb3JkZXJJdGVtLm1hcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0FkZGl0aW9uYWxJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIEBsZzpnYXAtMyBtYXgtdy1taW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDQmtC90L7Qv9C60LAg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2hvd0VkaXRDb250cm9scygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuc2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJzaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja1NldHRpbmdzLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImlzQ29uZmlndXJhdG9ySGludFZpc2libGUoKSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNocmluay0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDRgtC+0LLQsNGA0LUuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLXgtMSB0ZXh0LXR1aS1iYXNlLTA3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LWJvZHktbV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9yZGVySXRlbS5tYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD7QnNCw0YDQutC40YDQvtCy0LrQsDoge3sgb3JkZXJJdGVtLm1hcmtlciB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAob3JkZXJJdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJpc1Nob3dFZGl0Q29udHJvbHMoKSA/ICdhY3Rpb24tZ3JheXNjYWxlJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUhpbnQ9XCLQlNC70Y8g0LjQt9C80LXQvdC10L3QuNGPINGI0LjRgNC40L3RiyDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS1zIHNlbGYtc3RhcnQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0KjQuNGA0LjQvdCwOiA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zLWJvbGRcIj57eyBvcmRlckl0ZW0ud2lkdGggfX0g0LwuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChvcmRlckl0ZW0uaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJpc1Nob3dFZGl0Q29udHJvbHMoKSA/ICdhY3Rpb24tZ3JheXNjYWxlJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUhpbnQ9XCLQlNC70Y8g0LjQt9C80LXQvdC10L3QuNGPINCy0YvRgdC+0YLRiyDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS1zIHNlbGYtc3RhcnQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JLRi9GB0L7RgtCwOiA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zLWJvbGRcIj57eyBvcmRlckl0ZW0uaGVpZ2h0IH19INC8Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKG9yZGVySXRlbS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ2FjdGlvbi1ncmF5c2NhbGUnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlUaGVtZT1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSGludD1cItCU0LvRjyDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9C40L3RiyDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS1zIHNlbGYtc3RhcnQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JTQu9C40L3QsDogPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktcy1ib2xkXCI+e3sgb3JkZXJJdGVtLmxlbmd0aCB9fSDQvC48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tINCh0YPQvNC80LAg0YLQvtCy0LDRgNCwINC4INGB0LrQu9Cw0LTRgdC60L7QtSDQvdCw0LvQuNGH0LjQtS4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4tdy1bMTFyZW1dIGZsZXgtY29sIEBsZzpqdXN0aWZ5LWVuZCBAMnhsOiFqdXN0aWZ5LWNlbnRlciB0ZXh0LWJvZHktbVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQodGD0LzQvNCwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+IHt7IG9yZGVySXRlbS5jb3N0UnViIHwgdHVpRm9ybWF0TnVtYmVyOiB7IHByZWNpc2lvbjogMiwgZGVjaW1hbFNlcGFyYXRvcjogJy4nLCByb3VuZGluZzogJ2NlaWwnIH0gfCBhc3luYyB9fSB7eyAnUlVCJyB8IHR1aUN1cnJlbmN5IH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NQcmludD1cImRlZmF1bHROb1ByaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdF09XCJwcm9kdWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2Mtbm9pbmRleC13cmFwcGVyPlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInR1aS1za2VsZXRvbiBmbGV4IGgtWzguMjVyZW1dIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bFwiPjwvZGl2PlxufVxuIl19
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbS9zYy1vcmRlci1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtL3NjLW9yZGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQW9CLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLFNBQVMsRUFFVCxtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsT0FBTyxFQUNQLE9BQU8sRUFDUCwyQkFBMkIsR0FDOUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsNEJBQTRCLEVB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LEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7cUJBQy9FLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgT3V0cHV0RW1pdHRlclJlZiwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2NOdW1iZXJIZWxwZXIsIFNFQVJDSF9URVJNX1BST1ZJREVSUyB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpQ3VycmVuY3lQaXBlIH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlJztcbmltcG9ydCB7IFR1aUF1dG9Gb2N1cyB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtcbiAgICBUdWlBcHBlYXJhbmNlLFxuICAgIFR1aUJ1dHRvbixcbiAgICBUdWlEaWFsb2dDb250ZXh0LFxuICAgIFR1aUZvcm1hdE51bWJlclBpcGUsXG4gICAgVHVpSGludCxcbiAgICBUdWlIaW50RGlyZWN0aXZlLFxuICAgIFR1aUhpbnREcml2ZXIsXG4gICAgVHVpSGludEhvdmVyLFxuICAgIHR1aUhpbnRPcHRpb25zUHJvdmlkZXIsXG4gICAgVHVpSGludFBvc2l0aW9uLFxuICAgIFR1aUljb24sXG4gICAgVHVpTGluayxcbiAgICB0dWlUZXh0ZmllbGRPcHRpb25zUHJvdmlkZXIsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUhpZ2hsaWdodCwgVHVpUHJldmlldywgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFR1aVRleHRmaWVsZENvbnRyb2xsZXJNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcblxuaW1wb3J0IHsgQ29zdFdpdGhEaXNjb3VudENvbXBvbmVudCwgU2NIb3ZlckltYWdlQ2Fyb3VzZWxDb21wb25lbnQsIFNjSW5wdXRRdWFudGl0eUNvbXBvbmVudCwgU2NQcmljZVdhcmVob3VzZVN0b2NrQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2F0YWxvZyc7XG5pbXBvcnQgeyBBYnN0cmFjdFNjUHJpY2VDYXJkIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBTY1ByaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wcmludC9zYy1wcmludC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2NOb2luZGV4V3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vaW5kZXgtd3JhcHBlcic7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC60LDRgNGC0L7Rh9C60Lgg0Y3Qu9C10LzQtdC90YLQsCDQutC+0YDQt9C40L3Riy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLW9yZGVyLWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUljb24sXG4gICAgICAgIFR1aVRleHRmaWVsZENvbnRyb2xsZXJNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBUdWlIaW50LFxuICAgICAgICBUdWlMaW5rLFxuICAgICAgICBUdWlIaWdobGlnaHQsXG4gICAgICAgIFR1aUhpbnREcml2ZXIsXG4gICAgICAgIFR1aUhpbnRIb3ZlcixcbiAgICAgICAgVHVpSGludFBvc2l0aW9uLFxuICAgICAgICBUdWlIaW50RGlyZWN0aXZlLFxuICAgICAgICBUdWlBdXRvRm9jdXMsXG4gICAgICAgIFNjSG92ZXJJbWFnZUNhcm91c2VsQ29tcG9uZW50LFxuICAgICAgICBDb3N0V2l0aERpc2NvdW50Q29tcG9uZW50LFxuICAgICAgICBTY1ByaWNlV2FyZWhvdXNlU3RvY2tDb21wb25lbnQsXG4gICAgICAgIFNjSW5wdXRRdWFudGl0eUNvbXBvbmVudCxcbiAgICAgICAgVHVpQ3VycmVuY3lQaXBlLFxuICAgICAgICBUdWlGb3JtYXROdW1iZXJQaXBlLFxuICAgICAgICBUdWlQcmV2aWV3LFxuICAgICAgICBTY05vaW5kZXhXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBUdWlBcHBlYXJhbmNlLFxuICAgICAgICBUdWlCdXR0b25Mb2FkaW5nLFxuICAgICAgICBTY1ByaW50RGlyZWN0aXZlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFNFQVJDSF9URVJNX1BST1ZJREVSUyxcbiAgICAgICAgdHVpVGV4dGZpZWxkT3B0aW9uc1Byb3ZpZGVyKHtcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6IHNpZ25hbCgndGV4dGZpZWxkJyksXG4gICAgICAgIH0pLFxuICAgICAgICB0dWlIaW50T3B0aW9uc1Byb3ZpZGVyKHsgZGlyZWN0aW9uOiAndG9wJywgc2hvd0RlbGF5OiAxMDAsIGhpZGVEZWxheTogMTAwIH0pLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjT3JkZXJJdGVtQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RTY1ByaWNlQ2FyZCB7XG4gICAgLyoqXG4gICAgICog0JLQuNC00LjQvNC+0YHRgtGMINC/0L7QtNGB0LrQsNC30LrQuCDQv9GA0L4g0LjQt9C80LXQvdC10L3QuNC1INGA0LDQt9C80LXRgNC+0LIg0YfQtdGA0LXQtyDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQ29uZmlndXJhdG9ySGludFZpc2libGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNsaWNrU2V0dGluZ3M6IE91dHB1dEVtaXR0ZXJSZWY8dm9pZD4gPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+0LPQviDQv9GA0L7RgdC80L7RgtGA0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgPSBpbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDRjdC70LXQvNC10L3RgtGLINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGlzU2hvd0VkaXRDb250cm9scyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHQv9C10YbQuNGE0LjQutCw0YbQuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNwZWNpZmljYXRpb25QcmV2aWV3UmVmZXJlbmNlINCo0LDQsdC70L7QvSDRgdC/0LXRhtC40YTQuNC60LDRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNob3dTcGVjaWZpY2F0aW9uKHNwZWNpZmljYXRpb25QcmV2aWV3UmVmZXJlbmNlOiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0Pik6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlLm9wZW4oc3BlY2lmaWNhdGlvblByZXZpZXdSZWZlcmVuY2UpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDQv9C+0LrQsNC3INC/0L7QtNGB0LrQsNC30LrQuCDQv9C+INGA0LDQt9C80LXRgNCw0LwgKNGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGPINGBINC/0L7QtNGB0LLQtdGC0LrQvtC5INC60L3QvtC/0LrQuCDQvdCw0YHRgtGA0L7QtdC6KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpYmxlINCf0YDQuNC30L3QsNC6INCy0LjQtNC40LzQvtGB0YLQuCDQv9C+0LTRgdC60LDQt9C60LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyYXRvckhpbnRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaG93RWRpdENvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDb25maWd1cmF0b3JIaW50VmlzaWJsZS5zZXQodmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKHByb2R1Y3QgJiYgb3JkZXJJdGVtKSB7XG4gICAgPGRpdiBjbGFzcz1cIkBjb250YWluZXIgcmVsYXRpdmUgZmxleCB3LWZ1bGwgZ2FwLTQgcm91bmRlZC14bCBwLTEgdGV4dC1ib2R5LXMgaG92ZXI6YmctdHVpLWJhY2tncm91bmQtbmV1dHJhbC0xXCI+XG4gICAgICAgIDxzYy1ub2luZGV4LXdyYXBwZXI+XG4gICAgICAgICAgICBAbGV0IGlzRGlzYWJsZWQgPSBwcm9kdWN0LmlzSGlkZGVuIHx8IHByb2R1Y3QuaXNOdWxsO1xuICAgICAgICAgICAgPHNjLWhvdmVyLWltYWdlLWNhcm91c2VsXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRGlzYWJsZWQgPyBudWxsIDogY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICBbaW1hZ2VzXT1cIiFpc01vYmlsZSA/IGdldENhcmRJbWFnZVByZXZpZXdMaXN0KHByb2R1Y3QpIDogW2dldENhcmRJbWFnZVByZXZpZXcoKV1cIlxuICAgICAgICAgICAgICAgIFtpc1Nob3dBY3Rpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFzcGVjdC1zcXVhcmUgdy0yNCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBzZWxmLXN0YXJ0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLXktMSBnYXAteC00IEA1eGw6ZmxleC1yb3cgQDV4bDppdGVtcy1jZW50ZXIgQDV4bDpnYXAtNVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgZmxleC0xIGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaWdobGlnaHRdPVwiKHNlYXJjaCQgfCBhc3luYykgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LTAyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAg0JDRgNGC0LjQutGD0Ls6IHt7IHByb2R1Y3QuY29kZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiaHJlZiA/PyBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpSGlnaGxpZ2h0XT1cIihzZWFyY2gkIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIXRleHQtYm9keS1tLWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9kdWN0LnN1cHBsaWVyU2t1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LTAyXCI+INCQ0YDRgtC40LrRg9C7INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GPOiB7eyBwcm9kdWN0LnN1cHBsaWVyU2t1IH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJvZHVjdC5wYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtdHVpLXRleHQtMDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0J3QvtGA0LzQsCDRg9C/0LDQutC+0LLQutC4OiB7eyBwcm9kdWN0LnBhY2sgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9kdWN0Lmlnbm9yZU1pbkNvdW50Q2hlY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJAdHVpLnBhY2thZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaW50XT1cIm1pbkNvdW50SGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlIaW50RGlyZWN0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS14bCB0ZXh0LXR1aS10ZXh0LTAxIG9wYWNpdHktOTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWluQ291bnRIaW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCU0L7RgdGC0YPQv9C10L0g0LfQsNC60LDQtyA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQv9GA0L7QuNC30LLQvtC70YzQvdC+0LPQviA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQutC+0LvQuNGH0LXRgdGC0LLQsFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2MtY29zdC13aXRoLWRpc2NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NQcmludD1cImNvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cInByb2R1Y3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAob3JkZXJJdGVtLnNwZWNpZmljYXRpb25JbWdVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U3BlY2lmaWNhdGlvbihzcGVjaWZpY2F0aW9uUHJldmlldylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQodC/0LXRhtC40YTQuNC60LDRhtC40Y9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNzcGVjaWZpY2F0aW9uUHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1wcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdGF0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJvcmRlckl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybCBhcyBzcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJwcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJvcmRlckl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkueFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgQGxnOmdyaWQtY29scy0zIGdhcC0yIEAyeGw6Z2FwLTQgQDJ4bDpncmlkLXJvd3MtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBpdGVtcy1jZW50ZXIgQGxnOmdhcC0yIEAyeGw6Z3JpZC1jb2xzLTIgQGxnOmNvbC1zcGFuLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTaG93RWRpdENvbnRyb2xzKCkgJiYgc2hvd1F1YW50aXR5Q29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g0J/QvtC70LUg0LLQstC+0LTQsCDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1pbnB1dC1xdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRRdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpQXV0b0ZvY3VzXT1cImF1dG9Gb2N1c2VRdWFudGl0eUlucHV0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0Nyb3NzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cIlNjVW5pdHNIZWxwZXIuZ2V0UHJvZHVjdE11bHRpcGxpY2l0eShwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZ25vcmVTdGVwVmFsaWRhdG9yc109XCJwcm9kdWN0Lmlnbm9yZU1pbkNvdW50Q2hlY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJzaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tDbGVhckV2ZW50KT1cImNsaWNrQ2xlYXJFdmVudC5lbWl0KG9yZGVySXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJpbnB1dFF1YW50aXR5Lm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQ/LmJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0zMiBzaHJpbmstMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiaXNTaG93RWRpdENvbnRyb2xzKCkgPyAnYWN0aW9uLWdyYXlzY2FsZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRoZW1lPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlIaW50PVwi0JTQu9GPINC40LfQvNC10L3QtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiF0ZXh0LWJvZHktbSB0ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQmtC+0LvQuNGH0LXRgdGC0LLQvjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+IHt7IG9yZGVySXRlbS5xdWFudGl0eSB9fSDRiNGCLjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBzaG93QWRkaXRpb25hbEluZm8gPSBvcmRlckl0ZW0uY29uZmlndXJhdG9yIHx8IG9yZGVySXRlbS5oZWlnaHQgfHwgb3JkZXJJdGVtLmxlbmd0aCB8fCBvcmRlckl0ZW0ud2lkdGggfHwgb3JkZXJJdGVtLm1hcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0FkZGl0aW9uYWxJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIEBsZzpnYXAtMyBtYXgtdy1taW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDQmtC90L7Qv9C60LAg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2hvd0VkaXRDb250cm9scygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuc2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJzaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja1NldHRpbmdzLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImlzQ29uZmlndXJhdG9ySGludFZpc2libGUoKSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNocmluay0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDRgtC+0LLQsNGA0LUuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLXgtMSB0ZXh0LXR1aS1iYXNlLTA3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LWJvZHktbV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9yZGVySXRlbS5tYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD7QnNCw0YDQutC40YDQvtCy0LrQsDoge3sgb3JkZXJJdGVtLm1hcmtlciB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAob3JkZXJJdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJpc1Nob3dFZGl0Q29udHJvbHMoKSA/ICdhY3Rpb24tZ3JheXNjYWxlJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUhpbnQ9XCLQlNC70Y8g0LjQt9C80LXQvdC10L3QuNGPINGI0LjRgNC40L3RiyDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS1zIHNlbGYtc3RhcnQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0KjQuNGA0LjQvdCwOiA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zLWJvbGRcIj57eyBvcmRlckl0ZW0ud2lkdGggfX0g0LwuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChvcmRlckl0ZW0uaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJpc1Nob3dFZGl0Q29udHJvbHMoKSA/ICdhY3Rpb24tZ3JheXNjYWxlJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUhpbnQ9XCLQlNC70Y8g0LjQt9C80LXQvdC10L3QuNGPINCy0YvRgdC+0YLRiyDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS1zIHNlbGYtc3RhcnQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JLRi9GB0L7RgtCwOiA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zLWJvbGRcIj57eyBvcmRlckl0ZW0uaGVpZ2h0IH19INC8Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKG9yZGVySXRlbS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ2FjdGlvbi1ncmF5c2NhbGUnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlUaGVtZT1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSGludD1cItCU0LvRjyDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9C40L3RiyDQstC+0YHQv9C+0LvRjNC30YPQudGC0LXRgdGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNC+0LxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVpSGludFZpc2libGUpPVwiY29uZmlndXJhdG9ySGludFZpc2libGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtZGVjb3JhdGlvbi1saW5lXT1cImlzU2hvd0VkaXRDb250cm9scygpID8gJ3VuZGVybGluZScgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNTaG93RWRpdENvbnRyb2xzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS1zIHNlbGYtc3RhcnQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JTQu9C40L3QsDogPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktcy1ib2xkXCI+e3sgb3JkZXJJdGVtLmxlbmd0aCB9fSDQvC48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tINCh0YPQvNC80LAg0YLQvtCy0LDRgNCwINC4INGB0LrQu9Cw0LTRgdC60L7QtSDQvdCw0LvQuNGH0LjQtS4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4tdy1bMTFyZW1dIGZsZXgtY29sIEBsZzpqdXN0aWZ5LWVuZCBAMnhsOiFqdXN0aWZ5LWNlbnRlciB0ZXh0LWJvZHktbVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQodGD0LzQvNCwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+IHt7IG9yZGVySXRlbS5jb3N0UnViIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1wcmljZS13YXJlaG91c2Utc3RvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY1ByaW50PVwiZGVmYXVsdE5vUHJpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cInByb2R1Y3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zYy1ub2luZGV4LXdyYXBwZXI+XG4gICAgPC9kaXY+XG59IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwidHVpLXNrZWxldG9uIGZsZXggaC1bOC4yNXJlbV0gdy1mdWxsIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXhsXCI+PC9kaXY+XG59XG4iXX0=