genassist-chat-react 1.0.39 → 1.0.40

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.
@@ -24,8 +24,14 @@ interface DynamicFormMessageProps {
24
24
  isSubmitted: boolean;
25
25
  primaryColor?: string;
26
26
  fontFamily?: string;
27
- /** "card" = inline chat bubble (default), "footer" = compact footer layout */
28
- variant?: 'card' | 'footer';
27
+ /**
28
+ * "card" = inline chat bubble
29
+ * "footer" = compact footer layout
30
+ * "fullscreen" = fills the chat panel; message shown as a heading on top
31
+ */
32
+ variant?: 'card' | 'footer' | 'fullscreen';
33
+ /** Optional heading above the message (e.g. the agent name) for the fullscreen layout. */
34
+ title?: string;
29
35
  }
30
36
  declare const DynamicFormMessage: React.FC<DynamicFormMessageProps>;
31
37
  export default DynamicFormMessage;
@@ -12,12 +12,15 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import { useState } from 'react';
14
14
  var DynamicFormMessage = function (_a) {
15
- var schema = _a.schema, onSubmit = _a.onSubmit, onCancel = _a.onCancel, isSubmitting = _a.isSubmitting, isSubmitted = _a.isSubmitted, _b = _a.primaryColor, primaryColor = _b === void 0 ? '#2563eb' : _b, _c = _a.fontFamily, fontFamily = _c === void 0 ? 'inherit' : _c, _d = _a.variant, variant = _d === void 0 ? 'card' : _d;
15
+ var schema = _a.schema, onSubmit = _a.onSubmit, onCancel = _a.onCancel, isSubmitting = _a.isSubmitting, isSubmitted = _a.isSubmitted, _b = _a.primaryColor, primaryColor = _b === void 0 ? '#2563eb' : _b, _c = _a.fontFamily, fontFamily = _c === void 0 ? 'inherit' : _c, _d = _a.variant, variant = _d === void 0 ? 'card' : _d, title = _a.title;
16
16
  var _e = useState({}), formData = _e[0], setFormData = _e[1];
17
17
  var _f = useState({}), errors = _f[0], setErrors = _f[1];
18
+ var _g = useState(null), focused = _g[0], setFocused = _g[1];
18
19
  var isFooter = variant === 'footer';
20
+ var isFullscreen = variant === 'fullscreen';
19
21
  var allFieldsOptional = schema.fields.every(function (f) { return !f.required; });
20
22
  var showCancel = !!onCancel && allFieldsOptional && !isSubmitted;
23
+ var disabled = isSubmitted || isSubmitting;
21
24
  var handleChange = function (name, value) {
22
25
  setFormData(function (prev) {
23
26
  var _a;
@@ -48,82 +51,123 @@ var DynamicFormMessage = function (_a) {
48
51
  onSubmit(formData);
49
52
  };
50
53
  // ── Styles (variant-aware) ──
51
- var containerStyle = isFooter
52
- ? { width: '100%' }
53
- : {
54
- backgroundColor: '#f9fafb',
55
- border: '1px solid #e5e7eb',
56
- borderRadius: '12px',
57
- padding: '16px',
58
- maxWidth: '100%',
59
- };
60
- var messageStyle = {
61
- fontSize: isFooter ? '13px' : '14px',
62
- color: '#374151',
63
- marginBottom: isFooter ? '8px' : '12px',
64
- fontWeight: 500,
65
- fontFamily: fontFamily,
54
+ var formStyle = isFullscreen
55
+ ? { display: 'flex', flexDirection: 'column', height: '100%', width: '100%', fontFamily: fontFamily }
56
+ : isFooter
57
+ ? { width: '100%', fontFamily: fontFamily }
58
+ : {
59
+ backgroundColor: '#ffffff',
60
+ border: '1px solid #e5e7eb',
61
+ borderRadius: '14px',
62
+ padding: '16px',
63
+ maxWidth: '100%',
64
+ fontFamily: fontFamily,
65
+ boxShadow: '0 1px 2px rgba(0,0,0,0.04)',
66
+ };
67
+ var headerStyle = {
68
+ padding: isFullscreen ? '20px 22px 16px' : 0,
69
+ borderBottom: isFullscreen ? '1px solid #eef0f3' : 'none',
70
+ flexShrink: 0,
66
71
  };
67
- var fieldsWrapperStyle = isFooter
68
- ? { maxHeight: '200px', overflowY: 'auto', paddingRight: '4px' }
69
- : {};
70
- var fieldContainerStyle = {
71
- marginBottom: isFooter ? '8px' : '12px',
72
+ var titleStyle = {
73
+ fontSize: '13px',
74
+ fontWeight: 700,
75
+ color: primaryColor,
76
+ letterSpacing: '0.02em',
77
+ textTransform: 'uppercase',
78
+ marginBottom: '6px',
79
+ };
80
+ var messageStyle = {
81
+ fontSize: isFullscreen ? '18px' : isFooter ? '13px' : '15px',
82
+ lineHeight: 1.4,
83
+ color: isFullscreen ? '#111827' : '#374151',
84
+ marginBottom: isFullscreen ? 0 : isFooter ? '10px' : '14px',
85
+ fontWeight: isFullscreen ? 700 : 500,
72
86
  };
87
+ var bodyStyle = isFullscreen
88
+ ? { flex: 1, overflowY: 'auto', padding: '18px 22px', display: 'flex', flexDirection: 'column', gap: '18px' }
89
+ : isFooter
90
+ ? { maxHeight: '220px', overflowY: 'auto', paddingRight: '4px', display: 'flex', flexDirection: 'column', gap: '12px' }
91
+ : { display: 'flex', flexDirection: 'column', gap: '14px' };
73
92
  var labelStyle = {
74
93
  display: 'block',
75
- fontSize: isFooter ? '12px' : '13px',
94
+ fontSize: '13px',
76
95
  fontWeight: 600,
77
- color: '#374151',
78
- marginBottom: '2px',
79
- fontFamily: fontFamily,
96
+ color: '#1f2937',
97
+ marginBottom: '6px',
80
98
  };
81
99
  var descriptionStyle = {
82
- fontSize: '11px',
100
+ fontSize: '12px',
83
101
  color: '#6b7280',
84
- marginBottom: '3px',
85
- fontFamily: fontFamily,
102
+ marginTop: '-2px',
103
+ marginBottom: '7px',
104
+ lineHeight: 1.4,
86
105
  };
87
- var inputStyle = {
106
+ var baseInputStyle = function (name) { return ({
88
107
  width: '100%',
89
- padding: isFooter ? '6px 10px' : '8px 12px',
90
- fontSize: isFooter ? '13px' : '14px',
91
- border: '1px solid #d1d5db',
92
- borderRadius: '8px',
108
+ padding: '10px 12px',
109
+ fontSize: '14px',
110
+ border: "1.5px solid ".concat(focused === name ? primaryColor : '#e5e7eb'),
111
+ borderRadius: '10px',
93
112
  outline: 'none',
94
113
  boxSizing: 'border-box',
95
- backgroundColor: isSubmitted ? '#f3f4f6' : '#ffffff',
114
+ backgroundColor: disabled ? '#f3f4f6' : '#ffffff',
115
+ color: '#111827',
96
116
  fontFamily: fontFamily,
97
- };
98
- var selectStyle = __assign(__assign({}, inputStyle), { appearance: 'auto' });
117
+ transition: 'border-color 120ms ease, box-shadow 120ms ease',
118
+ boxShadow: focused === name ? "0 0 0 3px ".concat(hexToSoftRing(primaryColor)) : 'none',
119
+ }); };
99
120
  var errorStyle = {
100
121
  fontSize: '12px',
101
122
  color: '#ef4444',
102
- marginTop: '2px',
123
+ marginTop: '5px',
103
124
  };
104
- var buttonStyle = {
105
- width: '100%',
106
- padding: isFooter ? '9px 16px' : '10px 16px',
107
- fontSize: isFooter ? '13px' : '14px',
125
+ var footerStyle = __assign({ display: 'flex', gap: '10px', flexShrink: 0 }, (isFullscreen
126
+ ? { padding: '16px 22px', borderTop: '1px solid #eef0f3' }
127
+ : { marginTop: isFooter ? '8px' : '14px' }));
128
+ var primaryButtonStyle = {
129
+ flex: 1,
130
+ padding: '11px 16px',
131
+ fontSize: '14px',
108
132
  fontWeight: 600,
109
133
  color: '#ffffff',
110
- backgroundColor: isSubmitted ? '#9ca3af' : primaryColor,
134
+ backgroundColor: disabled ? '#9ca3af' : primaryColor,
111
135
  border: 'none',
112
- borderRadius: isFooter ? '10px' : '8px',
113
- cursor: isSubmitted || isSubmitting ? 'not-allowed' : 'pointer',
114
- opacity: isSubmitting ? 0.7 : 1,
115
- marginTop: isFooter ? '2px' : '4px',
136
+ borderRadius: '10px',
137
+ cursor: disabled ? 'not-allowed' : 'pointer',
138
+ opacity: isSubmitting ? 0.75 : 1,
139
+ fontFamily: fontFamily,
140
+ transition: 'opacity 120ms ease',
141
+ };
142
+ var skipButtonStyle = {
143
+ padding: '11px 16px',
144
+ fontSize: '14px',
145
+ fontWeight: 600,
146
+ color: '#6b7280',
147
+ backgroundColor: 'transparent',
148
+ border: '1.5px solid #e5e7eb',
149
+ borderRadius: '10px',
150
+ cursor: isSubmitting ? 'not-allowed' : 'pointer',
116
151
  fontFamily: fontFamily,
117
152
  };
118
- var checkboxContainerStyle = {
119
- display: 'flex',
120
- alignItems: 'center',
121
- gap: '8px',
153
+ var renderField = function (field) {
154
+ var _a;
155
+ return (_jsxs("div", { children: [_jsxs("label", { style: labelStyle, children: [field.label, field.required && _jsx("span", { style: { color: '#ef4444', marginLeft: '3px' }, children: "*" })] }), field.description && _jsx("div", { style: descriptionStyle, children: field.description }), field.type === 'text' && (_jsx("input", { type: "text", style: baseInputStyle(field.name), placeholder: field.placeholder || '', value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled })), field.type === 'number' && (_jsx("input", { type: "number", style: baseInputStyle(field.name), placeholder: field.placeholder || '', value: formData[field.name] !== undefined ? String(formData[field.name]) : '', onChange: function (e) { return handleChange(field.name, e.target.value ? Number(e.target.value) : ''); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled })), field.type === 'date' && (_jsx("input", { type: "date", style: baseInputStyle(field.name), value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled })), field.type === 'select' && (_jsxs("select", { style: __assign(__assign({}, baseInputStyle(field.name)), { appearance: 'auto', cursor: disabled ? 'not-allowed' : 'pointer' }), value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled, children: [_jsx("option", { value: "", children: field.placeholder || 'Select...' }), (_a = field.options) === null || _a === void 0 ? void 0 : _a.map(function (opt) { return (_jsx("option", { value: opt.value, children: opt.label }, opt.value)); })] })), field.type === 'boolean' && (_jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: '10px', cursor: disabled ? 'not-allowed' : 'pointer' }, children: [_jsx("input", { type: "checkbox", checked: formData[field.name] || false, onChange: function (e) { return handleChange(field.name, e.target.checked); }, disabled: disabled, style: { width: '17px', height: '17px', accentColor: primaryColor, cursor: 'inherit' } }), _jsx("span", { style: { fontSize: '14px', color: '#374151' }, children: field.placeholder || 'Yes' })] })), errors[field.name] && _jsx("div", { style: errorStyle, children: errors[field.name] })] }, field.name));
122
156
  };
123
- return (_jsxs("form", { onSubmit: handleSubmit, style: containerStyle, children: [_jsx("div", { style: messageStyle, children: schema.message }), _jsx("div", { style: fieldsWrapperStyle, children: schema.fields.map(function (field) {
124
- var _a;
125
- return (_jsxs("div", { style: fieldContainerStyle, children: [_jsxs("label", { style: labelStyle, children: [field.label, field.required && _jsx("span", { style: { color: '#ef4444', marginLeft: '2px' }, children: "*" })] }), field.description && (_jsx("div", { style: descriptionStyle, children: field.description })), field.type === 'text' && (_jsx("input", { type: "text", style: inputStyle, placeholder: field.placeholder || '', value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, disabled: isSubmitted || isSubmitting })), field.type === 'number' && (_jsx("input", { type: "number", style: inputStyle, placeholder: field.placeholder || '', value: formData[field.name] !== undefined ? String(formData[field.name]) : '', onChange: function (e) { return handleChange(field.name, e.target.value ? Number(e.target.value) : ''); }, disabled: isSubmitted || isSubmitting })), field.type === 'date' && (_jsx("input", { type: "date", style: inputStyle, value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, disabled: isSubmitted || isSubmitting })), field.type === 'select' && (_jsxs("select", { style: selectStyle, value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, disabled: isSubmitted || isSubmitting, children: [_jsx("option", { value: "", children: field.placeholder || 'Select...' }), (_a = field.options) === null || _a === void 0 ? void 0 : _a.map(function (opt) { return (_jsx("option", { value: opt.value, children: opt.label }, opt.value)); })] })), field.type === 'boolean' && (_jsxs("div", { style: checkboxContainerStyle, children: [_jsx("input", { type: "checkbox", checked: formData[field.name] || false, onChange: function (e) { return handleChange(field.name, e.target.checked); }, disabled: isSubmitted || isSubmitting, style: { width: '16px', height: '16px' } }), _jsx("span", { style: { fontSize: '14px', color: '#374151' }, children: field.placeholder || 'Yes' })] })), errors[field.name] && (_jsx("div", { style: errorStyle, children: errors[field.name] }))] }, field.name));
126
- }) }), _jsxs("div", { style: { display: 'flex', gap: '8px', marginTop: isFooter ? '2px' : '4px' }, children: [showCancel && (_jsx("button", { type: "button", style: __assign(__assign({}, buttonStyle), { marginTop: 0, backgroundColor: 'transparent', color: '#6b7280', border: '1px solid #d1d5db', cursor: isSubmitting ? 'not-allowed' : 'pointer' }), disabled: isSubmitting, onClick: onCancel, children: "Skip" })), _jsx("button", { type: "submit", style: __assign(__assign({}, buttonStyle), { marginTop: 0 }), disabled: isSubmitted || isSubmitting, children: isSubmitted ? 'Submitted' : isSubmitting ? 'Submitting...' : 'Submit' })] })] }));
157
+ var buttons = (_jsxs("div", { style: footerStyle, children: [showCancel && (_jsx("button", { type: "button", style: skipButtonStyle, disabled: isSubmitting, onClick: onCancel, children: "Skip" })), _jsx("button", { type: "submit", style: primaryButtonStyle, disabled: disabled, children: isSubmitted ? 'Submitted' : isSubmitting ? 'Submitting…' : 'Submit' })] }));
158
+ return (_jsxs("form", { onSubmit: handleSubmit, style: formStyle, children: [(schema.message || (isFullscreen && title)) && (_jsxs("div", { style: headerStyle, children: [isFullscreen && title && _jsx("div", { style: titleStyle, children: title }), schema.message && _jsx("div", { style: messageStyle, children: schema.message })] })), _jsx("div", { style: bodyStyle, children: schema.fields.map(renderField) }), buttons] }));
127
159
  };
160
+ /** Translucent version of the primary color for the focus ring (accepts #rgb/#rrggbb). */
161
+ function hexToSoftRing(hex) {
162
+ var m = hex.replace('#', '');
163
+ var full = m.length === 3 ? m.split('').map(function (c) { return c + c; }).join('') : m;
164
+ var int = parseInt(full, 16);
165
+ if (full.length !== 6 || Number.isNaN(int))
166
+ return 'rgba(37,99,235,0.15)';
167
+ var r = (int >> 16) & 255;
168
+ var g = (int >> 8) & 255;
169
+ var b = int & 255;
170
+ return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", 0.15)");
171
+ }
128
172
  export default DynamicFormMessage;
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0Zvcm1NZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0Zvcm1NZXNzYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFpQixNQUFNLE9BQU8sQ0FBQztBQThCdkQsSUFBTSxrQkFBa0IsR0FBc0MsVUFBQyxFQVM5RDtRQVJDLE1BQU0sWUFBQSxFQUNOLFFBQVEsY0FBQSxFQUNSLFFBQVEsY0FBQSxFQUNSLFlBQVksa0JBQUEsRUFDWixXQUFXLGlCQUFBLEVBQ1gsb0JBQXdCLEVBQXhCLFlBQVksbUJBQUcsU0FBUyxLQUFBLEVBQ3hCLGtCQUFzQixFQUF0QixVQUFVLG1CQUFHLFNBQVMsS0FBQSxFQUN0QixlQUFnQixFQUFoQixPQUFPLG1CQUFHLE1BQU0sS0FBQTtJQUVWLElBQUEsS0FBMEIsUUFBUSxDQUEwQixFQUFFLENBQUMsRUFBOUQsUUFBUSxRQUFBLEVBQUUsV0FBVyxRQUF5QyxDQUFDO0lBQ2hFLElBQUEsS0FBc0IsUUFBUSxDQUF5QixFQUFFLENBQUMsRUFBekQsTUFBTSxRQUFBLEVBQUUsU0FBUyxRQUF3QyxDQUFDO0lBRWpFLElBQU0sUUFBUSxHQUFHLE9BQU8sS0FBSyxRQUFRLENBQUM7SUFDdEMsSUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBWCxDQUFXLENBQUMsQ0FBQztJQUNsRSxJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsV0FBVyxDQUFDO0lBRW5FLElBQU0sWUFBWSxHQUFHLFVBQUMsSUFBWSxFQUFFLEtBQWM7UUFDaEQsV0FBVyxDQUFDLFVBQUMsSUFBSTs7WUFBSyxPQUFBLHVCQUFNLElBQUksZ0JBQUcsSUFBSSxJQUFHLEtBQUssT0FBRztRQUE1QixDQUE0QixDQUFDLENBQUM7UUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQixTQUFTLENBQUMsVUFBQyxJQUFJO2dCQUNiLElBQU0sSUFBSSxnQkFBUSxJQUFJLENBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsSUFBTSxZQUFZLEdBQUcsVUFBQyxDQUFrQjtRQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkIsSUFBSSxXQUFXLElBQUksWUFBWTtZQUFFLE9BQU87UUFFeEMsSUFBTSxTQUFTLEdBQTJCLEVBQUUsQ0FBQztRQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQUs7WUFDMUIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUM1RyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLHdCQUF3QixDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBRUQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLCtCQUErQjtJQUUvQixJQUFNLGNBQWMsR0FBa0IsUUFBUTtRQUM1QyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQ25CLENBQUMsQ0FBQztZQUNFLGVBQWUsRUFBRSxTQUFTO1lBQzFCLE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsWUFBWSxFQUFFLE1BQU07WUFDcEIsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDO0lBRU4sSUFBTSxZQUFZLEdBQWtCO1FBQ2xDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNwQyxLQUFLLEVBQUUsU0FBUztRQUNoQixZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDdkMsVUFBVSxFQUFFLEdBQUc7UUFDZixVQUFVLFlBQUE7S0FDWCxDQUFDO0lBRUYsSUFBTSxrQkFBa0IsR0FBa0IsUUFBUTtRQUNoRCxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtRQUNoRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRVAsSUFBTSxtQkFBbUIsR0FBa0I7UUFDekMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO0tBQ3hDLENBQUM7SUFFRixJQUFNLFVBQVUsR0FBa0I7UUFDaEMsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3BDLFVBQVUsRUFBRSxHQUFHO1FBQ2YsS0FBSyxFQUFFLFNBQVM7UUFDaEIsWUFBWSxFQUFFLEtBQUs7UUFDbkIsVUFBVSxZQUFBO0tBQ1gsQ0FBQztJQUVGLElBQU0sZ0JBQWdCLEdBQWtCO1FBQ3RDLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLFlBQVksRUFBRSxLQUFLO1FBQ25CLFVBQVUsWUFBQTtLQUNYLENBQUM7SUFFRixJQUFNLFVBQVUsR0FBa0I7UUFDaEMsS0FBSyxFQUFFLE1BQU07UUFDYixPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFDM0MsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3BDLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsWUFBWSxFQUFFLEtBQUs7UUFDbkIsT0FBTyxFQUFFLE1BQU07UUFDZixTQUFTLEVBQUUsWUFBWTtRQUN2QixlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDcEQsVUFBVSxZQUFBO0tBQ1gsQ0FBQztJQUVGLElBQU0sV0FBVyx5QkFDWixVQUFVLEtBQ2IsVUFBVSxFQUFFLE1BQWUsR0FDNUIsQ0FBQztJQUVGLElBQU0sVUFBVSxHQUFrQjtRQUNoQyxRQUFRLEVBQUUsTUFBTTtRQUNoQixLQUFLLEVBQUUsU0FBUztRQUNoQixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDO0lBRUYsSUFBTSxXQUFXLEdBQWtCO1FBQ2pDLEtBQUssRUFBRSxNQUFNO1FBQ2IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQzVDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNwQyxVQUFVLEVBQUUsR0FBRztRQUNmLEtBQUssRUFBRSxTQUFTO1FBQ2hCLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWTtRQUN2RCxNQUFNLEVBQUUsTUFBTTtRQUNkLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztRQUN2QyxNQUFNLEVBQUUsV0FBVyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQy9ELE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDbkMsVUFBVSxZQUFBO0tBQ1gsQ0FBQztJQUVGLElBQU0sc0JBQXNCLEdBQWtCO1FBQzVDLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLFFBQVE7UUFDcEIsR0FBRyxFQUFFLEtBQUs7S0FDWCxDQUFDO0lBRUYsT0FBTyxDQUNMLGdCQUFNLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsYUFDakQsY0FBSyxLQUFLLEVBQUUsWUFBWSxZQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQU8sRUFFaEQsY0FBSyxLQUFLLEVBQUUsa0JBQWtCLFlBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQUMsS0FBSzs7b0JBQUssT0FBQSxDQUM1QixlQUFzQixLQUFLLEVBQUUsbUJBQW1CLGFBQzlDLGlCQUFPLEtBQUssRUFBRSxVQUFVLGFBQ3JCLEtBQUssQ0FBQyxLQUFLLEVBQ1gsS0FBSyxDQUFDLFFBQVEsSUFBSSxlQUFNLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxrQkFBVSxJQUMzRSxFQUVQLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FDcEIsY0FBSyxLQUFLLEVBQUUsZ0JBQWdCLFlBQUcsS0FBSyxDQUFDLFdBQVcsR0FBTyxDQUN4RCxFQUVBLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQ3hCLGdCQUNFLElBQUksRUFBQyxNQUFNLEVBQ1gsS0FBSyxFQUFFLFVBQVUsRUFDakIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxFQUNwQyxLQUFLLEVBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQVksSUFBSSxFQUFFLEVBQzdDLFFBQVEsRUFBRSxVQUFDLENBQUMsSUFBSyxPQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQXhDLENBQXdDLEVBQ3pELFFBQVEsRUFBRSxXQUFXLElBQUksWUFBWSxHQUNyQyxDQUNILEVBRUEsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FDMUIsZ0JBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsVUFBVSxFQUNqQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQ3BDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUM3RSxRQUFRLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUF0RSxDQUFzRSxFQUN2RixRQUFRLEVBQUUsV0FBVyxJQUFJLFlBQVksR0FDckMsQ0FDSCxFQUVBLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQ3hCLGdCQUNFLElBQUksRUFBQyxNQUFNLEVBQ1gsS0FBSyxFQUFFLFVBQVUsRUFDakIsS0FBSyxFQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFZLElBQUksRUFBRSxFQUM3QyxRQUFRLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUF4QyxDQUF3QyxFQUN6RCxRQUFRLEVBQUUsV0FBVyxJQUFJLFlBQVksR0FDckMsQ0FDSCxFQUVBLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQzFCLGtCQUNFLEtBQUssRUFBRSxXQUFXLEVBQ2xCLEtBQUssRUFBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBWSxJQUFJLEVBQUUsRUFDN0MsUUFBUSxFQUFFLFVBQUMsQ0FBQyxJQUFLLE9BQUEsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBeEMsQ0FBd0MsRUFDekQsUUFBUSxFQUFFLFdBQVcsSUFBSSxZQUFZLGFBRXJDLGlCQUFRLEtBQUssRUFBQyxFQUFFLFlBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLEdBQVUsRUFDM0QsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRSxHQUFHLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxDQUMzQixpQkFBd0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLFlBQ3JDLEdBQUcsQ0FBQyxLQUFLLElBREMsR0FBRyxDQUFDLEtBQUssQ0FFYixDQUNWLEVBSjRCLENBSTVCLENBQUMsSUFDSyxDQUNWLEVBRUEsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksQ0FDM0IsZUFBSyxLQUFLLEVBQUUsc0JBQXNCLGFBQ2hDLGdCQUNFLElBQUksRUFBQyxVQUFVLEVBQ2YsT0FBTyxFQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFhLElBQUksS0FBSyxFQUNuRCxRQUFRLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUExQyxDQUEwQyxFQUMzRCxRQUFRLEVBQUUsV0FBVyxJQUFJLFlBQVksRUFDckMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQ3hDLEVBQ0YsZUFBTSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFDaEQsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLEdBQ3RCLElBQ0gsQ0FDUCxFQUVBLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDckIsY0FBSyxLQUFLLEVBQUUsVUFBVSxZQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQU8sQ0FDbkQsS0EzRU8sS0FBSyxDQUFDLElBQUksQ0E0RWQsQ0FDUCxDQUFBO2lCQUFBLENBQUMsR0FDRSxFQUVOLGVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGFBQzdFLFVBQVUsSUFBSSxDQUNiLGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsS0FBSyx3QkFDQSxXQUFXLEtBQ2QsU0FBUyxFQUFFLENBQUMsRUFDWixlQUFlLEVBQUUsYUFBYSxFQUM5QixLQUFLLEVBQUUsU0FBUyxFQUNoQixNQUFNLEVBQUUsbUJBQW1CLEVBQzNCLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUVsRCxRQUFRLEVBQUUsWUFBWSxFQUN0QixPQUFPLEVBQUUsUUFBUSxxQkFHVixDQUNWLEVBQ0QsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLHdCQUFPLFdBQVcsS0FBRSxTQUFTLEVBQUUsQ0FBQyxLQUNyQyxRQUFRLEVBQUUsV0FBVyxJQUFJLFlBQVksWUFFcEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQy9ELElBQ0wsSUFDRCxDQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnO1xuXG5pbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnO1xuICBsYWJlbDogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pjtcbn1cblxuaW50ZXJmYWNlIEZvcm1TY2hlbWEge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGZpZWxkczogRm9ybUZpZWxkW107XG4gIG5vZGVfaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtaWNGb3JtTWVzc2FnZVByb3BzIHtcbiAgc2NoZW1hOiBGb3JtU2NoZW1hO1xuICBvblN1Ym1pdDogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICBvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWJtaXR0ZWQ6IGJvb2xlYW47XG4gIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgLyoqIFwiY2FyZFwiID0gaW5saW5lIGNoYXQgYnViYmxlIChkZWZhdWx0KSwgXCJmb290ZXJcIiA9IGNvbXBhY3QgZm9vdGVyIGxheW91dCAqL1xuICB2YXJpYW50PzogJ2NhcmQnIHwgJ2Zvb3Rlcic7XG59XG5cbmNvbnN0IER5bmFtaWNGb3JtTWVzc2FnZTogUmVhY3QuRkM8RHluYW1pY0Zvcm1NZXNzYWdlUHJvcHM+ID0gKHtcbiAgc2NoZW1hLFxuICBvblN1Ym1pdCxcbiAgb25DYW5jZWwsXG4gIGlzU3VibWl0dGluZyxcbiAgaXNTdWJtaXR0ZWQsXG4gIHByaW1hcnlDb2xvciA9ICcjMjU2M2ViJyxcbiAgZm9udEZhbWlseSA9ICdpbmhlcml0JyxcbiAgdmFyaWFudCA9ICdjYXJkJyxcbn0pID0+IHtcbiAgY29uc3QgW2Zvcm1EYXRhLCBzZXRGb3JtRGF0YV0gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGNvbnN0IGlzRm9vdGVyID0gdmFyaWFudCA9PT0gJ2Zvb3Rlcic7XG4gIGNvbnN0IGFsbEZpZWxkc09wdGlvbmFsID0gc2NoZW1hLmZpZWxkcy5ldmVyeSgoZikgPT4gIWYucmVxdWlyZWQpO1xuICBjb25zdCBzaG93Q2FuY2VsID0gISFvbkNhbmNlbCAmJiBhbGxGaWVsZHNPcHRpb25hbCAmJiAhaXNTdWJtaXR0ZWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgICBzZXRGb3JtRGF0YSgocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSk7XG4gICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIG5leHRbbmFtZV07XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGlzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZykgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3RXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgc2NoZW1hLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLnJlcXVpcmVkICYmICFmb3JtRGF0YVtmaWVsZC5uYW1lXSAmJiBmb3JtRGF0YVtmaWVsZC5uYW1lXSAhPT0gMCAmJiBmb3JtRGF0YVtmaWVsZC5uYW1lXSAhPT0gZmFsc2UpIHtcbiAgICAgICAgbmV3RXJyb3JzW2ZpZWxkLm5hbWVdID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld0Vycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgc2V0RXJyb3JzKG5ld0Vycm9ycyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25TdWJtaXQoZm9ybURhdGEpO1xuICB9O1xuXG4gIC8vIOKUgOKUgCBTdHlsZXMgKHZhcmlhbnQtYXdhcmUpIOKUgOKUgFxuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0gaXNGb290ZXJcbiAgICA/IHsgd2lkdGg6ICcxMDAlJyB9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWZhZmInLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogaXNGb290ZXIgPyAnMTNweCcgOiAnMTRweCcsXG4gICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzRm9vdGVyID8gJzhweCcgOiAnMTJweCcsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgZmllbGRzV3JhcHBlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0gaXNGb290ZXJcbiAgICA/IHsgbWF4SGVpZ2h0OiAnMjAwcHgnLCBvdmVyZmxvd1k6ICdhdXRvJywgcGFkZGluZ1JpZ2h0OiAnNHB4JyB9XG4gICAgOiB7fTtcblxuICBjb25zdCBmaWVsZENvbnRhaW5lclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpbkJvdHRvbTogaXNGb290ZXIgPyAnOHB4JyA6ICcxMnB4JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6IGlzRm9vdGVyID8gJzEycHgnIDogJzEzcHgnLFxuICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICBjb2xvcjogJyMzNzQxNTEnLFxuICAgIG1hcmdpbkJvdHRvbTogJzJweCcsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBkZXNjcmlwdGlvblN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTFweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBtYXJnaW5Cb3R0b206ICczcHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgaW5wdXRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6IGlzRm9vdGVyID8gJzZweCAxMHB4JyA6ICc4cHggMTJweCcsXG4gICAgZm9udFNpemU6IGlzRm9vdGVyID8gJzEzcHgnIDogJzE0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDFkNWRiJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU3VibWl0dGVkID8gJyNmM2Y0ZjYnIDogJyNmZmZmZmYnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uaW5wdXRTdHlsZSxcbiAgICBhcHBlYXJhbmNlOiAnYXV0bycgYXMgY29uc3QsXG4gIH07XG5cbiAgY29uc3QgZXJyb3JTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIGNvbG9yOiAnI2VmNDQ0NCcsXG4gICAgbWFyZ2luVG9wOiAnMnB4JyxcbiAgfTtcblxuICBjb25zdCBidXR0b25TdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6IGlzRm9vdGVyID8gJzlweCAxNnB4JyA6ICcxMHB4IDE2cHgnLFxuICAgIGZvbnRTaXplOiBpc0Zvb3RlciA/ICcxM3B4JyA6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU3VibWl0dGVkID8gJyM5Y2EzYWYnIDogcHJpbWFyeUNvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogaXNGb290ZXIgPyAnMTBweCcgOiAnOHB4JyxcbiAgICBjdXJzb3I6IGlzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZyA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgb3BhY2l0eTogaXNTdWJtaXR0aW5nID8gMC43IDogMSxcbiAgICBtYXJnaW5Ub3A6IGlzRm9vdGVyID8gJzJweCcgOiAnNHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNoZWNrYm94Q29udGFpbmVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZVN0eWxlfT57c2NoZW1hLm1lc3NhZ2V9PC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2ZpZWxkc1dyYXBwZXJTdHlsZX0+XG4gICAgICAgIHtzY2hlbWEuZmllbGRzLm1hcCgoZmllbGQpID0+IChcbiAgICAgICAgICA8ZGl2IGtleT17ZmllbGQubmFtZX0gc3R5bGU9e2ZpZWxkQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5cbiAgICAgICAgICAgICAge2ZpZWxkLmxhYmVsfVxuICAgICAgICAgICAgICB7ZmllbGQucmVxdWlyZWQgJiYgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjZWY0NDQ0JywgbWFyZ2luTGVmdDogJzJweCcgfX0+Kjwvc3Bhbj59XG4gICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICB7ZmllbGQuZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtkZXNjcmlwdGlvblN0eWxlfT57ZmllbGQuZGVzY3JpcHRpb259PC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZmllbGQudHlwZSA9PT0gJ3RleHQnICYmIChcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ31cbiAgICAgICAgICAgICAgICB2YWx1ZT17KGZvcm1EYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZykgfHwgJyd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRlZCB8fCBpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZmllbGQudHlwZSA9PT0gJ251bWJlcicgJiYgKFxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aW5wdXRTdHlsZX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17ZmllbGQucGxhY2Vob2xkZXIgfHwgJyd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZm9ybURhdGFbZmllbGQubmFtZV0pIDogJyd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogJycpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRlZCB8fCBpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZmllbGQudHlwZSA9PT0gJ2RhdGUnICYmIChcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXsoZm9ybURhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nKSB8fCAnJ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZShmaWVsZC5uYW1lLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtmaWVsZC50eXBlID09PSAnc2VsZWN0JyAmJiAoXG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgdmFsdWU9eyhmb3JtRGF0YVtmaWVsZC5uYW1lXSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGZpZWxkLm5hbWUsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0ZWQgfHwgaXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPntmaWVsZC5wbGFjZWhvbGRlciB8fCAnU2VsZWN0Li4uJ308L29wdGlvbj5cbiAgICAgICAgICAgICAgICB7ZmllbGQub3B0aW9ucz8ubWFwKChvcHQpID0+IChcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICB7b3B0LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2ZpZWxkLnR5cGUgPT09ICdib29sZWFuJyAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2NoZWNrYm94Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyhmb3JtRGF0YVtmaWVsZC5uYW1lXSBhcyBib29sZWFuKSB8fCBmYWxzZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGZpZWxkLm5hbWUsIGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTZweCcsIGhlaWdodDogJzE2cHgnIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMzNzQxNTEnIH19PlxuICAgICAgICAgICAgICAgICAge2ZpZWxkLnBsYWNlaG9sZGVyIHx8ICdZZXMnfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZXJyb3JzW2ZpZWxkLm5hbWVdICYmIChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17ZXJyb3JTdHlsZX0+e2Vycm9yc1tmaWVsZC5uYW1lXX08L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBtYXJnaW5Ub3A6IGlzRm9vdGVyID8gJzJweCcgOiAnNHB4JyB9fT5cbiAgICAgICAge3Nob3dDYW5jZWwgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLi4uYnV0dG9uU3R5bGUsXG4gICAgICAgICAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2QxZDVkYicsXG4gICAgICAgICAgICAgIGN1cnNvcjogaXNTdWJtaXR0aW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgb25DbGljaz17b25DYW5jZWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2tpcFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgc3R5bGU9e3sgLi4uYnV0dG9uU3R5bGUsIG1hcmdpblRvcDogMCB9fVxuICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRlZCB8fCBpc1N1Ym1pdHRpbmd9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNTdWJtaXR0ZWQgPyAnU3VibWl0dGVkJyA6IGlzU3VibWl0dGluZyA/ICdTdWJtaXR0aW5nLi4uJyA6ICdTdWJtaXQnfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IER5bmFtaWNGb3JtTWVzc2FnZTtcbiJdfQ==
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0Zvcm1NZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0Zvcm1NZXNzYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFpQixNQUFNLE9BQU8sQ0FBQztBQW9DdkQsSUFBTSxrQkFBa0IsR0FBc0MsVUFBQyxFQVU5RDtRQVRDLE1BQU0sWUFBQSxFQUNOLFFBQVEsY0FBQSxFQUNSLFFBQVEsY0FBQSxFQUNSLFlBQVksa0JBQUEsRUFDWixXQUFXLGlCQUFBLEVBQ1gsb0JBQXdCLEVBQXhCLFlBQVksbUJBQUcsU0FBUyxLQUFBLEVBQ3hCLGtCQUFzQixFQUF0QixVQUFVLG1CQUFHLFNBQVMsS0FBQSxFQUN0QixlQUFnQixFQUFoQixPQUFPLG1CQUFHLE1BQU0sS0FBQSxFQUNoQixLQUFLLFdBQUE7SUFFQyxJQUFBLEtBQTBCLFFBQVEsQ0FBMEIsRUFBRSxDQUFDLEVBQTlELFFBQVEsUUFBQSxFQUFFLFdBQVcsUUFBeUMsQ0FBQztJQUNoRSxJQUFBLEtBQXNCLFFBQVEsQ0FBeUIsRUFBRSxDQUFDLEVBQXpELE1BQU0sUUFBQSxFQUFFLFNBQVMsUUFBd0MsQ0FBQztJQUMzRCxJQUFBLEtBQXdCLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBELE9BQU8sUUFBQSxFQUFFLFVBQVUsUUFBaUMsQ0FBQztJQUU1RCxJQUFNLFFBQVEsR0FBRyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQ3RDLElBQU0sWUFBWSxHQUFHLE9BQU8sS0FBSyxZQUFZLENBQUM7SUFDOUMsSUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBWCxDQUFXLENBQUMsQ0FBQztJQUNsRSxJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJ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O0FBQ3hDLENBQUM7QUFFRCxlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnO1xuXG5pbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnO1xuICBsYWJlbDogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pjtcbn1cblxuaW50ZXJmYWNlIEZvcm1TY2hlbWEge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGZpZWxkczogRm9ybUZpZWxkW107XG4gIG5vZGVfaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtaWNGb3JtTWVzc2FnZVByb3BzIHtcbiAgc2NoZW1hOiBGb3JtU2NoZW1hO1xuICBvblN1Ym1pdDogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICBvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWJtaXR0ZWQ6IGJvb2xlYW47XG4gIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgLyoqXG4gICAqIFwiY2FyZFwiICAgICAgID0gaW5saW5lIGNoYXQgYnViYmxlXG4gICAqIFwiZm9vdGVyXCIgICAgID0gY29tcGFjdCBmb290ZXIgbGF5b3V0XG4gICAqIFwiZnVsbHNjcmVlblwiID0gZmlsbHMgdGhlIGNoYXQgcGFuZWw7IG1lc3NhZ2Ugc2hvd24gYXMgYSBoZWFkaW5nIG9uIHRvcFxuICAgKi9cbiAgdmFyaWFudD86ICdjYXJkJyB8ICdmb290ZXInIHwgJ2Z1bGxzY3JlZW4nO1xuICAvKiogT3B0aW9uYWwgaGVhZGluZyBhYm92ZSB0aGUgbWVzc2FnZSAoZS5nLiB0aGUgYWdlbnQgbmFtZSkgZm9yIHRoZSBmdWxsc2NyZWVuIGxheW91dC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IER5bmFtaWNGb3JtTWVzc2FnZTogUmVhY3QuRkM8RHluYW1pY0Zvcm1NZXNzYWdlUHJvcHM+ID0gKHtcbiAgc2NoZW1hLFxuICBvblN1Ym1pdCxcbiAgb25DYW5jZWwsXG4gIGlzU3VibWl0dGluZyxcbiAgaXNTdWJtaXR0ZWQsXG4gIHByaW1hcnlDb2xvciA9ICcjMjU2M2ViJyxcbiAgZm9udEZhbWlseSA9ICdpbmhlcml0JyxcbiAgdmFyaWFudCA9ICdjYXJkJyxcbiAgdGl0bGUsXG59KSA9PiB7XG4gIGNvbnN0IFtmb3JtRGF0YSwgc2V0Rm9ybURhdGFdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgY29uc3QgW2Vycm9ycywgc2V0RXJyb3JzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcbiAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaXNGb290ZXIgPSB2YXJpYW50ID09PSAnZm9vdGVyJztcbiAgY29uc3QgaXNGdWxsc2NyZWVuID0gdmFyaWFudCA9PT0gJ2Z1bGxzY3JlZW4nO1xuICBjb25zdCBhbGxGaWVsZHNPcHRpb25hbCA9IHNjaGVtYS5maWVsZHMuZXZlcnkoKGYpID0+ICFmLnJlcXVpcmVkKTtcbiAgY29uc3Qgc2hvd0NhbmNlbCA9ICEhb25DYW5jZWwgJiYgYWxsRmllbGRzT3B0aW9uYWwgJiYgIWlzU3VibWl0dGVkO1xuICBjb25zdCBkaXNhYmxlZCA9IGlzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIHNldEZvcm1EYXRhKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKTtcbiAgICBpZiAoZXJyb3JzW25hbWVdKSB7XG4gICAgICBzZXRFcnJvcnMoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgbmV4dFtuYW1lXTtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoaXNTdWJtaXR0ZWQgfHwgaXNTdWJtaXR0aW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXdFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBzY2hlbWEuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQucmVxdWlyZWQgJiYgIWZvcm1EYXRhW2ZpZWxkLm5hbWVdICYmIGZvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSAwICYmIGZvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSBmYWxzZSkge1xuICAgICAgICBuZXdFcnJvcnNbZmllbGQubmFtZV0gPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3RXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBzZXRFcnJvcnMobmV3RXJyb3JzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvblN1Ym1pdChmb3JtRGF0YSk7XG4gIH07XG5cbiAgLy8g4pSA4pSAIFN0eWxlcyAodmFyaWFudC1hd2FyZSkg4pSA4pSAXG5cbiAgY29uc3QgZm9ybVN0eWxlOiBDU1NQcm9wZXJ0aWVzID0gaXNGdWxsc2NyZWVuXG4gICAgPyB7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzEwMCUnLCB3aWR0aDogJzEwMCUnLCBmb250RmFtaWx5IH1cbiAgICA6IGlzRm9vdGVyXG4gICAgPyB7IHdpZHRoOiAnMTAwJScsIGZvbnRGYW1pbHkgfVxuICAgIDoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxNHB4JyxcbiAgICAgICAgcGFkZGluZzogJzE2cHgnLFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA0KScsXG4gICAgICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6IGlzRnVsbHNjcmVlbiA/ICcyMHB4IDIycHggMTZweCcgOiAwLFxuICAgIGJvcmRlckJvdHRvbTogaXNGdWxsc2NyZWVuID8gJzFweCBzb2xpZCAjZWVmMGYzJyA6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICB9O1xuXG4gIGNvbnN0IHRpdGxlU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgY29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBsZXR0ZXJTcGFjaW5nOiAnMC4wMmVtJyxcbiAgICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyxcbiAgICBtYXJnaW5Cb3R0b206ICc2cHgnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogaXNGdWxsc2NyZWVuID8gJzE4cHgnIDogaXNGb290ZXIgPyAnMTNweCcgOiAnMTVweCcsXG4gICAgbGluZUhlaWdodDogMS40LFxuICAgIGNvbG9yOiBpc0Z1bGxzY3JlZW4gPyAnIzExMTgyNycgOiAnIzM3NDE1MScsXG4gICAgbWFyZ2luQm90dG9tOiBpc0Z1bGxzY3JlZW4gPyAwIDogaXNGb290ZXIgPyAnMTBweCcgOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogaXNGdWxsc2NyZWVuID8gNzAwIDogNTAwLFxuICB9O1xuXG4gIGNvbnN0IGJvZHlTdHlsZTogQ1NTUHJvcGVydGllcyA9IGlzRnVsbHNjcmVlblxuICAgID8geyBmbGV4OiAxLCBvdmVyZmxvd1k6ICdhdXRvJywgcGFkZGluZzogJzE4cHggMjJweCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogJzE4cHgnIH1cbiAgICA6IGlzRm9vdGVyXG4gICAgPyB7IG1heEhlaWdodDogJzIyMHB4Jywgb3ZlcmZsb3dZOiAnYXV0bycsIHBhZGRpbmdSaWdodDogJzRweCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogJzEycHgnIH1cbiAgICA6IHsgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMTRweCcgfTtcblxuICBjb25zdCBsYWJlbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgY29sb3I6ICcjMWYyOTM3JyxcbiAgICBtYXJnaW5Cb3R0b206ICc2cHgnLFxuICB9O1xuXG4gIGNvbnN0IGRlc2NyaXB0aW9uU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgIG1hcmdpblRvcDogJy0ycHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzdweCcsXG4gICAgbGluZUhlaWdodDogMS40LFxuICB9O1xuXG4gIGNvbnN0IGJhc2VJbnB1dFN0eWxlID0gKG5hbWU6IHN0cmluZyk6IENTU1Byb3BlcnRpZXMgPT4gKHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDEycHgnLFxuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgYm9yZGVyOiBgMS41cHggc29saWQgJHtmb2N1c2VkID09PSBuYW1lID8gcHJpbWFyeUNvbG9yIDogJyNlNWU3ZWInfWAsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIGJhY2tncm91bmRDb2xvcjogZGlzYWJsZWQgPyAnI2YzZjRmNicgOiAnI2ZmZmZmZicsXG4gICAgY29sb3I6ICcjMTExODI3JyxcbiAgICBmb250RmFtaWx5LFxuICAgIHRyYW5zaXRpb246ICdib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxMjBtcyBlYXNlJyxcbiAgICBib3hTaGFkb3c6IGZvY3VzZWQgPT09IG5hbWUgPyBgMCAwIDAgM3B4ICR7aGV4VG9Tb2Z0UmluZyhwcmltYXJ5Q29sb3IpfWAgOiAnbm9uZScsXG4gIH0pO1xuXG4gIGNvbnN0IGVycm9yU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyNlZjQ0NDQnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gIH07XG5cbiAgY29uc3QgZm9vdGVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgLi4uKGlzRnVsbHNjcmVlblxuICAgICAgPyB7IHBhZGRpbmc6ICcxNnB4IDIycHgnLCBib3JkZXJUb3A6ICcxcHggc29saWQgI2VlZjBmMycgfVxuICAgICAgOiB7IG1hcmdpblRvcDogaXNGb290ZXIgPyAnOHB4JyA6ICcxNHB4JyB9KSxcbiAgfTtcblxuICBjb25zdCBwcmltYXJ5QnV0dG9uU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBwYWRkaW5nOiAnMTFweCAxNnB4JyxcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogZGlzYWJsZWQgPyAnIzljYTNhZicgOiBwcmltYXJ5Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgY3Vyc29yOiBkaXNhYmxlZCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgb3BhY2l0eTogaXNTdWJtaXR0aW5nID8gMC43NSA6IDEsXG4gICAgZm9udEZhbWlseSxcbiAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAxMjBtcyBlYXNlJyxcbiAgfTtcblxuICBjb25zdCBza2lwQnV0dG9uU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzExcHggMTZweCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnMS41cHggc29saWQgI2U1ZTdlYicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgY3Vyc29yOiBpc1N1Ym1pdHRpbmcgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRmllbGQgPSAoZmllbGQ6IEZvcm1GaWVsZCkgPT4gKFxuICAgIDxkaXYga2V5PXtmaWVsZC5uYW1lfT5cbiAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+XG4gICAgICAgIHtmaWVsZC5sYWJlbH1cbiAgICAgICAge2ZpZWxkLnJlcXVpcmVkICYmIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnI2VmNDQ0NCcsIG1hcmdpbkxlZnQ6ICczcHgnIH19Pio8L3NwYW4+fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAge2ZpZWxkLmRlc2NyaXB0aW9uICYmIDxkaXYgc3R5bGU9e2Rlc2NyaXB0aW9uU3R5bGV9PntmaWVsZC5kZXNjcmlwdGlvbn08L2Rpdj59XG5cbiAgICAgIHtmaWVsZC50eXBlID09PSAndGV4dCcgJiYgKFxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgc3R5bGU9e2Jhc2VJbnB1dFN0eWxlKGZpZWxkLm5hbWUpfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ31cbiAgICAgICAgICB2YWx1ZT17KGZvcm1EYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZykgfHwgJyd9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWQoZmllbGQubmFtZSl9XG4gICAgICAgICAgb25CbHVyPXsoKSA9PiBzZXRGb2N1c2VkKG51bGwpfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtmaWVsZC50eXBlID09PSAnbnVtYmVyJyAmJiAoXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIHN0eWxlPXtiYXNlSW5wdXRTdHlsZShmaWVsZC5uYW1lKX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17ZmllbGQucGxhY2Vob2xkZXIgfHwgJyd9XG4gICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZm9ybURhdGFbZmllbGQubmFtZV0pIDogJyd9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogJycpfVxuICAgICAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWQoZmllbGQubmFtZSl9XG4gICAgICAgICAgb25CbHVyPXsoKSA9PiBzZXRGb2N1c2VkKG51bGwpfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtmaWVsZC50eXBlID09PSAnZGF0ZScgJiYgKFxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgc3R5bGU9e2Jhc2VJbnB1dFN0eWxlKGZpZWxkLm5hbWUpfVxuICAgICAgICAgIHZhbHVlPXsoZm9ybURhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nKSB8fCAnJ31cbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZShmaWVsZC5uYW1lLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgb25Gb2N1cz17KCkgPT4gc2V0Rm9jdXNlZChmaWVsZC5uYW1lKX1cbiAgICAgICAgICBvbkJsdXI9eygpID0+IHNldEZvY3VzZWQobnVsbCl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2ZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIChcbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIHN0eWxlPXt7IC4uLmJhc2VJbnB1dFN0eWxlKGZpZWxkLm5hbWUpLCBhcHBlYXJhbmNlOiAnYXV0bycgYXMgY29uc3QsIGN1cnNvcjogZGlzYWJsZWQgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInIH19XG4gICAgICAgICAgdmFsdWU9eyhmb3JtRGF0YVtmaWVsZC5uYW1lXSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGZpZWxkLm5hbWUsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICBvbkZvY3VzPXsoKSA9PiBzZXRGb2N1c2VkKGZpZWxkLm5hbWUpfVxuICAgICAgICAgIG9uQmx1cj17KCkgPT4gc2V0Rm9jdXNlZChudWxsKX1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e2ZpZWxkLnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QuLi4nfTwvb3B0aW9uPlxuICAgICAgICAgIHtmaWVsZC5vcHRpb25zPy5tYXAoKG9wdCkgPT4gKFxuICAgICAgICAgICAgPG9wdGlvbiBrZXk9e29wdC52YWx1ZX0gdmFsdWU9e29wdC52YWx1ZX0+XG4gICAgICAgICAgICAgIHtvcHQubGFiZWx9XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICApfVxuXG4gICAgICB7ZmllbGQudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIChcbiAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzEwcHgnLCBjdXJzb3I6IGRpc2FibGVkID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBjaGVja2VkPXsoZm9ybURhdGFbZmllbGQubmFtZV0gYXMgYm9vbGVhbikgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZShmaWVsZC5uYW1lLCBlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTdweCcsIGhlaWdodDogJzE3cHgnLCBhY2NlbnRDb2xvcjogcHJpbWFyeUNvbG9yLCBjdXJzb3I6ICdpbmhlcml0JyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMzc0MTUxJyB9fT57ZmllbGQucGxhY2Vob2xkZXIgfHwgJ1llcyd9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgKX1cblxuICAgICAge2Vycm9yc1tmaWVsZC5uYW1lXSAmJiA8ZGl2IHN0eWxlPXtlcnJvclN0eWxlfT57ZXJyb3JzW2ZpZWxkLm5hbWVdfTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBjb25zdCBidXR0b25zID0gKFxuICAgIDxkaXYgc3R5bGU9e2Zvb3RlclN0eWxlfT5cbiAgICAgIHtzaG93Q2FuY2VsICYmIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9e3NraXBCdXR0b25TdHlsZX0gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30gb25DbGljaz17b25DYW5jZWx9PlxuICAgICAgICAgIFNraXBcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApfVxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9e3ByaW1hcnlCdXR0b25TdHlsZX0gZGlzYWJsZWQ9e2Rpc2FibGVkfT5cbiAgICAgICAge2lzU3VibWl0dGVkID8gJ1N1Ym1pdHRlZCcgOiBpc1N1Ym1pdHRpbmcgPyAnU3VibWl0dGluZ+KApicgOiAnU3VibWl0J31cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2Zvcm1TdHlsZX0+XG4gICAgICB7KHNjaGVtYS5tZXNzYWdlIHx8IChpc0Z1bGxzY3JlZW4gJiYgdGl0bGUpKSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfT5cbiAgICAgICAgICB7aXNGdWxsc2NyZWVuICYmIHRpdGxlICYmIDxkaXYgc3R5bGU9e3RpdGxlU3R5bGV9Pnt0aXRsZX08L2Rpdj59XG4gICAgICAgICAge3NjaGVtYS5tZXNzYWdlICYmIDxkaXYgc3R5bGU9e21lc3NhZ2VTdHlsZX0+e3NjaGVtYS5tZXNzYWdlfTwvZGl2Pn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtib2R5U3R5bGV9PntzY2hlbWEuZmllbGRzLm1hcChyZW5kZXJGaWVsZCl9PC9kaXY+XG5cbiAgICAgIHtidXR0b25zfVxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbi8qKiBUcmFuc2x1Y2VudCB2ZXJzaW9uIG9mIHRoZSBwcmltYXJ5IGNvbG9yIGZvciB0aGUgZm9jdXMgcmluZyAoYWNjZXB0cyAjcmdiLyNycmdnYmIpLiAqL1xuZnVuY3Rpb24gaGV4VG9Tb2Z0UmluZyhoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG0gPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgY29uc3QgZnVsbCA9IG0ubGVuZ3RoID09PSAzID8gbS5zcGxpdCgnJykubWFwKChjKSA9PiBjICsgYykuam9pbignJykgOiBtO1xuICBjb25zdCBpbnQgPSBwYXJzZUludChmdWxsLCAxNik7XG4gIGlmIChmdWxsLmxlbmd0aCAhPT0gNiB8fCBOdW1iZXIuaXNOYU4oaW50KSkgcmV0dXJuICdyZ2JhKDM3LDk5LDIzNSwwLjE1KSc7XG4gIGNvbnN0IHIgPSAoaW50ID4+IDE2KSAmIDI1NTtcbiAgY29uc3QgZyA9IChpbnQgPj4gOCkgJiAyNTU7XG4gIGNvbnN0IGIgPSBpbnQgJiAyNTU7XG4gIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAwLjE1KWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IER5bmFtaWNGb3JtTWVzc2FnZTtcbiJdfQ==