bways-report 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +24 -3
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +20 -13
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +64 -5
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +161 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +91 -11
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +88 -25
- package/esm2022/lib/features/designer/designer.component.mjs +194 -65
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +11 -3
- package/esm2022/lib/features/runtime/report-execution.service.mjs +1 -9
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +214 -19
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +11 -3
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +11 -3
- package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +3 -3
- package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +3 -3
- package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +3 -3
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +4 -4
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +23 -1
- package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +3 -3
- package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +3 -3
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +3 -3
- package/fesm2022/bways-report.mjs +920 -162
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/models/report-grid.model.d.ts +23 -1
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +2 -1
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +9 -0
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +4 -1
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +5 -1
- package/lib/features/designer/designer.component.d.ts +6 -0
- package/lib/features/runtime/dynamic-renderer.component.d.ts +4 -1
- package/lib/features/runtime/report-grid-bridge.component.d.ts +46 -4
- package/lib/features/runtime/report-runtime.component.d.ts +4 -1
- package/lib/features/runtime/rpt-report.component.d.ts +4 -1
- package/package.json +1 -1
|
@@ -338,7 +338,7 @@ export class RptDropdownComponent {
|
|
|
338
338
|
if (!ds || !this.isDynamicSource())
|
|
339
339
|
return;
|
|
340
340
|
// 1. Database Table / Stored Procedure Lookup
|
|
341
|
-
if ((ds.sourceType === 'table' || ds.sourceType === 'procedure'
|
|
341
|
+
if (ds.entityName && (ds.sourceType === 'table' || ds.sourceType === 'procedure') && this.lookupAdapter) {
|
|
342
342
|
const formValues = this.parentForm()?.getRawValue() ?? {};
|
|
343
343
|
// Do not call the database until every canvas field this lookup depends on is filled.
|
|
344
344
|
const missing = findMissingCanvasFields(ds.parameterMappings, formValues);
|
|
@@ -631,7 +631,7 @@ export class RptDropdownComponent {
|
|
|
631
631
|
<span class="rpt-error-text">{{ errorMessage() }}</span>
|
|
632
632
|
}
|
|
633
633
|
</div>
|
|
634
|
-
`, isInline: true, styles: [":host{display:block;width:100%;
|
|
634
|
+
`, isInline: true, styles: [":host{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;font-family:var(--rpt-font-family, inherit);position:relative}.rpt-status-badge{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:.6875rem;padding:3px 6px;border-radius:4px;margin-top:4px;font-weight:500;line-height:1.3;max-width:100%;box-sizing:border-box;overflow:hidden;word-break:break-word}.rpt-status-badge>span{overflow-wrap:anywhere;word-break:break-word}.rpt-status-badge[data-status=loading]{background:#eff6ff;color:#2563eb;border:1px solid #dbeafe}.rpt-status-badge[data-status=ok]{background:#f0fdf4;color:#16a34a;border:1px solid #dcfce7}.rpt-status-badge[data-status=waiting]{background:#fffbeb;color:#d97706;border:1px solid #fef3c7}.rpt-status-badge[data-status=error]{background:#fef2f2;color:#dc2626;border:1px solid #fee2e2}.rpt-status-badge[data-status=empty]{background:#f8fafc;color:#64748b;border:1px solid #e2e8f0}.waiting-tokens{display:inline-flex;flex-wrap:wrap;align-items:center;gap:3px;margin-left:2px;max-width:100%}.waiting-token{background:#b453091f;border:1px solid rgba(180,83,9,.3);padding:1px 5px;border-radius:3px;font-weight:700;font-size:.625rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;box-sizing:border-box}.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.dot-pulse{animation:rpt-pulse 1s infinite alternate}@keyframes rpt-pulse{0%{opacity:.3}to{opacity:1}}.rpt-field-group{display:flex;flex-direction:column;max-width:100%;min-width:0;gap:4px;box-sizing:border-box;position:relative}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-select-wrapper{position:relative;width:100%;flex:1;min-height:0;display:flex;align-items:center}.rpt-select{width:100%;height:100%;min-height:38px;box-sizing:border-box;padding:6px 36px 6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);appearance:none;-webkit-appearance:none;outline:none;cursor:pointer;transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-select:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-select:focus{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-select:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-select.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-select.rpt-invalid:focus{box-shadow:0 0 0 3px #ef444440}.rpt-select-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--rpt-color-text-muted, #64748b);display:flex;align-items:center}.rpt-combobox-wrapper{position:relative;width:100%;flex:1;min-height:0}.rpt-combobox-trigger{width:100%;height:100%;min-height:38px;box-sizing:border-box;padding:6px 10px 6px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--rpt-font-size-base, .875rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);outline:none;cursor:pointer;text-align:left;transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-combobox-trigger:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-combobox-trigger:focus-visible,.rpt-combobox-trigger.is-open{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-combobox-trigger:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-combobox-trigger.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-combobox-trigger.rpt-invalid:focus-visible{box-shadow:0 0 0 3px #ef444440}.trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3}.trigger-label.is-placeholder{color:var(--rpt-color-text-muted, #94a3b8)}.trigger-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.trigger-clear-btn{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font-size:.6875rem;color:var(--rpt-color-text-muted, #64748b);background-color:#f1f5f9;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .15s ease,color .15s ease}.trigger-clear-btn:hover{background-color:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.trigger-arrow{display:flex;align-items:center;color:var(--rpt-color-text-muted, #64748b);transition:transform .18s ease}.trigger-arrow.rotated{transform:rotate(180deg)}.rpt-combobox-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:1050;background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:0 10px 25px -5px #0000001f,0 8px 10px -6px #00000014;overflow:hidden;display:flex;flex-direction:column;animation:rpt-dropdown-pop .12s cubic-bezier(0,0,.2,1)}.rpt-combobox-menu.opens-above{top:auto;bottom:calc(100% + 4px);box-shadow:0 -10px 25px -5px #0000001f,0 -8px 10px -6px #00000014;animation:rpt-dropdown-pop-above .12s cubic-bezier(0,0,.2,1)}@keyframes rpt-dropdown-pop{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes rpt-dropdown-pop-above{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.combobox-search-box{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);background-color:#f8fafc}.combobox-search-icon{color:var(--rpt-color-text-muted, #94a3b8);display:flex;align-items:center;flex-shrink:0}.combobox-search-input{flex:1;border:none;outline:none;background:transparent;font-size:var(--rpt-font-size-sm, .8125rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);min-width:0}.combobox-search-input::placeholder{color:#94a3b8}.combobox-search-clear{border:none;background:#e2e8f0;color:#64748b;width:16px;height:16px;border-radius:50%;font-size:.625rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.combobox-search-clear:hover{background:#cbd5e1;color:#0f172a}.combobox-options-list{max-height:220px;overflow-y:auto;overscroll-behavior:contain;padding:4px}.combobox-option-item{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;border-radius:4px;font-size:var(--rpt-font-size-base, .84rem);color:var(--rpt-color-text, #0f172a);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.combobox-option-item.is-focused{background-color:var(--rpt-color-surface-hover, #f1f5f9)}.combobox-option-item.is-selected{background-color:#eff6ff;color:var(--rpt-color-primary, #2563eb);font-weight:600}.opt-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opt-check{font-size:.875rem;font-weight:700;color:var(--rpt-color-primary, #2563eb);margin-left:8px}.combobox-status-row{padding:10px 12px;font-size:.78rem;text-align:center;color:var(--rpt-color-text-muted, #64748b)}.combobox-status-row.loading{display:flex;align-items:center;justify-content:center;gap:6px;color:#2563eb}.combobox-status-row.error{color:var(--rpt-color-danger, #dc2626)}.combobox-status-row.hint{font-size:.72rem;color:#94a3b8;border-top:1px dashed #e2e8f0;margin-top:4px;padding:6px}.rpt-error-text{font-size:.7rem;color:var(--rpt-color-danger, #ef4444);margin-top:3px;line-height:1.25;max-width:100%;overflow-wrap:anywhere;word-break:break-word;display:block}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
635
635
|
}
|
|
636
636
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptDropdownComponent, decorators: [{
|
|
637
637
|
type: Component,
|
|
@@ -847,7 +847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
847
847
|
<span class="rpt-error-text">{{ errorMessage() }}</span>
|
|
848
848
|
}
|
|
849
849
|
</div>
|
|
850
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;
|
|
850
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;font-family:var(--rpt-font-family, inherit);position:relative}.rpt-status-badge{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:.6875rem;padding:3px 6px;border-radius:4px;margin-top:4px;font-weight:500;line-height:1.3;max-width:100%;box-sizing:border-box;overflow:hidden;word-break:break-word}.rpt-status-badge>span{overflow-wrap:anywhere;word-break:break-word}.rpt-status-badge[data-status=loading]{background:#eff6ff;color:#2563eb;border:1px solid #dbeafe}.rpt-status-badge[data-status=ok]{background:#f0fdf4;color:#16a34a;border:1px solid #dcfce7}.rpt-status-badge[data-status=waiting]{background:#fffbeb;color:#d97706;border:1px solid #fef3c7}.rpt-status-badge[data-status=error]{background:#fef2f2;color:#dc2626;border:1px solid #fee2e2}.rpt-status-badge[data-status=empty]{background:#f8fafc;color:#64748b;border:1px solid #e2e8f0}.waiting-tokens{display:inline-flex;flex-wrap:wrap;align-items:center;gap:3px;margin-left:2px;max-width:100%}.waiting-token{background:#b453091f;border:1px solid rgba(180,83,9,.3);padding:1px 5px;border-radius:3px;font-weight:700;font-size:.625rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;box-sizing:border-box}.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.dot-pulse{animation:rpt-pulse 1s infinite alternate}@keyframes rpt-pulse{0%{opacity:.3}to{opacity:1}}.rpt-field-group{display:flex;flex-direction:column;max-width:100%;min-width:0;gap:4px;box-sizing:border-box;position:relative}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-select-wrapper{position:relative;width:100%;flex:1;min-height:0;display:flex;align-items:center}.rpt-select{width:100%;height:100%;min-height:38px;box-sizing:border-box;padding:6px 36px 6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);appearance:none;-webkit-appearance:none;outline:none;cursor:pointer;transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-select:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-select:focus{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-select:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-select.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-select.rpt-invalid:focus{box-shadow:0 0 0 3px #ef444440}.rpt-select-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--rpt-color-text-muted, #64748b);display:flex;align-items:center}.rpt-combobox-wrapper{position:relative;width:100%;flex:1;min-height:0}.rpt-combobox-trigger{width:100%;height:100%;min-height:38px;box-sizing:border-box;padding:6px 10px 6px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--rpt-font-size-base, .875rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);outline:none;cursor:pointer;text-align:left;transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-combobox-trigger:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-combobox-trigger:focus-visible,.rpt-combobox-trigger.is-open{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-combobox-trigger:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-combobox-trigger.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-combobox-trigger.rpt-invalid:focus-visible{box-shadow:0 0 0 3px #ef444440}.trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3}.trigger-label.is-placeholder{color:var(--rpt-color-text-muted, #94a3b8)}.trigger-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.trigger-clear-btn{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font-size:.6875rem;color:var(--rpt-color-text-muted, #64748b);background-color:#f1f5f9;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .15s ease,color .15s ease}.trigger-clear-btn:hover{background-color:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.trigger-arrow{display:flex;align-items:center;color:var(--rpt-color-text-muted, #64748b);transition:transform .18s ease}.trigger-arrow.rotated{transform:rotate(180deg)}.rpt-combobox-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:1050;background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:0 10px 25px -5px #0000001f,0 8px 10px -6px #00000014;overflow:hidden;display:flex;flex-direction:column;animation:rpt-dropdown-pop .12s cubic-bezier(0,0,.2,1)}.rpt-combobox-menu.opens-above{top:auto;bottom:calc(100% + 4px);box-shadow:0 -10px 25px -5px #0000001f,0 -8px 10px -6px #00000014;animation:rpt-dropdown-pop-above .12s cubic-bezier(0,0,.2,1)}@keyframes rpt-dropdown-pop{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes rpt-dropdown-pop-above{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.combobox-search-box{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);background-color:#f8fafc}.combobox-search-icon{color:var(--rpt-color-text-muted, #94a3b8);display:flex;align-items:center;flex-shrink:0}.combobox-search-input{flex:1;border:none;outline:none;background:transparent;font-size:var(--rpt-font-size-sm, .8125rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);min-width:0}.combobox-search-input::placeholder{color:#94a3b8}.combobox-search-clear{border:none;background:#e2e8f0;color:#64748b;width:16px;height:16px;border-radius:50%;font-size:.625rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.combobox-search-clear:hover{background:#cbd5e1;color:#0f172a}.combobox-options-list{max-height:220px;overflow-y:auto;overscroll-behavior:contain;padding:4px}.combobox-option-item{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;border-radius:4px;font-size:var(--rpt-font-size-base, .84rem);color:var(--rpt-color-text, #0f172a);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .1s ease}.combobox-option-item.is-focused{background-color:var(--rpt-color-surface-hover, #f1f5f9)}.combobox-option-item.is-selected{background-color:#eff6ff;color:var(--rpt-color-primary, #2563eb);font-weight:600}.opt-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.opt-check{font-size:.875rem;font-weight:700;color:var(--rpt-color-primary, #2563eb);margin-left:8px}.combobox-status-row{padding:10px 12px;font-size:.78rem;text-align:center;color:var(--rpt-color-text-muted, #64748b)}.combobox-status-row.loading{display:flex;align-items:center;justify-content:center;gap:6px;color:#2563eb}.combobox-status-row.error{color:var(--rpt-color-danger, #dc2626)}.combobox-status-row.hint{font-size:.72rem;color:#94a3b8;border-top:1px dashed #e2e8f0;margin-top:4px;padding:6px}.rpt-error-text{font-size:.7rem;color:var(--rpt-color-danger, #ef4444);margin-top:3px;line-height:1.25;max-width:100%;overflow-wrap:anywhere;word-break:break-word;display:block}\n"] }]
|
|
851
851
|
}], ctorParameters: () => [], propDecorators: { onDocumentClick: [{
|
|
852
852
|
type: HostListener,
|
|
853
853
|
args: ['document:click', ['$event']]
|
|
@@ -855,4 +855,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
855
855
|
type: HostListener,
|
|
856
856
|
args: ['document:keydown.escape']
|
|
857
857
|
}] } });
|
|
858
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9kcm9wZG93bi9ycHQtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVwRyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHdCQUF3QixHQUN6QixNQUFNLDJDQUEyQyxDQUFDOzs7QUFrbUJuRCxNQUFNLE9BQU8sb0JBQW9CO0lBQ2Qsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEUsYUFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxV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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpTlQsbUJBZ1lnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQXVLL0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1mYWN0b3J5JztcbmltcG9ydCB7IE1hc3RlckRhdGFQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9tYXN0ZXItZGF0YS5wcm92aWRlcic7XG5pbXBvcnQgeyBSZXBvcnRMb29rdXBBZGFwdGVyIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uQ29udGV4dE1hcCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG5pbXBvcnQge1xuICBmaW5kTWlzc2luZ0NhbnZhc0ZpZWxkcyxcbiAgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzLFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25PcHRpb24ge1xuICBrZXk6IHN0cmluZyB8IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWRyb3Bkb3duJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5pcy1vcGVuXSc6ICdpc09wZW4oKScsXG4gICAgJ1tjbGFzcy5vcGVucy1hYm92ZV0nOiAnb3BlbnNBYm92ZSgpJyxcbiAgfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWZpZWxkLWdyb3VwXCI+XG4gICAgICBAaWYgKGNvbmZpZygpLmxhYmVsKSB7XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImVsZW1lbnRJZCgpXCIgY2xhc3M9XCJycHQtbGFiZWxcIj5cbiAgICAgICAgICB7eyBjb25maWcoKS5sYWJlbCB9fVxuICAgICAgICAgIEBpZiAoY29uZmlnKCkudmFsaWRhdGlvbj8ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJlcXVpcmVkLW1hcmtlclwiPio8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzU2VhcmNoYWJsZSgpKSB7XG4gICAgICAgIDwhLS0gU2VhcmNoYWJsZSBUeXBlYWhlYWQgQ29tYm9ib3ggLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY29tYm9ib3gtd3JhcHBlclwiICNjb21ib2JveFdyYXBwZXI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInJwdC1jb21ib2JveC10cmlnZ2VyXCJcbiAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKVwiXG4gICAgICAgICAgICBbY2xhc3MucnB0LWludmFsaWRdPVwiaXNJbnZhbGlkKClcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwiaXNPcGVuKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sKCkuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW4oKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidsaXN0Ym94J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uVHJpZ2dlcktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmlnZ2VyLWxhYmVsXCIgW2NsYXNzLmlzLXBsYWNlaG9sZGVyXT1cIiFzZWxlY3RlZE9wdGlvbigpXCI+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkT3B0aW9uKCkgPyBzZWxlY3RlZE9wdGlvbigpIS5sYWJlbCA6IHBsYWNlaG9sZGVyKCkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaWdnZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkT3B0aW9uKCkgJiYgIWZvcm1Db250cm9sKCkuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLWNsZWFyLWJ0blwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsZWFyIHNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsZWFyU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiY2xlYXJTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJpZ2dlci1hcnJvd1wiIFtjbGFzcy5yb3RhdGVkXT1cImlzT3BlbigpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTIgOFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEgMS41TDYgNi41TDExIDEuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICBAaWYgKGlzT3BlbigpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNvbWJvYm94LW1lbnVcIlxuICAgICAgICAgICAgICBbY2xhc3Mub3BlbnMtYWJvdmVdPVwib3BlbnNBYm92ZSgpXCJcbiAgICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBSZWFsLXRpbWUgRmlsdGVyIFNlYXJjaCBCb3ggLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21ib2JveC1zZWFyY2gtYm94XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21ib2JveC1zZWFyY2gtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiMjFcIiB5MT1cIjIxXCIgeDI9XCIxNi42NVwiIHkyPVwiMTYuNjVcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tYm9ib3gtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBmaWx0ZXIuLi5cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZEluZGV4KCkgPj0gMCA/IChlbGVtZW50SWQoKSArICdfb3B0XycgKyBmb2N1c2VkSW5kZXgoKSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWFyY2hLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgQGlmIChzZWFyY2hUZXJtKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tYm9ib3gtc2VhcmNoLWNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbGVhciBmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEZpbHRlcmVkIE9wdGlvbnMgTGlzdCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvYm94LW9wdGlvbnMtbGlzdFwiICNvcHRpb25zTGlzdEVsPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21ib2JveC1zdGF0dXMtcm93IGxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtZG90IGRvdC1wdWxzZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBvcHRpb25zIGZyb20gZGF0YWJhc2UuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChsb2FkRXJyb3IoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvYm94LXN0YXR1cy1yb3cgZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXJyb3I6IHt7IGxvYWRFcnJvcigpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXNEeW5hbWljU291cmNlKCkgJiYgaGFzTG9hZGVkKCkgJiYgYWxsT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvYm94LXN0YXR1cy1yb3cgZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Tm8gcmVjb3JkcyBmb3VuZCAoY2hlY2sgcGFyYW1ldGVycyk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21ib2JveC1zdGF0dXMtcm93IGVtcHR5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPk5vIG9wdGlvbnMgbWF0Y2hpbmcgXCJ7eyBzZWFyY2hUZXJtKCkgfX1cIjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAob3B0IG9mIHZpc2libGVGaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0LmtleTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKSArICdfb3B0XycgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbWJvYm94LW9wdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZm9jdXNlZF09XCJmb2N1c2VkSW5kZXgoKSA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKG9wdClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZm9jdXNlZEluZGV4LnNldChpKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdC1sYWJlbFwiPnt7IG9wdC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2VsZWN0ZWQob3B0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHQtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj7inJM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZXhjZXNzRmlsdGVyZWRDb3VudCgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tYm9ib3gtc3RhdHVzLXJvdyBoaW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2hvd2luZyB7eyBNQVhfRklMVEVSX1JFTkRFUiB9fSBvZiB7eyBmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggfX0gbWF0Y2hlcy4gVHlwZSB0byByZWZpbmUuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIE5hdGl2ZSBCcm93c2VyIFNlbGVjdCBGYWxsYmFjayAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2woKVwiXG4gICAgICAgICAgICBbY2xhc3MucnB0LWludmFsaWRdPVwiaXNJbnZhbGlkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtc2VsZWN0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBzZWxlY3RlZD5Mb2FkaW5nIG9wdGlvbnMgZnJvbSBkYXRhYmFzZS4uLjwvb3B0aW9uPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobG9hZEVycm9yKCkpIHtcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIHNlbGVjdGVkPkVycm9yOiB7eyBsb2FkRXJyb3IoKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXNEeW5hbWljU291cmNlKCkgJiYgaGFzTG9hZGVkKCkgJiYgYWxsT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQgc2VsZWN0ZWQ+LS0gTm8gcmVjb3JkcyBmb3VuZCAoY2hlY2sgcGFyYW1ldGVycykgLS08L29wdGlvbj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKHBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIFtkaXNhYmxlZF09XCJjb25maWcoKS52YWxpZGF0aW9uPy5yZXF1aXJlZFwiPnt7IHBsYWNlaG9sZGVyKCkgfX08L29wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKG9wdCBvZiByZW5kZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0LmtleSkge1xuICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHQua2V5XCI+e3sgb3B0LmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0V4Y2Vzc09wdGlvbnMoKSkge1xuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQ+Li4uIGFuZCB7eyBleGNlc3NPcHRpb25zQ291bnQoKSB9fSBtb3JlIHJlY29yZHMgKHJlZmluZSBmaWx0ZXIpIC4uLjwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtc2VsZWN0LWFycm93XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCAxMiA4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xIDEuNUw2IDYuNUwxMSAxLjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1N0YXR1cygpICYmIGlzRHluYW1pY1NvdXJjZSgpICYmIHN0YXR1c1RleHQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXN0YXR1cy1iYWRnZVwiIFthdHRyLmRhdGEtc3RhdHVzXT1cInN0YXR1c0tpbmQoKVwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHN0YXR1c0tpbmQoKSkge1xuICAgICAgICAgICAgQGNhc2UgKCdsb2FkaW5nJykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZG90LXB1bHNlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj5Mb2FkaW5nIGZyb20gZGF0YWJhc2XigKY8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ29rJykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZG90LW9rXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBkeW5hbWljT3B0aW9ucygpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnd2FpdGluZycpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtZG90IGRvdC13YXJuXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj5XYWl0aW5nIGZvcjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWl0aW5nLXRva2Vuc1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGsgb2Ygd2FpdGluZ0ZvcigpOyB0cmFjayBrKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndhaXRpbmctdG9rZW5cIj57eyBrIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2Vycm9yJykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZG90LWVyclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbG9hZEVycm9yKCkgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2VtcHR5Jykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPk5vIHJlY29yZHMgZm91bmQgZm9yIHBhcmFtZXRlcnM8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWVycm9yLXRleHRcIj57eyBlcnJvck1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC5ycHQtc3RhdHVzLWJhZGdlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgfVxuICAgIC5ycHQtc3RhdHVzLWJhZGdlW2RhdGEtc3RhdHVzPVwibG9hZGluZ1wiXSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgfVxuICAgIC5ycHQtc3RhdHVzLWJhZGdlW2RhdGEtc3RhdHVzPVwib2tcIl0ge1xuICAgICAgYmFja2dyb3VuZDogI2YwZmRmNDtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgIH1cbiAgICAucnB0LXN0YXR1cy1iYWRnZVtkYXRhLXN0YXR1cz1cIndhaXRpbmdcIl0ge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmJlYjtcbiAgICAgIGNvbG9yOiAjZDk3NzA2O1xuICAgIH1cbiAgICAucnB0LXN0YXR1cy1iYWRnZVtkYXRhLXN0YXR1cz1cImVycm9yXCJdIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZWYyZjI7XG4gICAgICBjb2xvcjogI2RjMjYyNjtcbiAgICB9XG4gICAgLnJwdC1zdGF0dXMtYmFkZ2VbZGF0YS1zdGF0dXM9XCJlbXB0eVwiXSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgfVxuICAgIC53YWl0aW5nLXRva2VucyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDNweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgfVxuICAgIC53YWl0aW5nLXRva2VuIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTgwLCA4MywgOSwgMC4xMik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE4MCwgODMsIDksIDAuMyk7XG4gICAgICBwYWRkaW5nOiAwIDRweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgIH1cbiAgICAuc3RhdHVzLWRvdCB7XG4gICAgICB3aWR0aDogNnB4O1xuICAgICAgaGVpZ2h0OiA2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICAgIC5kb3QtcHVsc2Uge1xuICAgICAgYW5pbWF0aW9uOiBycHQtcHVsc2UgMXMgaW5maW5pdGUgYWx0ZXJuYXRlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1wdWxzZSB7XG4gICAgICBmcm9tIHsgb3BhY2l0eTogMC4zOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IH1cbiAgICB9XG4gICAgLnJwdC1maWVsZC1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGdhcDogNHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLnJwdC1sYWJlbCB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnJwdC1yZXF1aXJlZC1tYXJrZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICB9XG5cbiAgICAvKiBOYXRpdmUgU2VsZWN0IE1vZGUgKi9cbiAgICAucnB0LXNlbGVjdC13cmFwcGVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgLnJwdC1zZWxlY3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAzOHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDZweCAzNnB4IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZSxcbiAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3cgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXNlbGVjdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgIH1cbiAgICAucnB0LXNlbGVjdDpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItZm9jdXMsICMyNTYzZWIpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3ctZm9jdXMsIDAgMCAwIDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KSk7XG4gICAgfVxuICAgIC5ycHQtc2VsZWN0OmRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAucnB0LXNlbGVjdC5ycHQtaW52YWxpZCB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LXNlbGVjdC5ycHQtaW52YWxpZDpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMzksIDY4LCA2OCwgMC4yNSk7XG4gICAgfVxuICAgIC5ycHQtc2VsZWN0LWFycm93IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAxMnB4O1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAvKiBDb21ib2JveCBUeXBlYWhlYWQgTW9kZSAqL1xuICAgIC5ycHQtY29tYm9ib3gtd3JhcHBlciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAucnB0LWNvbWJvYm94LXRyaWdnZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAzOHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDZweCAxMHB4IDZweCAxMnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDhweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZSxcbiAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3cgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LWNvbWJvYm94LXRyaWdnZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICB9XG4gICAgLnJwdC1jb21ib2JveC10cmlnZ2VyOmZvY3VzLXZpc2libGUsXG4gICAgLnJwdC1jb21ib2JveC10cmlnZ2VyLmlzLW9wZW4ge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWZvY3VzLCAjMjU2M2ViKTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICAgIC5ycHQtY29tYm9ib3gtdHJpZ2dlci5ycHQtaW52YWxpZCB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LWNvbWJvYm94LXRyaWdnZXIucnB0LWludmFsaWQ6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMzksIDY4LCA2OCwgMC4yNSk7XG4gICAgfVxuICAgIC50cmlnZ2VyLWxhYmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICB9XG4gICAgLnRyaWdnZXItbGFiZWwuaXMtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICB9XG4gICAgLnRyaWdnZXItYWN0aW9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC50cmlnZ2VyLWNsZWFyLWJ0biB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zIGVhc2UsIGNvbG9yIDE1MG1zIGVhc2U7XG4gICAgfVxuICAgIC50cmlnZ2VyLWNsZWFyLWJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlOGYwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICB9XG4gICAgLnRyaWdnZXItYXJyb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE4MG1zIGVhc2U7XG4gICAgfVxuICAgIC50cmlnZ2VyLWFycm93LnJvdGF0ZWQge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICAvKiBQb3BvdmVyIE1lbnUgKi9cbiAgICAucnB0LWNvbWJvYm94LW1lbnUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiBjYWxjKDEwMCUgKyA0cHgpO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgei1pbmRleDogMTA1MDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLFxuICAgICAgICAgICAgICAgICAgMCA4cHggMTBweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbmltYXRpb246IHJwdC1kcm9wZG93bi1wb3AgMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgfVxuICAgIC5ycHQtY29tYm9ib3gtbWVudS5vcGVucy1hYm92ZSB7XG4gICAgICB0b3A6IGF1dG87XG4gICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7XG4gICAgICBib3gtc2hhZG93OiAwIC0xMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLFxuICAgICAgICAgICAgICAgICAgMCAtOHB4IDEwcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgICAgYW5pbWF0aW9uOiBycHQtZHJvcGRvd24tcG9wLWFib3ZlIDEyMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1kcm9wZG93bi1wb3Age1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gICAgQGtleWZyYW1lcyBycHQtZHJvcGRvd24tcG9wLWFib3ZlIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG5cbiAgICAvKiBTZWFyY2ggQm94IGluIE1lbnUgKi9cbiAgICAuY29tYm9ib3gtc2VhcmNoLWJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgcGFkZGluZzogOHB4IDEwcHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgIH1cbiAgICAuY29tYm9ib3gtc2VhcmNoLWljb24ge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5jb21ib2JveC1zZWFyY2gtaW5wdXQge1xuICAgICAgZmxleDogMTtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44MTI1cmVtKTtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gICAgLmNvbWJvYm94LXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICM5NGEzYjg7XG4gICAgfVxuICAgIC5jb21ib2JveC1zZWFyY2gtY2xlYXIge1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogI2UyZThmMDtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICAgIC5jb21ib2JveC1zZWFyY2gtY2xlYXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2NiZDVlMTtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIH1cblxuICAgIC8qIE9wdGlvbnMgTGlzdCAqL1xuICAgIC5jb21ib2JveC1vcHRpb25zLWxpc3Qge1xuICAgICAgbWF4LWhlaWdodDogMjIwcHg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICB9XG4gICAgLmNvbWJvYm94LW9wdGlvbi1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogN3B4IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NHJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEwMG1zIGVhc2U7XG4gICAgfVxuICAgIC5jb21ib2JveC1vcHRpb24taXRlbS5pcy1mb2N1c2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICB9XG4gICAgLmNvbWJvYm94LW9wdGlvbi1pdGVtLmlzLXNlbGVjdGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG4gICAgLm9wdC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLm9wdC1jaGVjayB7XG4gICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgIH1cbiAgICAuY29tYm9ib3gtc3RhdHVzLXJvdyB7XG4gICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cbiAgICAuY29tYm9ib3gtc3RhdHVzLXJvdy5sb2FkaW5nIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGNvbG9yOiAjMjU2M2ViO1xuICAgIH1cbiAgICAuY29tYm9ib3gtc3RhdHVzLXJvdy5lcnJvciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2RjMjYyNik7XG4gICAgfVxuICAgIC5jb21ib2JveC1zdGF0dXMtcm93LmhpbnQge1xuICAgICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgICAgY29sb3I6ICM5NGEzYjg7XG4gICAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNlMmU4ZjA7XG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICBwYWRkaW5nOiA2cHg7XG4gICAgfVxuXG4gICAgLnJwdC1lcnJvci10ZXh0IHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJwdERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXN0ZXJEYXRhUHJvdmlkZXIgPSBpbmplY3QoTWFzdGVyRGF0YVByb3ZpZGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvb2t1cEFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0TG9va3VwQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8Rm9ybUNvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBwYXJlbnRGb3JtID0gaW5wdXQ8Rm9ybUdyb3VwIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBEZXNpZ25lciBtb2RlOiBzaG93cyBhIHNtYWxsIHN0YXR1cyBsaW5lIChMb2FkaW5nIC8gTiByZWNvcmRzIC8gV2FpdGluZyBmb3LigKYpLiAqL1xuICByZWFkb25seSBzaG93U3RhdHVzID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmFsbGJhY2tDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgcmVhZG9ubHkgZHluYW1pY09wdGlvbnMgPSBzaWduYWw8RHJvcGRvd25PcHRpb25bXT4oW10pO1xuICBwcml2YXRlIGxvb2t1cFN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtYXN0ZXJEYXRhU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1DaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlbG9hZFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgbGFzdFJlcXVlc3RLZXkgPSAnJztcblxuICAvLyBDb21ib2JveCBpbnRlcmFjdGl2ZSBzdGF0ZVxuICByZWFkb25seSBpc09wZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBvcGVuc0Fib3ZlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VhcmNoVGVybSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZm9jdXNlZEluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICByZWFkb25seSBjdXJyZW50VmFsdWUgPSBzaWduYWw8dW5rbm93bj4obnVsbCk7XG4gIHJlYWRvbmx5IGNvbWJvYm94V3JhcHBlckVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignY29tYm9ib3hXcmFwcGVyJyk7XG4gIHJlYWRvbmx5IHNlYXJjaElucHV0RWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ3NlYXJjaElucHV0Jyk7XG4gIHJlYWRvbmx5IG9wdGlvbnNMaXN0RWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdvcHRpb25zTGlzdEVsJyk7XG5cbiAgcHJpdmF0ZSBjb250cm9sU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIHJlYWRvbmx5IGZvcm1Db250cm9sID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb250cm9sKCkgPz8gdGhpcy5mYWxsYmFja0NvbnRyb2wpO1xuICByZWFkb25seSBlbGVtZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmtleSB8fCB0aGlzLmNvbmZpZygpLmlkKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBjb21wdXRlZChcbiAgICAoKSA9PiAodGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ3BsYWNlaG9sZGVyJ10gYXMgc3RyaW5nKSA/PyAnLS0gU2VsZWN0IC0tJ1xuICApO1xuXG4gIHJlYWRvbmx5IGlzU2VhcmNoYWJsZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWyduYXRpdmVTZWxlY3QnXSAhPT0gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0xvYWRlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgLyoqIENhbnZhcyBmaWVsZCBrZXlzIHRoYXQgbXVzdCBiZSBmaWxsZWQgYmVmb3JlIHRoZSBsb29rdXAgY2FuIHJ1bi4gKi9cbiAgcmVhZG9ubHkgd2FpdGluZ0ZvciA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGlzRHluYW1pY1NvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkcyA9IHRoaXMuY29uZmlnKCkuZGF0YVNvdXJjZTtcbiAgICByZXR1cm4gISEoXG4gICAgICBkcyAmJlxuICAgICAgKGRzLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgfHxcbiAgICAgICAgZHMuc291cmNlVHlwZSA9PT0gJ3Byb2NlZHVyZScgfHxcbiAgICAgICAgZHMuZW50aXR5TmFtZSB8fFxuICAgICAgICBkcy5tYXN0ZXJOYW1lKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN0YXRpY09wdGlvbnMgPSBjb21wdXRlZDxEcm9wZG93bk9wdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydvcHRpb25zJ107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgIHJldHVybiBvcHRzO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsbE9wdGlvbnMgPSBjb21wdXRlZDxEcm9wZG93bk9wdGlvbltdPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljU291cmNlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNPcHRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRpY09wdGlvbnMoKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRPcHRpb24gPSBjb21wdXRlZDxEcm9wZG93bk9wdGlvbiB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmN1cnJlbnRWYWx1ZSgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3RyVmFsID0gU3RyaW5nKHZhbCk7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmFsbE9wdGlvbnMoKS5maW5kKChvcHQpID0+IFN0cmluZyhvcHQua2V5KSA9PT0gc3RyVmFsKTtcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICByZXR1cm4geyBrZXk6IHZhbCBhcyBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiBzdHJWYWwgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRPcHRpb25zID0gY29tcHV0ZWQ8RHJvcGRvd25PcHRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0oKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhbGwgPSB0aGlzLmFsbE9wdGlvbnMoKTtcbiAgICBpZiAoIXRlcm0pIHJldHVybiBhbGw7XG4gICAgcmV0dXJuIGFsbC5maWx0ZXIoKG9wdCkgPT5cbiAgICAgIG9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pIHx8IFN0cmluZyhvcHQua2V5KS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgTUFYX0ZJTFRFUl9SRU5ERVIgPSAyMDA7XG4gIHJlYWRvbmx5IHZpc2libGVGaWx0ZXJlZE9wdGlvbnMgPSBjb21wdXRlZDxEcm9wZG93bk9wdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpO1xuICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPD0gdGhpcy5NQVhfRklMVEVSX1JFTkRFUikgcmV0dXJuIGZpbHRlcmVkO1xuICAgIHJldHVybiBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLk1BWF9GSUxURVJfUkVOREVSKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZXhjZXNzRmlsdGVyZWRDb3VudCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4ge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCAtIHRoaXMuTUFYX0ZJTFRFUl9SRU5ERVIpO1xuICB9KTtcblxuICByZWFkb25seSBNQVhfUkVOREVSRURfT1BUSU9OUyA9IDUwMDtcbiAgcmVhZG9ubHkgcmVuZGVyZWRPcHRpb25zID0gY29tcHV0ZWQ8RHJvcGRvd25PcHRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmFsbE9wdGlvbnMoKTtcbiAgICBpZiAob3B0cy5sZW5ndGggPD0gdGhpcy5NQVhfUkVOREVSRURfT1BUSU9OUykgcmV0dXJuIG9wdHM7XG4gICAgcmV0dXJuIG9wdHMuc2xpY2UoMCwgdGhpcy5NQVhfUkVOREVSRURfT1BUSU9OUyk7XG4gIH0pO1xuICByZWFkb25seSBoYXNFeGNlc3NPcHRpb25zID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbE9wdGlvbnMoKS5sZW5ndGggPiB0aGlzLk1BWF9SRU5ERVJFRF9PUFRJT05TO1xuICB9KTtcbiAgcmVhZG9ubHkgZXhjZXNzT3B0aW9uc0NvdW50ID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuYWxsT3B0aW9ucygpLmxlbmd0aCAtIHRoaXMuTUFYX1JFTkRFUkVEX09QVElPTlMpO1xuICB9KTtcblxuICByZWFkb25seSB3YWl0aW5nTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qga2V5cyA9IHRoaXMud2FpdGluZ0ZvcigpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBrZXlzLmpvaW4oJywgJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN0YXR1c0tpbmQgPSBjb21wdXRlZDwnaWRsZScgfCAnbG9hZGluZycgfCAnb2snIHwgJ3dhaXRpbmcnIHwgJ2Vycm9yJyB8ICdlbXB0eSc+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNEeW5hbWljU291cmNlKCkpIHJldHVybiAnaWRsZSc7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKCkpIHJldHVybiAnbG9hZGluZyc7XG4gICAgaWYgKHRoaXMubG9hZEVycm9yKCkpIHJldHVybiAnZXJyb3InO1xuICAgIGlmICh0aGlzLndhaXRpbmdGb3IoKS5sZW5ndGggPiAwKSByZXR1cm4gJ3dhaXRpbmcnO1xuICAgIGlmICh0aGlzLmhhc0xvYWRlZCgpKSByZXR1cm4gdGhpcy5keW5hbWljT3B0aW9ucygpLmxlbmd0aCA+IDAgPyAnb2snIDogJ2VtcHR5JztcbiAgICByZXR1cm4gJ2lkbGUnO1xuICB9KTtcblxuICByZWFkb25seSBzdGF0dXNUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zdGF0dXNLaW5kKCkpIHtcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgICByZXR1cm4gJ0xvYWRpbmcgZnJvbSBkYXRhYmFzZeKApic7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmR5bmFtaWNPcHRpb25zKCkubGVuZ3RofSByZWNvcmRzIGxvYWRlZGA7XG4gICAgICBjYXNlICd3YWl0aW5nJzpcbiAgICAgICAgcmV0dXJuIGBXYWl0aW5nIGZvcjogJHt0aGlzLndhaXRpbmdMYWJlbCgpfWA7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcigpID8/ICdGYWlsZWQgdG8gbG9hZCc7XG4gICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgIHJldHVybiAnUXVlcnkgcmV0dXJuZWQgbm8gcmVjb3JkcyBmb3IgdGhlc2UgcGFyYW1ldGVycyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9KTtcblxuICByZWFkb25seSBpc0ludmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gY3RybC5pbnZhbGlkICYmIChjdHJsLmRpcnR5IHx8IGN0cmwudG91Y2hlZCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVycm9yTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtQ29udHJvbCgpO1xuICAgIGlmICghY3RybC5pbnZhbGlkIHx8ICghY3RybC5kaXJ0eSAmJiAhY3RybC50b3VjaGVkKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcnMgPSBjdHJsLmVycm9ycztcbiAgICBpZiAoIWVycm9ycykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0S2V5ID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICByZXR1cm4gZ2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5jb25maWcoKS52YWxpZGF0aW9uLCBmaXJzdEtleSk7XG4gIH0pO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIE5vZGU7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXG4gIG9uRXNjYXBlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBpc1NlbGVjdGVkKG9wdDogRHJvcGRvd25PcHRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLmN1cnJlbnRWYWx1ZSgpO1xuICAgIGlmIChjdXIgPT09IG51bGwgfHwgY3VyID09PSB1bmRlZmluZWQgfHwgY3VyID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBTdHJpbmcoY3VyKSA9PT0gU3RyaW5nKG9wdC5rZXkpO1xuICB9XG5cbiAgdG9nZ2xlT3BlbihldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2woKS5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2woKS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgLy8gQ2hlY2sgYXZhaWxhYmxlIHZpZXdwb3J0IHNwYWNlIHRvIGRldGVybWluZSBpZiBtZW51IHNob3VsZCBvcGVuIGFib3ZlXG4gICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuY29tYm9ib3hXcmFwcGVyRWwoKT8ubmF0aXZlRWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207XG4gICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wO1xuXG4gICAgY29uc3QgcHJlZmVyQWJvdmUgPSB0aGlzLmNvbmZpZygpPy5wcm9wZXJ0aWVzPy5bJ29wZW5BYm92ZSddID09PSB0cnVlO1xuICAgIGNvbnN0IGF1dG9BYm92ZSA9IHNwYWNlQmVsb3cgPCAyNjAgJiYgc3BhY2VBYm92ZSA+IDE2MDtcbiAgICB0aGlzLm9wZW5zQWJvdmUuc2V0KHByZWZlckFib3ZlIHx8IGF1dG9BYm92ZSk7XG5cbiAgICB0aGlzLmlzT3Blbi5zZXQodHJ1ZSk7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KC0xKTtcblxuICAgIC8vIEF1dG8tZm9jdXMgc2VhcmNoIGlucHV0IGFmdGVyIHJlbmRlclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsKCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KC0xKTtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgc2VsZWN0T3B0aW9uKG9wdDogRHJvcGRvd25PcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZS5zZXQob3B0LmtleSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLnNldFZhbHVlKG9wdC5rZXkpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY3VycmVudFZhbHVlLnNldCgnJyk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldCgtMSk7XG4gIH1cblxuICBjbGVhclNlYXJjaChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KCcnKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoLTEpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXRFbCgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBvblNlYXJjaElucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldCh2YWwpO1xuICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldCgwKTtcbiAgfVxuXG4gIG9uVHJpZ2dlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLnZpc2libGVGaWx0ZXJlZE9wdGlvbnMoKTtcbiAgICBjb25zdCBjb3VudCA9IHZpc2libGUubGVuZ3RoO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSAodGhpcy5mb2N1c2VkSW5kZXgoKSArIDEpICUgY291bnQ7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KG5leHQpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsRm9jdXNlZEludG9WaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuZm9jdXNlZEluZGV4KCkgPD0gMCA/IGNvdW50IC0gMSA6IHRoaXMuZm9jdXNlZEluZGV4KCkgLSAxO1xuICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChwcmV2KTtcbiAgICAgICAgICB0aGlzLnNjcm9sbEZvY3VzZWRJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZm9jdXNlZEluZGV4KCk7XG4gICAgICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCBjb3VudCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKHZpc2libGVbaWR4XSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbih2aXNpYmxlWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnVGFiJzoge1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxGb2N1c2VkSW50b1ZpZXcoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdEVsID0gdGhpcy5vcHRpb25zTGlzdEVsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFsaXN0RWwpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGxpc3RFbC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmNvbWJvYm94LW9wdGlvbi1pdGVtJyk7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5mb2N1c2VkSW5kZXgoKTtcbiAgICBpZiAoaXRlbXMgJiYgaXRlbXNbaWR4XSkge1xuICAgICAgaXRlbXNbaWR4XS5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gU3luYyByZWFjdGl2ZSBmb3JtIGNvbnRyb2wgdmFsdWUgY2hhbmdlcyB0byBjdXJyZW50VmFsdWUgc2lnbmFsXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtQ29udHJvbCgpO1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5jdXJyZW50VmFsdWUuc2V0KGN0cmwudmFsdWUpKTtcbiAgICAgICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNvbnRyb2xTdWIgPSBjdHJsLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHYpID0+IHRoaXMuY3VycmVudFZhbHVlLnNldCh2KSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIFJlLXJ1biB3aGVuZXZlciB0aGUgYm91bmQgZGF0YSBzb3VyY2UsIHRoZSBzZXNzaW9uLCBvciB0aGUgcGFyZW50IGZvcm0gY2hhbmdlcy5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5wYXJlbnRGb3JtKCk7XG4gICAgICAgIHRoaXMuY29uZmlnKCk7IC8vIGRlcGVuZGVuY3k6IGRhdGEgc291cmNlIGNvbmZpZ3VyYXRpb25cblxuICAgICAgICB0aGlzLmZvcm1DaGFuZ2VzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAoZm9ybSAmJiB0aGlzLmlzRHluYW1pY1NvdXJjZSgpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ2hhbmdlc1N1YiA9IGZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNjaGVkdWxlUmVsb2FkKCkpO1xuICAgICAgICB9XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLnJlbG9hZERhdGFTb3VyY2VPcHRpb25zKHNlc3Npb24pKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubG9va3VwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubWFzdGVyRGF0YVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm1DaGFuZ2VzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLnJlbG9hZFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRUaW1lcik7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlUmVsb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRUaW1lcik7XG4gICAgdGhpcy5yZWxvYWRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWxvYWREYXRhU291cmNlT3B0aW9ucyh0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWREYXRhU291cmNlT3B0aW9ucyhzZXNzaW9uOiBTZXNzaW9uQ29udGV4dE1hcCk6IHZvaWQge1xuICAgIGNvbnN0IGRzID0gdGhpcy5jb25maWcoKS5kYXRhU291cmNlO1xuICAgIGlmICghZHMgfHwgIXRoaXMuaXNEeW5hbWljU291cmNlKCkpIHJldHVybjtcblxuICAgIC8vIDEuIERhdGFiYXNlIFRhYmxlIC8gU3RvcmVkIFByb2NlZHVyZSBMb29rdXBcbiAgICBpZiAoKGRzLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgfHwgZHMuc291cmNlVHlwZSA9PT0gJ3Byb2NlZHVyZScgfHwgZHMuZW50aXR5TmFtZSkgJiYgdGhpcy5sb29rdXBBZGFwdGVyKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5wYXJlbnRGb3JtKCk/LmdldFJhd1ZhbHVlKCkgPz8ge307XG5cbiAgICAgIC8vIERvIG5vdCBjYWxsIHRoZSBkYXRhYmFzZSB1bnRpbCBldmVyeSBjYW52YXMgZmllbGQgdGhpcyBsb29rdXAgZGVwZW5kcyBvbiBpcyBmaWxsZWQuXG4gICAgICBjb25zdCBtaXNzaW5nID0gZmluZE1pc3NpbmdDYW52YXNGaWVsZHMoZHMucGFyYW1ldGVyTWFwcGluZ3MsIGZvcm1WYWx1ZXMpO1xuICAgICAgdGhpcy53YWl0aW5nRm9yLnNldChtaXNzaW5nKTtcbiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb29rdXBTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5keW5hbWljT3B0aW9ucy5zZXQoW10pO1xuICAgICAgICB0aGlzLmxhc3RSZXF1ZXN0S2V5ID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmVkIHByb2NlZHVyZXMgb25seSByZWNlaXZlIGV4cGxpY2l0IG1hcHBpbmdzIHNvIFNRTCBTZXJ2ZXIgZG9lc24ndCByZWplY3QgdW5rbm93biBhcmd1bWVudHMuXG4gICAgICBjb25zdCByZXNvbHZlZFBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIC4uLihkcy5zb3VyY2VUeXBlID09PSAndGFibGUnID8gc2Vzc2lvbiA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzKGRzLnBhcmFtZXRlck1hcHBpbmdzLCBzZXNzaW9uLCBmb3JtVmFsdWVzKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgIHNvdXJjZVR5cGU6IGRzLnNvdXJjZVR5cGUgPz8gJ3RhYmxlJyxcbiAgICAgICAgZW50aXR5TmFtZTogZHMuZW50aXR5TmFtZSxcbiAgICAgICAgc2NoZW1hOiBkcy5zY2hlbWEgPz8gJ2RibycsXG4gICAgICAgIHZhbHVlRmllbGQ6IGRzLnZhbHVlRmllbGQgfHwgJ2lkJyxcbiAgICAgICAgZGlzcGxheUZpZWxkOiBkcy5kaXNwbGF5RmllbGQgfHwgJ25hbWUnLFxuICAgICAgICBmaWx0ZXI6IGRzLmZpbHRlcixcbiAgICAgICAgcGFyYW1ldGVyczogcmVzb2x2ZWRQYXJhbXMsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVxdWVzdEtleSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpO1xuICAgICAgaWYgKHJlcXVlc3RLZXkgPT09IHRoaXMubGFzdFJlcXVlc3RLZXkpIHJldHVybjsgLy8gbm90aGluZyBjaGFuZ2VkXG4gICAgICB0aGlzLmxhc3RSZXF1ZXN0S2V5ID0gcmVxdWVzdEtleTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgdGhpcy5sb29rdXBTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmxvb2t1cFN1YiA9IHRoaXMubG9va3VwQWRhcHRlci5mZXRjaE9wdGlvbnMocmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmhhc0xvYWRlZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgLy8gRGVkdXBsaWNhdGUgaXRlbXMgYnkga2V5L3ZhbHVlIHRvIGVuc3VyZSBjbGVhbiBzZWxlY3Qgb3B0aW9uc1xuICAgICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCBkZWR1cGVkOiBEcm9wZG93bk9wdGlvbltdID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBpdCBvZiBpdGVtcykge1xuICAgICAgICAgICAgY29uc3QgayA9IFN0cmluZyhpdC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXNlZW4uaGFzKGspKSB7XG4gICAgICAgICAgICAgIHNlZW4uYWRkKGspO1xuICAgICAgICAgICAgICBkZWR1cGVkLnB1c2goeyBrZXk6IGssIGxhYmVsOiBpdC5sYWJlbCB8fCBrIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmR5bmFtaWNPcHRpb25zLnNldChkZWR1cGVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbUnB0RHJvcGRvd25dIEZhaWxlZCB0byBsb2FkIGxvb2t1cCBvcHRpb25zIGZvciAke2RzLmVudGl0eU5hbWV9OmAsIGVycik7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmhhc0xvYWRlZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5keW5hbWljT3B0aW9ucy5zZXQoW10pO1xuICAgICAgICAgIHRoaXMubGFzdFJlcXVlc3RLZXkgPSAnJzsgLy8gYWxsb3cgcmV0cnlcbiAgICAgICAgICB0aGlzLmxvYWRFcnJvci5zZXQoZXJyPy5tZXNzYWdlIHx8ICdEYXRhYmFzZSBxdWVyeSBlcnJvcicpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gMi4gTGVnYWN5IE1hc3RlciBEYXRhIFByb3ZpZGVyXG4gICAgaWYgKGRzLm1hc3Rlck5hbWUgJiYgdGhpcy5tYXN0ZXJEYXRhUHJvdmlkZXIgJiYgIXRoaXMubWFzdGVyRGF0YVN1Yikge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgdGhpcy5tYXN0ZXJEYXRhU3ViID0gdGhpcy5tYXN0ZXJEYXRhUHJvdmlkZXIuZ2V0TWFzdGVyRGF0YShkcy5tYXN0ZXJOYW1lKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoaXRlbXMpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuaGFzTG9hZGVkLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmR5bmFtaWNPcHRpb25zLnNldChcbiAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXQpID0+ICh7XG4gICAgICAgICAgICAgIGtleTogU3RyaW5nKGl0LnZhbHVlID8/IGl0WydpZCddID8/ICcnKSxcbiAgICAgICAgICAgICAgbGFiZWw6IFN0cmluZyhpdC5sYWJlbCA/PyBpdFsnbmFtZSddID8/ICcnKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1JwdERyb3Bkb3duXSBGYWlsZWQgdG8gbG9hZCBtYXN0ZXIgZGF0YSBmb3IgJHtkcy5tYXN0ZXJOYW1lfTpgLCBlcnIpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5oYXNMb2FkZWQuc2V0KHRydWUpO1xuICAgICAgICAgIHRoaXMubG9hZEVycm9yLnNldChlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsb2FkIG1hc3RlciBkYXRhJyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
858
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9kcm9wZG93bi9ycHQtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVwRyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHdCQUF3QixHQUN6QixNQUFNLDJDQUEyQyxDQUFDOzs7QUErbkJuRCxNQUFNLE9BQU8sb0JBQW9CO0lBQ2Qsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEUsYUFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxV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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpTlQsbUJBNlpnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQXVLL0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1mYWN0b3J5JztcbmltcG9ydCB7IE1hc3RlckRhdGFQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9tYXN0ZXItZGF0YS5wcm92aWRlcic7XG5pbXBvcnQgeyBSZXBvcnRMb29rdXBBZGFwdGVyIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uQ29udGV4dE1hcCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG5pbXBvcnQge1xuICBmaW5kTWlzc2luZ0NhbnZhc0ZpZWxkcyxcbiAgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzLFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25PcHRpb24ge1xuICBrZXk6IHN0cmluZyB8IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWRyb3Bkb3duJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5pcy1vcGVuXSc6ICdpc09wZW4oKScsXG4gICAgJ1tjbGFzcy5vcGVucy1hYm92ZV0nOiAnb3BlbnNBYm92ZSgpJyxcbiAgfSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWZpZWxkLWdyb3VwXCI+XG4gICAgICBAaWYgKGNvbmZpZygpLmxhYmVsKSB7XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImVsZW1lbnRJZCgpXCIgY2xhc3M9XCJycHQtbGFiZWxcIj5cbiAgICAgICAgICB7eyBjb25maWcoKS5sYWJlbCB9fVxuICAgICAgICAgIEBpZiAoY29uZmlnKCkudmFsaWRhdGlvbj8ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJlcXVpcmVkLW1hcmtlclwiPio8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzU2VhcmNoYWJsZSgpKSB7XG4gICAgICAgIDwhLS0gU2VhcmNoYWJsZSBUeXBlYWhlYWQgQ29tYm9ib3ggLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY29tYm9ib3gtd3JhcHBlclwiICNjb21ib2JveFdyYXBwZXI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInJwdC1jb21ib2JveC10cmlnZ2VyXCJcbiAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKVwiXG4gICAgICAgICAgICBbY2xhc3MucnB0LWludmFsaWRdPVwiaXNJbnZhbGlkKClcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwiaXNPcGVuKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sKCkuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW4oKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidsaXN0Ym94J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uVHJpZ2dlcktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmlnZ2VyLWxhYmVsXCIgW2NsYXNzLmlzLXBsYWNlaG9sZGVyXT1cIiFzZWxlY3RlZE9wdGlvbigpXCI+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkT3B0aW9uKCkgPyBzZWxlY3RlZE9wdGlvbigpIS5sYWJlbCA6IHBsYWNlaG9sZGVyKCkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaWdnZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkT3B0aW9uKCkgJiYgIWZvcm1Db250cm9sKCkuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLWNsZWFyLWJ0blwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsZWFyIHNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsZWFyU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiY2xlYXJTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJpZ2dlci1hcnJvd1wiIFtjbGFzcy5yb3RhdGVkXT1cImlzT3BlbigpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTIgOFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEgMS41TDYgNi41TDExIDEuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICBAaWYgKGlzT3BlbigpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNvbWJvYm94LW1lbnVcIlxuICAgICAgICAgICAgICBbY2xhc3Mub3BlbnMtYWJvdmVdPVwib3BlbnNBYm92ZSgpXCJcbiAgICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBSZWFsLXRpbWUgRmlsdGVyIFNlYXJjaCBCb3ggLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21ib2JveC1zZWFyY2gtYm94XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21ib2JveC1zZWFyY2gtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiMjFcIiB5MT1cIjIxXCIgeDI9XCIxNi42NVwiIHkyPVwiMTYuNjVcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tYm9ib3gtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBmaWx0ZXIuLi5cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZEluZGV4KCkgPj0gMCA/IChlbGVtZW50SWQoKSArICdfb3B0XycgKyBmb2N1c2VkSW5kZXgoKSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWFyY2hLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgQGlmIChzZWFyY2hUZXJtKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tYm9ib3gtc2VhcmNoLWNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbGVhciBmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEZpbHRlcmVkIE9wdGlvbnMgTGlzdCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvYm94LW9wdGlvbnMtbGlzdFwiICNvcHRpb25zTGlzdEVsPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21ib2JveC1zdGF0dXMtcm93IGxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtZG90IGRvdC1wdWxzZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBvcHRpb25zIGZyb20gZGF0YWJhc2UuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChsb2FkRXJyb3IoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvYm94LXN0YXR1cy1yb3cgZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXJyb3I6IHt7IGxvYWRFcnJvcigpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXNEeW5hbWljU291cmNlKCkgJiYgaGFzTG9hZGVkKCkgJiYgYWxsT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbWJvYm94LXN0YXR1cy1yb3cgZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Tm8gcmVjb3JkcyBmb3VuZCAoY2hlY2sgcGFyYW1ldGVycyk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21ib2JveC1zdGF0dXMtcm93IGVtcHR5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPk5vIG9wdGlvbnMgbWF0Y2hpbmcgXCJ7eyBzZWFyY2hUZXJtKCkgfX1cIjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAob3B0IG9mIHZpc2libGVGaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0LmtleTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKSArICdfb3B0XycgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbWJvYm94LW9wdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZm9jdXNlZF09XCJmb2N1c2VkSW5kZXgoKSA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKG9wdClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZm9jdXNlZEluZGV4LnNldChpKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdC1sYWJlbFwiPnt7IG9wdC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzU2VsZWN0ZWQob3B0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHQtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj7inJM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZXhjZXNzRmlsdGVyZWRDb3VudCgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tYm9ib3gtc3RhdHVzLXJvdyBoaW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2hvd2luZyB7eyBNQVhfRklMVEVSX1JFTkRFUiB9fSBvZiB7eyBmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggfX0gbWF0Y2hlcy4gVHlwZSB0byByZWZpbmUuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIE5hdGl2ZSBCcm93c2VyIFNlbGVjdCBGYWxsYmFjayAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2woKVwiXG4gICAgICAgICAgICBbY2xhc3MucnB0LWludmFsaWRdPVwiaXNJbnZhbGlkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtc2VsZWN0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZCBzZWxlY3RlZD5Mb2FkaW5nIG9wdGlvbnMgZnJvbSBkYXRhYmFzZS4uLjwvb3B0aW9uPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobG9hZEVycm9yKCkpIHtcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkIHNlbGVjdGVkPkVycm9yOiB7eyBsb2FkRXJyb3IoKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXNEeW5hbWljU291cmNlKCkgJiYgaGFzTG9hZGVkKCkgJiYgYWxsT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQgc2VsZWN0ZWQ+LS0gTm8gcmVjb3JkcyBmb3VuZCAoY2hlY2sgcGFyYW1ldGVycykgLS08L29wdGlvbj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKHBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIFtkaXNhYmxlZF09XCJjb25maWcoKS52YWxpZGF0aW9uPy5yZXF1aXJlZFwiPnt7IHBsYWNlaG9sZGVyKCkgfX08L29wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKG9wdCBvZiByZW5kZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0LmtleSkge1xuICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHQua2V5XCI+e3sgb3B0LmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0V4Y2Vzc09wdGlvbnMoKSkge1xuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQ+Li4uIGFuZCB7eyBleGNlc3NPcHRpb25zQ291bnQoKSB9fSBtb3JlIHJlY29yZHMgKHJlZmluZSBmaWx0ZXIpIC4uLjwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtc2VsZWN0LWFycm93XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCAxMiA4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xIDEuNUw2IDYuNUwxMSAxLjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1N0YXR1cygpICYmIGlzRHluYW1pY1NvdXJjZSgpICYmIHN0YXR1c1RleHQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXN0YXR1cy1iYWRnZVwiIFthdHRyLmRhdGEtc3RhdHVzXT1cInN0YXR1c0tpbmQoKVwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHN0YXR1c0tpbmQoKSkge1xuICAgICAgICAgICAgQGNhc2UgKCdsb2FkaW5nJykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZG90LXB1bHNlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj5Mb2FkaW5nIGZyb20gZGF0YWJhc2XigKY8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ29rJykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZG90LW9rXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBkeW5hbWljT3B0aW9ucygpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnd2FpdGluZycpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtZG90IGRvdC13YXJuXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj5XYWl0aW5nIGZvcjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWl0aW5nLXRva2Vuc1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGsgb2Ygd2FpdGluZ0ZvcigpOyB0cmFjayBrKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndhaXRpbmctdG9rZW5cIj57eyBrIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2Vycm9yJykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZG90LWVyclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbG9hZEVycm9yKCkgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2VtcHR5Jykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPk5vIHJlY29yZHMgZm91bmQgZm9yIHBhcmFtZXRlcnM8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWVycm9yLXRleHRcIj57eyBlcnJvck1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC5ycHQtc3RhdHVzLWJhZGdlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIHBhZGRpbmc6IDNweCA2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICB9XG4gICAgLnJwdC1zdGF0dXMtYmFkZ2UgPiBzcGFuIHtcbiAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICB9XG4gICAgLnJwdC1zdGF0dXMtYmFkZ2VbZGF0YS1zdGF0dXM9XCJsb2FkaW5nXCJdIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzI1NjNlYjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkYmVhZmU7XG4gICAgfVxuICAgIC5ycHQtc3RhdHVzLWJhZGdlW2RhdGEtc3RhdHVzPVwib2tcIl0ge1xuICAgICAgYmFja2dyb3VuZDogI2YwZmRmNDtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RjZmNlNztcbiAgICB9XG4gICAgLnJwdC1zdGF0dXMtYmFkZ2VbZGF0YS1zdGF0dXM9XCJ3YWl0aW5nXCJdIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZiZWI7XG4gICAgICBjb2xvcjogI2Q5NzcwNjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZWYzYzc7XG4gICAgfVxuICAgIC5ycHQtc3RhdHVzLWJhZGdlW2RhdGEtc3RhdHVzPVwiZXJyb3JcIl0ge1xuICAgICAgYmFja2dyb3VuZDogI2ZlZjJmMjtcbiAgICAgIGNvbG9yOiAjZGMyNjI2O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZlZTJlMjtcbiAgICB9XG4gICAgLnJwdC1zdGF0dXMtYmFkZ2VbZGF0YS1zdGF0dXM9XCJlbXB0eVwiXSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIH1cbiAgICAud2FpdGluZy10b2tlbnMge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAzcHg7XG4gICAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAud2FpdGluZy10b2tlbiB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE4MCwgODMsIDksIDAuMTIpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxODAsIDgzLCA5LCAwLjMpO1xuICAgICAgcGFkZGluZzogMXB4IDVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5zdGF0dXMtZG90IHtcbiAgICAgIHdpZHRoOiA2cHg7XG4gICAgICBoZWlnaHQ6IDZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gICAgLmRvdC1wdWxzZSB7XG4gICAgICBhbmltYXRpb246IHJwdC1wdWxzZSAxcyBpbmZpbml0ZSBhbHRlcm5hdGU7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LXB1bHNlIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwLjM7IH1cbiAgICAgIHRvIHsgb3BhY2l0eTogMTsgfVxuICAgIH1cbiAgICAucnB0LWZpZWxkLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICAucnB0LWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAucnB0LXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgIH1cblxuICAgIC8qIE5hdGl2ZSBTZWxlY3QgTW9kZSAqL1xuICAgIC5ycHQtc2VsZWN0LXdyYXBwZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgICAucnB0LXNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDM4cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZzogNnB4IDM2cHggNnB4IDEycHg7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlLFxuICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtc2VsZWN0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgfVxuICAgIC5ycHQtc2VsZWN0OmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1mb2N1cywgIzI1NjNlYik7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy1mb2N1cywgMCAwIDAgM3B4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpKTtcbiAgICB9XG4gICAgLnJwdC1zZWxlY3Q6ZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICAgIC5ycHQtc2VsZWN0LnJwdC1pbnZhbGlkIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgfVxuICAgIC5ycHQtc2VsZWN0LnJwdC1pbnZhbGlkOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDIzOSwgNjgsIDY4LCAwLjI1KTtcbiAgICB9XG4gICAgLnJwdC1zZWxlY3QtYXJyb3cge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cblxuICAgIC8qIENvbWJvYm94IFR5cGVhaGVhZCBNb2RlICovXG4gICAgLnJwdC1jb21ib2JveC13cmFwcGVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgfVxuICAgIC5ycHQtY29tYm9ib3gtdHJpZ2dlciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDM4cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZzogNnB4IDEwcHggNnB4IDEycHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlLFxuICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtY29tYm9ib3gtdHJpZ2dlcjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgIH1cbiAgICAucnB0LWNvbWJvYm94LXRyaWdnZXI6Zm9jdXMtdmlzaWJsZSxcbiAgICAucnB0LWNvbWJvYm94LXRyaWdnZXIuaXMtb3BlbiB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItZm9jdXMsICMyNTYzZWIpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3ctZm9jdXMsIDAgMCAwIDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KSk7XG4gICAgfVxuICAgIC5ycHQtY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gICAgLnJwdC1jb21ib2JveC10cmlnZ2VyLnJwdC1pbnZhbGlkIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgfVxuICAgIC5ycHQtY29tYm9ib3gtdHJpZ2dlci5ycHQtaW52YWxpZDpmb2N1cy12aXNpYmxlIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDIzOSwgNjgsIDY4LCAwLjI1KTtcbiAgICB9XG4gICAgLnRyaWdnZXItbGFiZWwge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgIH1cbiAgICAudHJpZ2dlci1sYWJlbC5pcy1wbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgIH1cbiAgICAudHJpZ2dlci1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnRyaWdnZXItY2xlYXItYnRuIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMThweDtcbiAgICAgIGhlaWdodDogMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY1Zjk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMgZWFzZSwgY29sb3IgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLnRyaWdnZXItY2xlYXItYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmU4ZjA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cbiAgICAudHJpZ2dlci1hcnJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTgwbXMgZWFzZTtcbiAgICB9XG4gICAgLnRyaWdnZXItYXJyb3cucm90YXRlZCB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIC8qIFBvcG92ZXIgTWVudSAqL1xuICAgIC5ycHQtY29tYm9ib3gtbWVudSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IGNhbGMoMTAwJSArIDRweCk7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB6LWluZGV4OiAxMDUwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDEwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksXG4gICAgICAgICAgICAgICAgICAwIDhweCAxMHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFuaW1hdGlvbjogcnB0LWRyb3Bkb3duLXBvcCAxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbiAgICB9XG4gICAgLnJwdC1jb21ib2JveC1tZW51Lm9wZW5zLWFib3ZlIHtcbiAgICAgIHRvcDogYXV0bztcbiAgICAgIGJvdHRvbTogY2FsYygxMDAlICsgNHB4KTtcbiAgICAgIGJveC1zaGFkb3c6IDAgLTEwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksXG4gICAgICAgICAgICAgICAgICAwIC04cHggMTBweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICBhbmltYXRpb246IHJwdC1kcm9wZG93bi1wb3AtYWJvdmUgMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWRyb3Bkb3duLXBvcCB7XG4gICAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1kcm9wZG93bi1wb3AtYWJvdmUge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgIH1cblxuICAgIC8qIFNlYXJjaCBCb3ggaW4gTWVudSAqL1xuICAgIC5jb21ib2JveC1zZWFyY2gtYm94IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjZTJlOGYwKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gICAgfVxuICAgIC5jb21ib2JveC1zZWFyY2gtaWNvbiB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLmNvbWJvYm94LXNlYXJjaC1pbnB1dCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjgxMjVyZW0pO1xuICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAuY29tYm9ib3gtc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICB9XG4gICAgLmNvbWJvYm94LXNlYXJjaC1jbGVhciB7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTJlOGYwO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICB3aWR0aDogMTZweDtcbiAgICAgIGhlaWdodDogMTZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gICAgLmNvbWJvYm94LXNlYXJjaC1jbGVhcjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjY2JkNWUxO1xuICAgICAgY29sb3I6ICMwZjE3MmE7XG4gICAgfVxuXG4gICAgLyogT3B0aW9ucyBMaXN0ICovXG4gICAgLmNvbWJvYm94LW9wdGlvbnMtbGlzdCB7XG4gICAgICBtYXgtaGVpZ2h0OiAyMjBweDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuICAgICAgcGFkZGluZzogNHB4O1xuICAgIH1cbiAgICAuY29tYm9ib3gtb3B0aW9uLWl0ZW0ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwYWRkaW5nOiA3cHggMTBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg0cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTAwbXMgZWFzZTtcbiAgICB9XG4gICAgLmNvbWJvYm94LW9wdGlvbi1pdGVtLmlzLWZvY3VzZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgIH1cbiAgICAuY29tYm9ib3gtb3B0aW9uLWl0ZW0uaXMtc2VsZWN0ZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICAub3B0LWxhYmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAub3B0LWNoZWNrIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgfVxuICAgIC5jb21ib2JveC1zdGF0dXMtcm93IHtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5jb21ib2JveC1zdGF0dXMtcm93LmxvYWRpbmcge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgfVxuICAgIC5jb21ib2JveC1zdGF0dXMtcm93LmVycm9yIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZGMyNjI2KTtcbiAgICB9XG4gICAgLmNvbWJvYm94LXN0YXR1cy1yb3cuaGludCB7XG4gICAgICBmb250LXNpemU6IDAuNzJyZW07XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgI2UyZThmMDtcbiAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIHBhZGRpbmc6IDZweDtcbiAgICB9XG5cbiAgICAucnB0LWVycm9yLXRleHQge1xuICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBtYXJnaW4tdG9wOiAzcHg7XG4gICAgICBsaW5lLWhlaWdodDogMS4yNTtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHREcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFzdGVyRGF0YVByb3ZpZGVyID0gaW5qZWN0KE1hc3RlckRhdGFQcm92aWRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb29rdXBBZGFwdGVyID0gaW5qZWN0KFJlcG9ydExvb2t1cEFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY29udHJvbCA9IGlucHV0PEZvcm1Db250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcGFyZW50Rm9ybSA9IGlucHV0PEZvcm1Hcm91cCB8IG51bGw+KG51bGwpO1xuICAvKiogRGVzaWduZXIgbW9kZTogc2hvd3MgYSBzbWFsbCBzdGF0dXMgbGluZSAoTG9hZGluZyAvIE4gcmVjb3JkcyAvIFdhaXRpbmcgZm9y4oCmKS4gKi9cbiAgcmVhZG9ubHkgc2hvd1N0YXR1cyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIHJlYWRvbmx5IGR5bmFtaWNPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcbiAgcHJpdmF0ZSBsb29rdXBTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbWFzdGVyRGF0YVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWxvYWRUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIGxhc3RSZXF1ZXN0S2V5ID0gJyc7XG5cbiAgLy8gQ29tYm9ib3ggaW50ZXJhY3RpdmUgc3RhdGVcbiAgcmVhZG9ubHkgaXNPcGVuID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgb3BlbnNBYm92ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNlYXJjaFRlcm0gPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGZvY3VzZWRJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcbiAgcmVhZG9ubHkgY3VycmVudFZhbHVlID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuICByZWFkb25seSBjb21ib2JveFdyYXBwZXJFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2NvbWJvYm94V3JhcHBlcicpO1xuICByZWFkb25seSBzZWFyY2hJbnB1dEVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdzZWFyY2hJbnB1dCcpO1xuICByZWFkb25seSBvcHRpb25zTGlzdEVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pignb3B0aW9uc0xpc3RFbCcpO1xuXG4gIHByaXZhdGUgY29udHJvbFN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICByZWFkb25seSBmb3JtQ29udHJvbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29udHJvbCgpID8/IHRoaXMuZmFsbGJhY2tDb250cm9sKTtcbiAgcmVhZG9ubHkgZWxlbWVudElkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5rZXkgfHwgdGhpcy5jb25maWcoKS5pZCk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydwbGFjZWhvbGRlciddIGFzIHN0cmluZykgPz8gJy0tIFNlbGVjdCAtLSdcbiAgKTtcblxuICByZWFkb25seSBpc1NlYXJjaGFibGUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnbmF0aXZlU2VsZWN0J10gIT09IHRydWVcbiAgKTtcblxuICByZWFkb25seSBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBoYXNMb2FkZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsb2FkRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBDYW52YXMgZmllbGQga2V5cyB0aGF0IG11c3QgYmUgZmlsbGVkIGJlZm9yZSB0aGUgbG9va3VwIGNhbiBydW4uICovXG4gIHJlYWRvbmx5IHdhaXRpbmdGb3IgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICByZWFkb25seSBpc0R5bmFtaWNTb3VyY2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZHMgPSB0aGlzLmNvbmZpZygpLmRhdGFTb3VyY2U7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZHMgJiZcbiAgICAgIChkcy5zb3VyY2VUeXBlID09PSAndGFibGUnIHx8XG4gICAgICAgIGRzLnNvdXJjZVR5cGUgPT09ICdwcm9jZWR1cmUnIHx8XG4gICAgICAgIGRzLmVudGl0eU5hbWUgfHxcbiAgICAgICAgZHMubWFzdGVyTmFtZSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzdGF0aWNPcHRpb25zID0gY29tcHV0ZWQ8RHJvcGRvd25PcHRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/Llsnb3B0aW9ucyddO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgICByZXR1cm4gb3B0cztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICByZWFkb25seSBhbGxPcHRpb25zID0gY29tcHV0ZWQ8RHJvcGRvd25PcHRpb25bXT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRHluYW1pY1NvdXJjZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljT3B0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGF0aWNPcHRpb25zKCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkT3B0aW9uID0gY29tcHV0ZWQ8RHJvcGRvd25PcHRpb24gfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5jdXJyZW50VmFsdWUoKTtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gJycpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN0clZhbCA9IFN0cmluZyh2YWwpO1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5hbGxPcHRpb25zKCkuZmluZCgob3B0KSA9PiBTdHJpbmcob3B0LmtleSkgPT09IHN0clZhbCk7XG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgcmV0dXJuIHsga2V5OiB2YWwgYXMgc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogc3RyVmFsIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkPERyb3Bkb3duT3B0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYWxsID0gdGhpcy5hbGxPcHRpb25zKCk7XG4gICAgaWYgKCF0ZXJtKSByZXR1cm4gYWxsO1xuICAgIHJldHVybiBhbGwuZmlsdGVyKChvcHQpID0+XG4gICAgICBvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSB8fCBTdHJpbmcob3B0LmtleSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IE1BWF9GSUxURVJfUkVOREVSID0gMjAwO1xuICByZWFkb25seSB2aXNpYmxlRmlsdGVyZWRPcHRpb25zID0gY29tcHV0ZWQ8RHJvcGRvd25PcHRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKTtcbiAgICBpZiAoZmlsdGVyZWQubGVuZ3RoIDw9IHRoaXMuTUFYX0ZJTFRFUl9SRU5ERVIpIHJldHVybiBmaWx0ZXJlZDtcbiAgICByZXR1cm4gZmlsdGVyZWQuc2xpY2UoMCwgdGhpcy5NQVhfRklMVEVSX1JFTkRFUik7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGV4Y2Vzc0ZpbHRlcmVkQ291bnQgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggLSB0aGlzLk1BWF9GSUxURVJfUkVOREVSKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgTUFYX1JFTkRFUkVEX09QVElPTlMgPSA1MDA7XG4gIHJlYWRvbmx5IHJlbmRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkPERyb3Bkb3duT3B0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5hbGxPcHRpb25zKCk7XG4gICAgaWYgKG9wdHMubGVuZ3RoIDw9IHRoaXMuTUFYX1JFTkRFUkVEX09QVElPTlMpIHJldHVybiBvcHRzO1xuICAgIHJldHVybiBvcHRzLnNsaWNlKDAsIHRoaXMuTUFYX1JFTkRFUkVEX09QVElPTlMpO1xuICB9KTtcbiAgcmVhZG9ubHkgaGFzRXhjZXNzT3B0aW9ucyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxPcHRpb25zKCkubGVuZ3RoID4gdGhpcy5NQVhfUkVOREVSRURfT1BUSU9OUztcbiAgfSk7XG4gIHJlYWRvbmx5IGV4Y2Vzc09wdGlvbnNDb3VudCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4ge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLmFsbE9wdGlvbnMoKS5sZW5ndGggLSB0aGlzLk1BWF9SRU5ERVJFRF9PUFRJT05TKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgd2FpdGluZ0xhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGtleXMgPSB0aGlzLndhaXRpbmdGb3IoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICByZXR1cm4ga2V5cy5qb2luKCcsICcpO1xuICB9KTtcblxuICByZWFkb25seSBzdGF0dXNLaW5kID0gY29tcHV0ZWQ8J2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ29rJyB8ICd3YWl0aW5nJyB8ICdlcnJvcicgfCAnZW1wdHknPigoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzRHluYW1pY1NvdXJjZSgpKSByZXR1cm4gJ2lkbGUnO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZygpKSByZXR1cm4gJ2xvYWRpbmcnO1xuICAgIGlmICh0aGlzLmxvYWRFcnJvcigpKSByZXR1cm4gJ2Vycm9yJztcbiAgICBpZiAodGhpcy53YWl0aW5nRm9yKCkubGVuZ3RoID4gMCkgcmV0dXJuICd3YWl0aW5nJztcbiAgICBpZiAodGhpcy5oYXNMb2FkZWQoKSkgcmV0dXJuIHRoaXMuZHluYW1pY09wdGlvbnMoKS5sZW5ndGggPiAwID8gJ29rJyA6ICdlbXB0eSc7XG4gICAgcmV0dXJuICdpZGxlJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzS2luZCgpKSB7XG4gICAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgICAgcmV0dXJuICdMb2FkaW5nIGZyb20gZGF0YWJhc2XigKYnO1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5keW5hbWljT3B0aW9ucygpLmxlbmd0aH0gcmVjb3JkcyBsb2FkZWRgO1xuICAgICAgY2FzZSAnd2FpdGluZyc6XG4gICAgICAgIHJldHVybiBgV2FpdGluZyBmb3I6ICR7dGhpcy53YWl0aW5nTGFiZWwoKX1gO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkRXJyb3IoKSA/PyAnRmFpbGVkIHRvIGxvYWQnO1xuICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICByZXR1cm4gJ1F1ZXJ5IHJldHVybmVkIG5vIHJlY29yZHMgZm9yIHRoZXNlIHBhcmFtZXRlcnMnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNJbnZhbGlkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGN0cmwuaW52YWxpZCAmJiAoY3RybC5kaXJ0eSB8fCBjdHJsLnRvdWNoZWQpO1xuICB9KTtcblxuICByZWFkb25seSBlcnJvck1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICBpZiAoIWN0cmwuaW52YWxpZCB8fCAoIWN0cmwuZGlydHkgJiYgIWN0cmwudG91Y2hlZCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZXJyb3JzID0gY3RybC5lcnJvcnM7XG4gICAgaWYgKCFlcnJvcnMpIHJldHVybiAnJztcbiAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgcmV0dXJuIGdldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnKCkudmFsaWRhdGlvbiwgZmlyc3RLZXkpO1xuICB9KTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBOb2RlO1xuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChvcHQ6IERyb3Bkb3duT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5jdXJyZW50VmFsdWUoKTtcbiAgICBpZiAoY3VyID09PSBudWxsIHx8IGN1ciA9PT0gdW5kZWZpbmVkIHx8IGN1ciA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gU3RyaW5nKGN1cikgPT09IFN0cmluZyhvcHQua2V5KTtcbiAgfVxuXG4gIHRvZ2dsZU9wZW4oZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sKCkuZGlzYWJsZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sKCkuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIC8vIENoZWNrIGF2YWlsYWJsZSB2aWV3cG9ydCBzcGFjZSB0byBkZXRlcm1pbmUgaWYgbWVudSBzaG91bGQgb3BlbiBhYm92ZVxuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmNvbWJvYm94V3JhcHBlckVsKCk/Lm5hdGl2ZUVsZW1lbnQgPz8gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcmVjdCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tO1xuICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcDtcblxuICAgIGNvbnN0IHByZWZlckFib3ZlID0gdGhpcy5jb25maWcoKT8ucHJvcGVydGllcz8uWydvcGVuQWJvdmUnXSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBhdXRvQWJvdmUgPSBzcGFjZUJlbG93IDwgMjYwICYmIHNwYWNlQWJvdmUgPiAxNjA7XG4gICAgdGhpcy5vcGVuc0Fib3ZlLnNldChwcmVmZXJBYm92ZSB8fCBhdXRvQWJvdmUpO1xuXG4gICAgdGhpcy5pc09wZW4uc2V0KHRydWUpO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldCgtMSk7XG5cbiAgICAvLyBBdXRvLWZvY3VzIHNlYXJjaCBpbnB1dCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbCgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldCgtMSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihvcHQ6IERyb3Bkb3duT3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50VmFsdWUuc2V0KG9wdC5rZXkpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5zZXRWYWx1ZShvcHQua2V5KTtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmN1cnJlbnRWYWx1ZS5zZXQoJycpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KCcnKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoLTEpO1xuICB9XG5cbiAgY2xlYXJTZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KC0xKTtcbiAgICB0aGlzLnNlYXJjaElucHV0RWwoKT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25TZWFyY2hJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQodmFsKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoMCk7XG4gIH1cblxuICBvblRyaWdnZXJLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlID0gdGhpcy52aXNpYmxlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgY29uc3QgY291bnQgPSB2aXNpYmxlLmxlbmd0aDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gKHRoaXMuZm9jdXNlZEluZGV4KCkgKyAxKSAlIGNvdW50O1xuICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4LnNldChuZXh0KTtcbiAgICAgICAgICB0aGlzLnNjcm9sbEZvY3VzZWRJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmZvY3VzZWRJbmRleCgpIDw9IDAgPyBjb3VudCAtIDEgOiB0aGlzLmZvY3VzZWRJbmRleCgpIC0gMTtcbiAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQocHJldik7XG4gICAgICAgICAgdGhpcy5zY3JvbGxGb2N1c2VkSW50b1ZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuICAgICAgICBpZiAoaWR4ID49IDAgJiYgaWR4IDwgY291bnQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbih2aXNpYmxlW2lkeF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb24odmlzaWJsZVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1RhYic6IHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsRm9jdXNlZEludG9WaWV3KCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RFbCA9IHRoaXMub3B0aW9uc0xpc3RFbCgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghbGlzdEVsKSByZXR1cm47XG4gICAgY29uc3QgaXRlbXMgPSBsaXN0RWwucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5jb21ib2JveC1vcHRpb24taXRlbScpO1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuZm9jdXNlZEluZGV4KCk7XG4gICAgaWYgKGl0ZW1zICYmIGl0ZW1zW2lkeF0pIHtcbiAgICAgIGl0ZW1zW2lkeF0uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFN5bmMgcmVhY3RpdmUgZm9ybSBjb250cm9sIHZhbHVlIGNoYW5nZXMgdG8gY3VycmVudFZhbHVlIHNpZ25hbFxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuY3VycmVudFZhbHVlLnNldChjdHJsLnZhbHVlKSk7XG4gICAgICAgIHRoaXMuY29udHJvbFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jb250cm9sU3ViID0gY3RybC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmN1cnJlbnRWYWx1ZS5zZXQodikpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICAvLyBSZS1ydW4gd2hlbmV2ZXIgdGhlIGJvdW5kIGRhdGEgc291cmNlLCB0aGUgc2Vzc2lvbiwgb3IgdGhlIHBhcmVudCBmb3JtIGNoYW5nZXMuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMucGFyZW50Rm9ybSgpO1xuICAgICAgICB0aGlzLmNvbmZpZygpOyAvLyBkZXBlbmRlbmN5OiBkYXRhIHNvdXJjZSBjb25maWd1cmF0aW9uXG5cbiAgICAgICAgdGhpcy5mb3JtQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGZvcm0gJiYgdGhpcy5pc0R5bmFtaWNTb3VyY2UoKSkge1xuICAgICAgICAgIHRoaXMuZm9ybUNoYW5nZXNTdWIgPSBmb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zY2hlZHVsZVJlbG9hZCgpKTtcbiAgICAgICAgfVxuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5yZWxvYWREYXRhU291cmNlT3B0aW9ucyhzZXNzaW9uKSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvb2t1cFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1hc3RlckRhdGFTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5yZWxvYWRUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxvYWRUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXIpO1xuICAgIHRoaXMucmVsb2FkVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVsb2FkRGF0YVNvdXJjZU9wdGlvbnModGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkRGF0YVNvdXJjZU9wdGlvbnMoc2Vzc2lvbjogU2Vzc2lvbkNvbnRleHRNYXApOiB2b2lkIHtcbiAgICBjb25zdCBkcyA9IHRoaXMuY29uZmlnKCkuZGF0YVNvdXJjZTtcbiAgICBpZiAoIWRzIHx8ICF0aGlzLmlzRHluYW1pY1NvdXJjZSgpKSByZXR1cm47XG5cbiAgICAvLyAxLiBEYXRhYmFzZSBUYWJsZSAvIFN0b3JlZCBQcm9jZWR1cmUgTG9va3VwXG4gICAgaWYgKGRzLmVudGl0eU5hbWUgJiYgKGRzLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgfHwgZHMuc291cmNlVHlwZSA9PT0gJ3Byb2NlZHVyZScpICYmIHRoaXMubG9va3VwQWRhcHRlcikge1xuICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMucGFyZW50Rm9ybSgpPy5nZXRSYXdWYWx1ZSgpID8/IHt9O1xuXG4gICAgICAvLyBEbyBub3QgY2FsbCB0aGUgZGF0YWJhc2UgdW50aWwgZXZlcnkgY2FudmFzIGZpZWxkIHRoaXMgbG9va3VwIGRlcGVuZHMgb24gaXMgZmlsbGVkLlxuICAgICAgY29uc3QgbWlzc2luZyA9IGZpbmRNaXNzaW5nQ2FudmFzRmllbGRzKGRzLnBhcmFtZXRlck1hcHBpbmdzLCBmb3JtVmFsdWVzKTtcbiAgICAgIHRoaXMud2FpdGluZ0Zvci5zZXQobWlzc2luZyk7XG4gICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMubG9va3VwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmxvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgICAgIHRoaXMuZHluYW1pY09wdGlvbnMuc2V0KFtdKTtcbiAgICAgICAgdGhpcy5sYXN0UmVxdWVzdEtleSA9ICcnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlZCBwcm9jZWR1cmVzIG9ubHkgcmVjZWl2ZSBleHBsaWNpdCBtYXBwaW5ncyBzbyBTUUwgU2VydmVyIGRvZXNuJ3QgcmVqZWN0IHVua25vd24gYXJndW1lbnRzLlxuICAgICAgY29uc3QgcmVzb2x2ZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAuLi4oZHMuc291cmNlVHlwZSA9PT0gJ3RhYmxlJyA/IHNlc3Npb24gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhkcy5wYXJhbWV0ZXJNYXBwaW5ncywgc2Vzc2lvbiwgZm9ybVZhbHVlcyksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICBzb3VyY2VUeXBlOiBkcy5zb3VyY2VUeXBlID8/ICd0YWJsZScsXG4gICAgICAgIGVudGl0eU5hbWU6IGRzLmVudGl0eU5hbWUsXG4gICAgICAgIHNjaGVtYTogZHMuc2NoZW1hID8/ICdkYm8nLFxuICAgICAgICB2YWx1ZUZpZWxkOiBkcy52YWx1ZUZpZWxkIHx8ICdpZCcsXG4gICAgICAgIGRpc3BsYXlGaWVsZDogZHMuZGlzcGxheUZpZWxkIHx8ICduYW1lJyxcbiAgICAgICAgZmlsdGVyOiBkcy5maWx0ZXIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHJlc29sdmVkUGFyYW1zLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlcXVlc3RLZXkgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KTtcbiAgICAgIGlmIChyZXF1ZXN0S2V5ID09PSB0aGlzLmxhc3RSZXF1ZXN0S2V5KSByZXR1cm47IC8vIG5vdGhpbmcgY2hhbmdlZFxuICAgICAgdGhpcy5sYXN0UmVxdWVzdEtleSA9IHJlcXVlc3RLZXk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICAgIHRoaXMubG9va3VwU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5sb29rdXBTdWIgPSB0aGlzLmxvb2t1cEFkYXB0ZXIuZmV0Y2hPcHRpb25zKHJlcXVlc3QpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5oYXNMb2FkZWQuc2V0KHRydWUpO1xuICAgICAgICAgIC8vIERlZHVwbGljYXRlIGl0ZW1zIGJ5IGtleS92YWx1ZSB0byBlbnN1cmUgY2xlYW4gc2VsZWN0IG9wdGlvbnNcbiAgICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgZGVkdXBlZDogRHJvcGRvd25PcHRpb25bXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgaXQgb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBTdHJpbmcoaXQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFzZWVuLmhhcyhrKSkge1xuICAgICAgICAgICAgICBzZWVuLmFkZChrKTtcbiAgICAgICAgICAgICAgZGVkdXBlZC5wdXNoKHsga2V5OiBrLCBsYWJlbDogaXQubGFiZWwgfHwgayB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5keW5hbWljT3B0aW9ucy5zZXQoZGVkdXBlZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1JwdERyb3Bkb3duXSBGYWlsZWQgdG8gbG9hZCBsb29rdXAgb3B0aW9ucyBmb3IgJHtkcy5lbnRpdHlOYW1lfTpgLCBlcnIpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5oYXNMb2FkZWQuc2V0KHRydWUpO1xuICAgICAgICAgIHRoaXMuZHluYW1pY09wdGlvbnMuc2V0KFtdKTtcbiAgICAgICAgICB0aGlzLmxhc3RSZXF1ZXN0S2V5ID0gJyc7IC8vIGFsbG93IHJldHJ5XG4gICAgICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KGVycj8ubWVzc2FnZSB8fCAnRGF0YWJhc2UgcXVlcnkgZXJyb3InKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIDIuIExlZ2FjeSBNYXN0ZXIgRGF0YSBQcm92aWRlclxuICAgIGlmIChkcy5tYXN0ZXJOYW1lICYmIHRoaXMubWFzdGVyRGF0YVByb3ZpZGVyICYmICF0aGlzLm1hc3RlckRhdGFTdWIpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICAgIHRoaXMubWFzdGVyRGF0YVN1YiA9IHRoaXMubWFzdGVyRGF0YVByb3ZpZGVyLmdldE1hc3RlckRhdGEoZHMubWFzdGVyTmFtZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmhhc0xvYWRlZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5keW5hbWljT3B0aW9ucy5zZXQoXG4gICAgICAgICAgICBpdGVtcy5tYXAoKGl0KSA9PiAoe1xuICAgICAgICAgICAgICBrZXk6IFN0cmluZyhpdC52YWx1ZSA/PyBpdFsnaWQnXSA/PyAnJyksXG4gICAgICAgICAgICAgIGxhYmVsOiBTdHJpbmcoaXQubGFiZWwgPz8gaXRbJ25hbWUnXSA/PyAnJyksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtScHREcm9wZG93bl0gRmFpbGVkIHRvIGxvYWQgbWFzdGVyIGRhdGEgZm9yICR7ZHMubWFzdGVyTmFtZX06YCwgZXJyKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuaGFzTG9hZGVkLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmxvYWRFcnJvci5zZXQoZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCBtYXN0ZXIgZGF0YScpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|