PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
← All changes | includes/page-form-builder/form-settings/_out/settings_effects.js +773 -39 10.15.6 → 11.9 View file →
@@ -1,10 +1,10 @@
1 1 "use strict";
2 2
3 -/**
4 - * Applies effects in Canvas, after changing some settings in the right sidebar in BFB.
5 - *
6 - * @file ../includes/page-form-builder/form-settings/_src/settings_effects.js
3 +/**
4 + * Applies effects in Canvas, after changing some settings in the right sidebar in BFB.
5 + *
6 + * @file ../includes/page-form-builder/form-settings/_src/settings_effects.js
7 7 */
8 8 (function (w, d) {
9 9 'use strict';
10 10
@@ -38,18 +38,20 @@
38 38 if (!options || typeof options !== 'object') {
39 39 return;
40 40 }
41 41 Object.keys(options).forEach(function (k) {
42 - Effects.apply_one(k, options[k], ctx);
42 + Effects.apply_one(k, options[k], Object.assign({
43 + options: options
44 + }, ctx || {}));
43 45 });
44 46 };
45 47
46 - /**
47 - * Normalize settings pack to the minimum required shape:
48 - * { options: {}, css_vars: {} }
49 - *
50 - * @param {*} pack
51 - * @return {{options:Object, css_vars:Object, bfb_options?:Object}|null}
48 + /**
49 + * Normalize settings pack to the minimum required shape:
50 + * { options: {}, css_vars: {} }
51 + *
52 + * @param {*} pack
53 + * @return {{options:Object, css_vars:Object, bfb_options?:Object}|null}
52 54 */
53 55 Effects.normalize_pack = function (pack) {
54 56 if (pack === null || typeof pack === 'undefined' || pack === '') {
55 57 return null;
@@ -88,15 +90,15 @@
88 90 }
89 91 return pack;
90 92 };
91 93
92 - /**
93 - * Re-apply settings effects after a canvas rebuild / structure load.
94 - *
95 - * This is needed because structure loading can replace DOM nodes that effects target.
96 - *
97 - * @param {*} settings_pack string|object settings_json pack (or plain options map)
98 - * @param {Object} [ctx]
94 + /**
95 + * Re-apply settings effects after a canvas rebuild / structure load.
96 + *
97 + * This is needed because structure loading can replace DOM nodes that effects target.
98 + *
99 + * @param {*} settings_pack string|object settings_json pack (or plain options map)
100 + * @param {Object} [ctx]
99 101 */
100 102 Effects.reapply_after_canvas = function (settings_pack, ctx) {
101 103 const pack = Effects.normalize_pack(settings_pack);
102 104 if (!pack) {
@@ -106,8 +108,11 @@
106 108 // Apply immediately (best effort).
107 109 Effects.apply_all(pack.options, Object.assign({
108 110 source: 'reapply_after_canvas'
109 111 }, ctx || {}));
112 + wpbc_bfb_global_form_style__apply(null, Object.assign({
113 + source: 'reapply_after_canvas'
114 + }, ctx || {}));
110 115
111 116 // Some modules/hydration may run shortly after; do one more pass.
112 117 setTimeout(function () {
113 118 Effects.apply_all(pack.options, Object.assign({
@@ -112,8 +117,11 @@
112 117 setTimeout(function () {
113 118 Effects.apply_all(pack.options, Object.assign({
114 119 source: 'reapply_after_canvas_delayed'
115 120 }, ctx || {}));
121 + wpbc_bfb_global_form_style__apply(null, Object.assign({
122 + source: 'reapply_after_canvas_delayed'
123 + }, ctx || {}));
116 124 }, 60);
117 125 };
118 126
119 127 // 1) Apply from AJAX load.
@@ -123,8 +131,11 @@
123 131 Effects.apply_all(pack.options, {
124 132 source: 'apply'
125 133 });
126 134 }
135 + wpbc_bfb_global_form_style__apply(null, {
136 + source: 'apply-global-style'
137 + });
127 138 });
128 139
129 140 // 2) Apply live from UI change (delegated).
130 141 function css_escape(value) {
@@ -150,9 +161,15 @@
150 161 if (len_group) {
151 162 return len_group.querySelector('input[data-wpbc_slider_len_writer][data-wpbc-bfb-fs-key]') || len_group.querySelector('input[data-wpbc-bfb-fs-type="length"][data-wpbc-bfb-fs-key]') || null;
152 163 }
153 164
154 - // 3) Range: event came from range input inside .wpbc_slider_range_group
165 + // 3) Spacing: event came from vertical/horizontal number inside .wpbc_spacing_group.
166 + const spacing_group = el.closest('.wpbc_spacing_group');
167 + if (spacing_group) {
168 + return spacing_group.querySelector('input[data-wpbc_spacing_writer][data-wpbc-bfb-fs-key]') || spacing_group.querySelector('input[data-wpbc-bfb-fs-type="spacing"][data-wpbc-bfb-fs-key]') || null;
169 + }
170 +
171 + // 4) Range: event came from range input inside .wpbc_slider_range_group
155 172 const range_group = el.closest('.wpbc_slider_range_group');
156 173 if (range_group) {
157 174 return range_group.querySelector('input[data-wpbc_slider_range_writer][data-wpbc-bfb-fs-key]') || range_group.querySelector('input[data-wpbc_slider_range_writer]') || null;
158 175 }
@@ -170,8 +187,21 @@
170 187 const selector = control_id ? 'input[type="radio"][name="' + css_escape(control_id) + '"]:checked' : 'input[type="radio"]:checked';
171 188 const checked = fs_root.querySelector(selector);
172 189 return checked ? String(checked.value || '') : '';
173 190 }
191 + if (fs_type === 'spacing') {
192 + const group = original_target && original_target.closest ? original_target.closest('.wpbc_spacing_group') : fs_root.closest('.wpbc_spacing_group');
193 + const vertical_input = group ? group.querySelector('input[data-wpbc_spacing_vertical]') : null;
194 + const horizontal_input = group ? group.querySelector('input[data-wpbc_spacing_horizontal]') : null;
195 + const writer = group ? group.querySelector('input[data-wpbc_spacing_writer]') : null;
196 + const vertical = vertical_input ? String(vertical_input.value || '0') : '0';
197 + const horizontal = horizontal_input ? String(horizontal_input.value || vertical) : vertical;
198 + const combined = wpbc_bfb_form_appearance__normalize_spacing_numbers(vertical, horizontal);
199 + if (writer) {
200 + writer.value = combined;
201 + }
202 + return combined;
203 + }
174 204
175 205 // CHECKBOX / TOGGLE
176 206 if (original_target && original_target.type === 'checkbox' || fs_root.type === 'checkbox') {
177 207 const cb = original_target && original_target.type === 'checkbox' ? original_target : fs_root;
@@ -186,14 +216,9 @@
186 216 return String(original_target.value);
187 217 }
188 218 return '';
189 219 }
190 - function on_change(ev) {
191 - // Ignore events dispatched by code (apply/reapply, slider sync, etc.). Effects should react only to real user input + explicit wpbc:bfb:form_settings:apply.
192 - if (ev && ev.isTrusted === false) {
193 - return;
194 - }
195 - const target = ev && ev.target;
220 + function apply_change_from_target(target, event_type, event_source) {
196 221 if (!target) {
197 222 return;
198 223 }
199 224 const fs_root = find_fs_root(target);
@@ -207,12 +232,12 @@
207 232 const fs_type = String(fs_root.getAttribute('data-wpbc-bfb-fs-type') || '');
208 233 const tag = String(target.tagName || '').toLowerCase();
209 234 const type = String(target.type || '').toLowerCase();
210 235 const use_change = fs_type === 'toggle' || fs_type === 'select' || fs_type === 'radio' || type === 'checkbox' || type === 'radio' || tag === 'select';
211 - if (use_change && ev.type !== 'change') {
236 + if (use_change && event_type !== 'change') {
212 237 return;
213 238 }
214 - if (!use_change && ev.type !== 'input') {
239 + if (!use_change && event_type !== 'input') {
215 240 return;
216 241 }
217 242 // -------------------------------------------------------------------------------------------
218 243
@@ -222,28 +247,737 @@
222 247 }
223 248 const scope = fs_root.getAttribute('data-wpbc-bfb-fs-scope') || '';
224 249 const value = read_value_from_fs_root(fs_root, target);
225 250 Effects.apply_one(key, value, {
226 - source: 'ui',
251 + source: event_source || 'ui',
227 252 scope: scope,
228 253 control: target,
229 254 fs_root: fs_root
230 255 });
231 256 }
257 + function is_coloris_control(target) {
258 + if (!target || !target.matches) {
259 + return false;
260 + }
261 + return target.matches('[data-wpbc-bfb-fs-type="color"], [data-inspector-type="color"], .wpbc_bfb_coloris');
262 + }
263 + function on_change(ev) {
264 + // Ignore generic synthetic events dispatched by code (apply/reapply, slider sync, etc.).
265 + // Coloris dispatches synthetic input events while the user picks a color, so allow those color controls through.
266 + if (ev && ev.isTrusted === false && !is_coloris_control(ev.target)) {
267 + return;
268 + }
269 + apply_change_from_target(ev && ev.target, ev && ev.type, ev && ev.isTrusted === false ? 'coloris' : 'ui');
270 + }
232 271 d.addEventListener('input', on_change, false);
233 272 d.addEventListener('change', on_change, false);
273 + function on_coloris_pick(ev) {
274 + const detail = ev && ev.detail ? ev.detail : {};
275 + const target = detail.currentEl || detail.el || detail.input || ev.target || null;
276 + if (!is_coloris_control(target)) {
277 + return;
278 + }
279 + if (detail.color && target.value !== detail.color) {
280 + target.value = detail.color;
281 + }
282 + apply_change_from_target(target, 'input', 'coloris');
283 + }
284 + d.addEventListener('coloris:pick', on_coloris_pick, false);
285 + d.addEventListener('wpbc:bfb:coloris:change', on_coloris_pick, false);
234 286 })(window, document);
287 +function wpbc_bfb_form_appearance__get_presets() {
288 + return {
289 + bordered: {
290 + background: '#ffffff',
291 + borderColor: '#cccccc',
292 + borderWidth: '1px',
293 + radius: '2px',
294 + padding: '10px 30px',
295 + shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px'
296 + },
297 + none: {
298 + background: 'transparent',
299 + borderColor: 'transparent',
300 + borderWidth: '0px',
301 + radius: '0px',
302 + padding: '0px',
303 + shadow: 'none'
304 + },
305 + soft: {
306 + background: '#f9f9fa',
307 + borderColor: '#fff',
308 + borderWidth: '3px',
309 + radius: '8px',
310 + padding: '20px',
311 + shadow: 'rgba(15, 23, 42, 0.06) 0px 4px 16px 0px'
312 + }
313 + };
314 +}
315 +function wpbc_bfb_form_appearance__is_dark_theme(options) {
316 + options = options && typeof options === 'object' ? options : {};
317 + return 'wpbc_theme_dark_1' === String(options.booking_form_theme || '');
318 +}
319 +function wpbc_bfb_form_appearance__get_preset_for_options(style, options) {
320 + const presets = wpbc_bfb_form_appearance__get_presets();
321 + if (!wpbc_bfb_form_appearance__is_dark_theme(options)) {
322 + return presets[style] || presets.bordered;
323 + }
324 + if ('soft' === style) {
325 + return {
326 + background: '#1f2937',
327 + borderColor: '#334155',
328 + borderWidth: '3px',
329 + radius: '8px',
330 + padding: '20px',
331 + shadow: 'rgba(0, 0, 0, 0.24) 0px 4px 16px 0px'
332 + };
333 + }
334 + return presets[style] || presets.bordered;
335 +}
336 +function wpbc_bfb_form_appearance__sanitize_color(value, fallback) {
337 + const v = String(value == null ? '' : value).trim();
338 + if (/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(v)) {
339 + return v;
340 + }
341 + if (v === 'transparent') {
342 + return v;
343 + }
344 + return fallback;
345 +}
346 +function wpbc_bfb_form_appearance__sanitize_optional_color(value) {
347 + return wpbc_bfb_form_appearance__sanitize_color(value, '');
348 +}
235 349
350 +/**
351 + * Resolve an opaque accent color with the PHP-localized installation default.
352 + *
353 + * The Form Style effects live outside the registration IIFE, so the default is
354 + * deliberately read from the shared localized payload at the point of use.
355 + * Invalid requested and localized values return an empty string, allowing the
356 + * caller to skip the accent overlay without throwing or producing invalid CSS.
357 + *
358 + * @param {*} value Requested accent color.
359 + * @return {string} Valid three- or six-digit hexadecimal color, or an empty string.
360 + */
361 +function wpbc_bfb_global_form_style__sanitize_accent_color(value) {
362 + const requested_color = String(value == null ? '' : value).trim();
363 + if (/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(requested_color)) {
364 + return requested_color;
365 + }
366 + const settings_vars = window.wpbc_bfb_settings_vars && typeof window.wpbc_bfb_settings_vars === 'object' ? window.wpbc_bfb_settings_vars : {};
367 + const accent_defaults = settings_vars.form_accent_defaults && typeof settings_vars.form_accent_defaults === 'object' ? settings_vars.form_accent_defaults : {};
368 + const default_color = String(accent_defaults.booking_form_accent_color || '').trim();
369 + return /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(default_color) ? default_color : '';
370 +}
371 +function wpbc_bfb_form_appearance__sanitize_length(value, fallback) {
372 + const v = String(value == null ? '' : value).trim();
373 + if (/^\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(v)) {
374 + return v;
375 + }
376 + return fallback;
377 +}
378 +function wpbc_bfb_form_appearance__sanitize_spacing(value, fallback) {
379 + const v = String(value == null ? '' : value).trim().replace(/\s+/g, ' ');
380 + const parts = v ? v.split(' ') : [];
381 + if (parts.length < 1 || parts.length > 4) {
382 + return fallback;
383 + }
384 + for (let i = 0; i < parts.length; i++) {
385 + if (!/^\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(parts[i])) {
386 + return fallback;
387 + }
388 + }
389 + return parts.join(' ');
390 +}
391 +function wpbc_bfb_form_appearance__normalize_spacing_numbers(vertical, horizontal) {
392 + const v = String(vertical == null ? '' : vertical).trim();
393 + const h = String(horizontal == null ? '' : horizontal).trim();
394 + const vertical_num = /^\d+(?:\.\d+)?$/.test(v) ? v : '0';
395 + const horizontal_num = /^\d+(?:\.\d+)?$/.test(h) ? h : vertical_num;
396 + return vertical_num + 'px ' + horizontal_num + 'px';
397 +}
398 +function wpbc_bfb_form_appearance__collect_options(ctx, key, value) {
399 + let options = ctx && ctx.options && typeof ctx.options === 'object' ? Object.assign({}, ctx.options) : {};
400 + if (window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function') {
401 + options = Object.assign(window.WPBC_BFB_FormSettings.collect('form') || {}, options);
402 + }
403 + if (key) {
404 + options[String(key)] = value;
405 + }
406 + if (wpbc_bfb_form_appearance__is_custom_control_key(key)) {
407 + options.booking_form_container_style = 'custom';
408 + wpbc_bfb_form_appearance__set_container_style_control('custom');
409 + }
410 + return options;
411 +}
412 +function wpbc_bfb_form_appearance__get_custom_control_keys() {
413 + return ['booking_form_background_color', 'booking_form_border_color', 'booking_form_border_width', 'booking_form_border_radius', 'booking_form_padding', 'booking_form_text_color', 'booking_form_field_background_color', 'booking_form_field_text_color', 'booking_form_field_border_color'];
414 +}
415 +function wpbc_bfb_form_appearance__is_custom_control_key(key) {
416 + return wpbc_bfb_form_appearance__get_custom_control_keys().indexOf(String(key || '')) !== -1;
417 +}
418 +function wpbc_bfb_form_appearance__set_container_style_control(value) {
419 + const control = document.querySelector('[data-wpbc-bfb-fs-key="booking_form_container_style"]');
420 + if (!control || control.value === value) {
421 + return;
422 + }
423 + control.value = value;
424 +}
425 +function wpbc_bfb_form_appearance__set_radio_control(key, value) {
426 + const row = document.querySelector('.wpbc_bfb__form_setting[data-key="' + key + '"]');
427 + if (!row) {
428 + return;
429 + }
430 + const wrap = row.querySelector('.wpbc_bfb__form_setting_radio[data-wpbc-bfb-fs-controlid]');
431 + const control_id = wrap ? String(wrap.getAttribute('data-wpbc-bfb-fs-controlid') || '') : '';
432 + const radios = control_id ? row.querySelectorAll('input[type="radio"][name="' + control_id + '"]') : row.querySelectorAll('input[type="radio"]');
433 + radios.forEach(function (radio) {
434 + const should_check = String(radio.value) === String(value == null ? '' : value);
435 + radio.checked = should_check;
436 + const choice = radio.closest ? radio.closest('.wpbc_theme_choice') : null;
437 + if (choice) {
438 + choice.classList.toggle('is-selected', should_check);
439 + }
440 + });
441 +}
442 +function wpbc_bfb_form_appearance__set_select_control(key, value) {
443 + const control = document.querySelector('[data-wpbc-bfb-fs-key="' + key + '"]');
444 + if (control) {
445 + control.value = String(value == null ? '' : value);
446 + }
447 +}
448 +function wpbc_bfb_form_appearance__get_current_options() {
449 + return window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function' ? window.WPBC_BFB_FormSettings.collect('form') || {} : {};
450 +}
451 +function wpbc_bfb_form_appearance__get_style_value_from_options(options) {
452 + options = options && typeof options === 'object' ? options : {};
453 + const theme = String(options.booking_form_theme || '');
454 + const style = String(options.booking_form_container_style || 'inherit');
455 + if ('custom' === style) {
456 + return 'custom';
457 + }
458 + if ('inherit' === style || '' === style) {
459 + return 'inherit';
460 + }
461 + const prefix = 'wpbc_theme_dark_1' === theme ? 'dark' : 'light';
462 + if (['bordered', 'none', 'soft'].indexOf(style) === -1) {
463 + return prefix + '_bordered';
464 + }
465 + return prefix + '_' + style;
466 +}
467 +function wpbc_bfb_form_appearance__sync_form_style_control(options) {
468 + wpbc_bfb_form_appearance__set_radio_control('booking_form_style', wpbc_bfb_form_appearance__get_style_value_from_options(options));
469 +}
470 +function wpbc_bfb_form_appearance__resolve_form_style_choice(value) {
471 + const current_options = wpbc_bfb_form_appearance__get_current_options();
472 + const current_theme = String(current_options.booking_form_theme || '');
473 + const choice = String(value || 'inherit');
474 + if ('custom' === choice) {
475 + return {
476 + booking_form_theme: current_theme,
477 + booking_form_container_style: 'custom'
478 + };
479 + }
480 + if ('inherit' === choice || '' === choice) {
481 + return {
482 + booking_form_theme: '',
483 + booking_form_container_style: 'inherit'
484 + };
485 + }
486 + const parts = choice.split('_');
487 + const theme = 'dark' === parts[0] ? 'wpbc_theme_dark_1' : '';
488 + const style = parts[1] || 'bordered';
489 + return {
490 + booking_form_theme: theme,
491 + booking_form_container_style: ['bordered', 'none', 'soft'].indexOf(style) === -1 ? 'bordered' : style
492 + };
493 +}
494 +function wpbc_bfb_form_appearance__is_user_theme_switch(ctx) {
495 + const source = String(ctx && ctx.source ? ctx.source : '');
496 + return ['ui', 'coloris'].indexOf(source) !== -1;
497 +}
498 +function wpbc_bfb_form_appearance__is_custom_style(options) {
499 + return String(options && options.booking_form_container_style ? options.booking_form_container_style : 'inherit') === 'custom';
500 +}
501 +function wpbc_bfb_form_appearance__sync_custom_controls(options) {
502 + const is_custom = wpbc_bfb_form_appearance__is_custom_style(options);
503 + const reset_row = document.querySelector('[data-wpbc-bfb-custom-appearance-reset-row]');
504 + const base_theme_row = document.querySelector('.wpbc_bfb__form_setting[data-key="booking_form_theme"]');
505 + wpbc_bfb_form_appearance__get_custom_control_keys().forEach(function (key) {
506 + const row = document.querySelector('.wpbc_bfb__form_setting[data-key="' + key + '"]');
507 + if (!row) {
508 + return;
509 + }
510 + row.hidden = !is_custom;
511 + row.setAttribute('aria-hidden', is_custom ? 'false' : 'true');
512 + row.classList.toggle('is-hidden', !is_custom);
513 + });
514 + if (reset_row) {
515 + reset_row.hidden = !is_custom;
516 + reset_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true');
517 + reset_row.classList.toggle('is-hidden', !is_custom);
518 + }
519 + if (base_theme_row) {
520 + base_theme_row.hidden = !is_custom;
521 + base_theme_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true');
522 + base_theme_row.classList.toggle('is-hidden', !is_custom);
523 + }
524 +}
525 +function wpbc_bfb_form_appearance__resolve(options) {
526 + let style = String(options.booking_form_container_style || 'inherit');
527 + if (style === 'inherit') {
528 + const global_options = window.wpbc_bfb_settings_vars && window.wpbc_bfb_settings_vars.global_appearance ? window.wpbc_bfb_settings_vars.global_appearance : {};
529 + options = Object.assign({}, global_options || {});
530 + style = String(options.booking_form_container_style || 'bordered');
531 + }
532 + if (style === 'bordered') {
533 + return null;
534 + }
535 + if (style !== 'custom') {
536 + return wpbc_bfb_form_appearance__get_preset_for_options(style, options);
537 + }
538 + return {
539 + background: wpbc_bfb_form_appearance__sanitize_color(options.booking_form_background_color, '#ffffff'),
540 + borderColor: wpbc_bfb_form_appearance__sanitize_color(options.booking_form_border_color, '#cccccc'),
541 + borderWidth: wpbc_bfb_form_appearance__sanitize_length(options.booking_form_border_width, '1px'),
542 + radius: wpbc_bfb_form_appearance__sanitize_length(options.booking_form_border_radius, '2px'),
543 + padding: wpbc_bfb_form_appearance__sanitize_spacing(options.booking_form_padding, '10px 30px'),
544 + shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px'
545 + };
546 +}
547 +function wpbc_bfb_form_appearance__resolve_design_colors(options) {
548 + options = options && typeof options === 'object' ? options : {};
549 + if (!wpbc_bfb_form_appearance__is_custom_style(options)) {
550 + if (wpbc_bfb_form_appearance__is_dark_theme(options) && 'none' === String(options.booking_form_container_style || '')) {
551 + return {
552 + textColor: '#1d2327',
553 + fieldBackground: '',
554 + fieldText: '',
555 + fieldBorder: ''
556 + };
557 + }
558 + return {
559 + textColor: '',
560 + fieldBackground: '',
561 + fieldText: '',
562 + fieldBorder: ''
563 + };
564 + }
565 + return {
566 + textColor: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_text_color),
567 + fieldBackground: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_background_color),
568 + fieldText: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_text_color),
569 + fieldBorder: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_border_color)
570 + };
571 +}
572 +function wpbc_bfb_form_appearance__apply_vars(value, ctx) {
573 + const options = wpbc_bfb_form_appearance__collect_options(ctx, ctx && ctx.key, value);
574 + const resolved = wpbc_bfb_form_appearance__resolve(options);
575 + const design = wpbc_bfb_form_appearance__resolve_design_colors(options);
576 + const is_custom = wpbc_bfb_form_appearance__is_custom_style(options);
577 + const root = ctx && ctx.canvas;
578 + wpbc_bfb_form_appearance__sync_form_style_control(options);
579 + wpbc_bfb_form_appearance__sync_custom_controls(options);
580 + if (!root || !root.querySelectorAll) {
581 + return;
582 + }
583 + const wraps = root.querySelectorAll('.wpbc_bfb__form_preview_section_container, .wpbc_bfb_form');
584 + if (!wraps.length) {
585 + return;
586 + }
587 + wraps.forEach(function (wrap) {
588 + if (!wrap || !wrap.style) {
589 + return;
590 + }
591 + wrap.classList.toggle('wpbc_bfb_form_appearance_custom', is_custom);
592 + if (!resolved) {
593 + wrap.style.removeProperty('--wpbc-bfb-form-background');
594 + wrap.style.removeProperty('--wpbc-bfb-form-border-color');
595 + wrap.style.removeProperty('--wpbc-bfb-form-border-width');
596 + wrap.style.removeProperty('--wpbc-bfb-form-border-radius');
597 + wrap.style.removeProperty('--wpbc-bfb-form-padding');
598 + wrap.style.removeProperty('--wpbc-bfb-form-box-shadow');
599 + } else {
600 + wrap.style.setProperty('--wpbc-bfb-form-background', resolved.background);
601 + wrap.style.setProperty('--wpbc-bfb-form-border-color', resolved.borderColor);
602 + wrap.style.setProperty('--wpbc-bfb-form-border-width', resolved.borderWidth);
603 + wrap.style.setProperty('--wpbc-bfb-form-border-radius', resolved.radius);
604 + wrap.style.setProperty('--wpbc-bfb-form-padding', resolved.padding);
605 + wrap.style.setProperty('--wpbc-bfb-form-box-shadow', resolved.shadow);
606 + }
607 + if (design.textColor) {
608 + wrap.style.setProperty('--wpbc_form-label-color', design.textColor);
609 + wrap.style.setProperty('--wpbc_form-label-sublabel-color', design.textColor);
610 + } else {
611 + wrap.style.removeProperty('--wpbc_form-label-color');
612 + wrap.style.removeProperty('--wpbc_form-label-sublabel-color');
613 + }
614 + if (design.fieldBackground) {
615 + wrap.style.setProperty('--wpbc_form-field-background-color', design.fieldBackground);
616 + wrap.style.setProperty('--wpbc_form-field-menu-color', design.fieldBackground);
617 + } else {
618 + wrap.style.removeProperty('--wpbc_form-field-background-color');
619 + wrap.style.removeProperty('--wpbc_form-field-menu-color');
620 + }
621 + if (design.fieldText) {
622 + wrap.style.setProperty('--wpbc_form-field-text-color', design.fieldText);
623 + } else {
624 + wrap.style.removeProperty('--wpbc_form-field-text-color');
625 + }
626 + if (design.fieldBorder) {
627 + wrap.style.setProperty('--wpbc_form-field-border-color', design.fieldBorder);
628 + wrap.style.setProperty('--wpbc_form-field-border-color-spare', design.fieldBorder);
629 + } else {
630 + wrap.style.removeProperty('--wpbc_form-field-border-color');
631 + wrap.style.removeProperty('--wpbc_form-field-border-color-spare');
632 + }
633 + });
634 +}
635 +function wpbc_bfb_global_form_style__get_vars() {
636 + return window.wpbc_bfb_settings_vars || {};
637 +}
638 +function wpbc_bfb_global_form_style__get_presets() {
639 + const vars = wpbc_bfb_global_form_style__get_vars();
640 + return vars.form_style_presets && typeof vars.form_style_presets === 'object' ? vars.form_style_presets : {};
641 +}
642 +function wpbc_bfb_global_form_style__get_custom_keys() {
643 + return ['booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color', 'booking_form_custom_button_border_width', 'booking_form_custom_button_border_radius'];
644 +}
645 +function wpbc_bfb_global_form_style__get_custom_defaults() {
646 + const vars = wpbc_bfb_global_form_style__get_vars();
647 + const localized = vars.custom_form_style_defaults && typeof vars.custom_form_style_defaults === 'object' ? vars.custom_form_style_defaults : {};
648 + return Object.assign({
649 + booking_form_custom_background_color: '#ffffff',
650 + booking_form_custom_border_color: '#cccccc',
651 + booking_form_custom_border_width: '1px',
652 + booking_form_custom_border_radius: '2px',
653 + booking_form_custom_padding_vertical: '10px',
654 + booking_form_custom_padding_horizontal: '30px',
655 + booking_form_custom_text_color: '#1d2327',
656 + booking_form_custom_field_background_color: '#ffffff',
657 + booking_form_custom_field_text_color: '#3c434a',
658 + booking_form_custom_field_border_color: '#cccccc',
659 + booking_form_custom_button_background_color: '#066aab',
660 + booking_form_custom_button_text_color: '#ffffff',
661 + booking_form_custom_button_border_color: '#066aab',
662 + booking_form_custom_button_hover_background_color: '#055589',
663 + booking_form_custom_button_hover_text_color: '#ffffff',
664 + booking_form_custom_button_hover_border_color: '#055589',
665 + booking_form_custom_secondary_button_background_color: '#fdfdfd',
666 + booking_form_custom_secondary_button_text_color: '#444444',
667 + booking_form_custom_secondary_button_border_color: '#eeeeee',
668 + booking_form_custom_secondary_button_hover_background_color: '#fdfdfd',
669 + booking_form_custom_secondary_button_hover_text_color: '#444444',
670 + booking_form_custom_secondary_button_hover_border_color: '#4d91cd',
671 + booking_form_custom_button_border_width: '1px',
672 + booking_form_custom_button_border_radius: '3px'
673 + }, localized);
674 +}
675 +function wpbc_bfb_global_form_style__get_current_options(ctx, key, value) {
676 + const vars = wpbc_bfb_global_form_style__get_vars();
677 + let options = vars.global_form_style && typeof vars.global_form_style === 'object' ? Object.assign({}, vars.global_form_style) : {};
678 + if (window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function') {
679 + options = Object.assign(options, window.WPBC_BFB_FormSettings.collect('global') || {});
680 + }
681 + if (ctx && ctx.options && typeof ctx.options === 'object') {
682 + options = Object.assign(options, ctx.options);
683 + }
684 + if (key) {
685 + options[String(key)] = value;
686 + }
687 + if (!options.booking_form_style) {
688 + options.booking_form_style = 'light_bordered';
689 + }
690 + return options;
691 +}
692 +function wpbc_bfb_global_form_style__mix_colors(color, target, amount) {
693 + let source = wpbc_bfb_global_form_style__sanitize_accent_color(color).replace('#', '');
694 + const destination = wpbc_bfb_form_appearance__sanitize_color(target, '#000000').replace('#', '');
695 + const channels = [];
696 + if (!source) {
697 + return '';
698 + }
699 + if (source.length === 3) {
700 + source = source.replace(/./g, function (value) {
701 + return value + value;
702 + });
703 + }
704 + for (let index = 0; index < 3; index++) {
705 + const source_channel = parseInt(source.substr(index * 2, 2), 16);
706 + const target_channel = parseInt(destination.substr(index * 2, 2), 16);
707 + channels.push(Math.round(source_channel + (target_channel - source_channel) * amount));
708 + }
709 + return '#' + channels.map(function (channel) {
710 + return ('0' + channel.toString(16)).slice(-2);
711 + }).join('');
712 +}
713 +function wpbc_bfb_global_form_style__get_luminance(color) {
714 + let hex = wpbc_bfb_global_form_style__sanitize_accent_color(color).replace('#', '');
715 + if (!hex) {
716 + return 0;
717 + }
718 + if (hex.length === 3) {
719 + hex = hex.replace(/./g, function (value) {
720 + return value + value;
721 + });
722 + }
723 + const channels = [0, 1, 2].map(function (index) {
724 + const channel = parseInt(hex.substr(index * 2, 2), 16) / 255;
725 + return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);
726 + });
727 + return 0.2126 * channels[0] + 0.7152 * channels[1] + 0.0722 * channels[2];
728 +}
729 +
730 +/**
731 + * Apply shared accent variables without masking explicit Custom button controls.
732 + *
733 + * @param {Object} css_vars Resolved base style variables.
734 + * @param {Object} options Current global style options.
735 + * @param {boolean} preserve_custom_button_colors Whether Custom button variables remain authoritative.
736 + * @return {Object} Resolved variables with the optional accent overlay.
737 + */
738 +function wpbc_bfb_global_form_style__apply_accent(css_vars, options, preserve_custom_button_colors) {
739 + if (String(options.booking_form_accent_enabled || 'Off') !== 'On') {
740 + return css_vars;
741 + }
742 + const accent = wpbc_bfb_global_form_style__sanitize_accent_color(options.booking_form_accent_color);
743 + if (!accent) {
744 + return css_vars;
745 + }
746 + const luminance = wpbc_bfb_global_form_style__get_luminance(accent);
747 + const contrast = luminance > 0.18 ? '#000000' : '#ffffff';
748 + const hover_target = '#ffffff' === contrast ? '#000000' : '#ffffff';
749 + const hover = wpbc_bfb_global_form_style__mix_colors(accent, hover_target, 0.10);
750 + const hover_contrast = contrast;
751 + const accent_overlay = {
752 + '--wpbc_form-accent-color': accent,
753 + '--wpbc_form-accent-hover-color': hover,
754 + '--wpbc_form-accent-contrast-color': contrast,
755 + '--wpbc_form-field-focus-border-color': accent,
756 + '--wpbc_form-field-focus-shadow-color': accent,
757 + '--wpbc_form-choice-checked-border-color': accent,
758 + '--wpbc_form-choice-checked-color': accent,
759 + '--wpbc_form-choice-focus-color': accent,
760 + '--wpbc_form-button-background-color': accent,
761 + '--wpbc_form-button-background-color-alt': accent,
762 + '--wpbc_form-button-border-color': accent,
763 + '--wpbc_form-button-text-color': contrast,
764 + '--wpbc_form-button-text-color-alt': contrast,
765 + '--wpbc_form-button-hover-background-color': hover,
766 + '--wpbc_form-button-hover-border-color': hover,
767 + '--wpbc_form-button-hover-text-color': hover_contrast,
768 + '--wpbc_form-button-light-hover-border-color': accent,
769 + '--wpbc_form-button-primary-hover-border-color': hover,
770 + '--wpbc_form-page-break-color': accent
771 + };
772 + if (preserve_custom_button_colors) {
773 + ['--wpbc_form-button-background-color', '--wpbc_form-button-background-color-alt', '--wpbc_form-button-border-color', '--wpbc_form-button-text-color', '--wpbc_form-button-text-color-alt', '--wpbc_form-button-hover-background-color', '--wpbc_form-button-hover-border-color', '--wpbc_form-button-hover-text-color', '--wpbc_form-button-light-hover-border-color', '--wpbc_form-button-primary-hover-border-color'].forEach(function (css_var_name) {
774 + delete accent_overlay[css_var_name];
775 + });
776 + }
777 + return Object.assign({}, css_vars, accent_overlay);
778 +}
779 +function wpbc_bfb_global_form_style__resolve_css_vars(options) {
780 + options = options && typeof options === 'object' ? options : {};
781 + const style = String(options.booking_form_style || 'light_bordered');
782 + const presets = wpbc_bfb_global_form_style__get_presets();
783 + const preset = presets[style] || presets.light_bordered || {};
784 + const defaults = wpbc_bfb_global_form_style__get_custom_defaults();
785 + if ('custom' !== style) {
786 + return wpbc_bfb_global_form_style__apply_accent(preset.css_vars && typeof preset.css_vars === 'object' ? Object.assign({}, preset.css_vars) : {}, options);
787 + }
788 + const css_vars = {
789 + '--wpbc-bfb-form-background': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_background_color, defaults.booking_form_custom_background_color),
790 + '--wpbc-bfb-form-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_border_color, defaults.booking_form_custom_border_color),
791 + '--wpbc-bfb-form-border-width': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_border_width, defaults.booking_form_custom_border_width),
792 + '--wpbc-bfb-form-border-radius': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_border_radius, defaults.booking_form_custom_border_radius),
793 + '--wpbc-bfb-form-padding': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_padding_vertical, defaults.booking_form_custom_padding_vertical) + ' ' + wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_padding_horizontal, defaults.booking_form_custom_padding_horizontal),
794 + '--wpbc-bfb-form-box-shadow': 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px',
795 + '--wpbc_form-label-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_text_color, defaults.booking_form_custom_text_color),
796 + '--wpbc_form-label-sublabel-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_text_color, defaults.booking_form_custom_text_color),
797 + '--wpbc_form-label-error-color': '#d63637',
798 + '--wpbc_form-field-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color),
799 + '--wpbc_form-field-menu-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color),
800 + '--wpbc_form-field-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_text_color, defaults.booking_form_custom_field_text_color),
801 + '--wpbc_form-field-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color),
802 + '--wpbc_form-field-border-color-spare': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color),
803 + '--wpbc_form-field-focus-border-color': '#066aab',
804 + '--wpbc_form-field-focus-shadow-color': '#066aab',
805 + '--wpbc_form-field-disabled-color': 'rgba(0, 0, 0, 0.2)',
806 + '--wpbc_form-button-border-radius': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_button_border_radius, defaults.booking_form_custom_button_border_radius),
807 + '--wpbc_form-button-border-style': 'solid',
808 + '--wpbc_form-button-border-size': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_button_border_width, defaults.booking_form_custom_button_border_width),
809 + '--wpbc_form-button-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color),
810 + '--wpbc_form-button-background-color-alt': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color),
811 + '--wpbc_form-button-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_border_color, defaults.booking_form_custom_button_border_color),
812 + '--wpbc_form-button-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color),
813 + '--wpbc_form-button-text-color-alt': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color),
814 + '--wpbc_form-button-hover-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_background_color, defaults.booking_form_custom_button_hover_background_color),
815 + '--wpbc_form-button-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color),
816 + '--wpbc_form-button-hover-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_text_color, defaults.booking_form_custom_button_hover_text_color),
817 + '--wpbc_form-choice-checked-border-color': '#066aab',
818 + '--wpbc_form-choice-checked-color': '#066aab',
819 + '--wpbc_form-choice-focus-color': '#066aab',
820 + '--wpbc_form-button-light-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_background_color, defaults.booking_form_custom_secondary_button_background_color),
821 + '--wpbc_form-button-light-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_border_color, defaults.booking_form_custom_secondary_button_border_color),
822 + '--wpbc_form-button-light-border-size': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_button_border_width, defaults.booking_form_custom_button_border_width),
823 + '--wpbc_form-button-light-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_text_color, defaults.booking_form_custom_secondary_button_text_color),
824 + '--wpbc_form-button-light-box-shadow': '0 2px 10px 2px #ffffff54',
825 + '--wpbc_form-button-light-hover-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_background_color, defaults.booking_form_custom_secondary_button_hover_background_color),
826 + '--wpbc_form-button-light-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_border_color, defaults.booking_form_custom_secondary_button_hover_border_color),
827 + '--wpbc_form-button-light-hover-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_text_color, defaults.booking_form_custom_secondary_button_hover_text_color),
828 + '--wpbc_form-button-light-hover-box-shadow': '0 2px 10px 2px #ffffff54',
829 + '--wpbc_form-button-primary-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color),
830 + '--wpbc_form-page-break-color': '#066aab'
831 + };
832 + return wpbc_bfb_global_form_style__apply_accent(css_vars, options, true);
833 +}
834 +function wpbc_bfb_global_form_style__get_css_var_keys(options) {
835 + const vars = wpbc_bfb_global_form_style__get_vars();
836 + const localized = Array.isArray(vars.form_style_css_var_names) ? vars.form_style_css_var_names : [];
837 + const keys = [];
838 + const presets = wpbc_bfb_global_form_style__get_presets();
839 + if (localized.length) {
840 + return localized;
841 + }
842 + Object.keys(presets).forEach(function (preset_key) {
843 + const preset = presets[preset_key] || {};
844 + const css_vars = preset.css_vars && typeof preset.css_vars === 'object' ? preset.css_vars : {};
845 + Object.keys(css_vars).forEach(function (var_name) {
846 + if (keys.indexOf(var_name) === -1) {
847 + keys.push(var_name);
848 + }
849 + });
850 + });
851 + Object.keys(wpbc_bfb_global_form_style__resolve_css_vars(Object.assign({}, options || {}, {
852 + booking_form_style: 'custom'
853 + }))).forEach(function (var_name) {
854 + if (keys.indexOf(var_name) === -1) {
855 + keys.push(var_name);
856 + }
857 + });
858 + return keys;
859 +}
860 +function wpbc_bfb_global_form_style__sync_controls(options) {
861 + const is_custom = 'custom' === String(options && options.booking_form_style ? options.booking_form_style : '');
862 + const accent_enabled = 'On' === String(options && options.booking_form_accent_enabled ? options.booking_form_accent_enabled : 'Off');
863 + const reset_row = document.querySelector('[data-wpbc-bfb-custom-appearance-reset-row]');
864 + wpbc_bfb_form_appearance__set_radio_control('booking_form_style', options.booking_form_style || 'light_bordered');
865 + document.querySelectorAll('.wpbc_bfb__form_setting_global_custom_style').forEach(function (row) {
866 + row.hidden = !is_custom;
867 + row.setAttribute('aria-hidden', is_custom ? 'false' : 'true');
868 + row.classList.toggle('is-hidden', !is_custom);
869 + });
870 + document.querySelectorAll('.wpbc_bfb__form_setting_global_accent_dependent').forEach(function (row) {
871 + row.hidden = !accent_enabled;
872 + row.setAttribute('aria-hidden', accent_enabled ? 'false' : 'true');
873 + row.classList.toggle('is-hidden', !accent_enabled);
874 + });
875 + if (reset_row) {
876 + reset_row.hidden = !is_custom;
877 + reset_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true');
878 + reset_row.classList.toggle('is-hidden', !is_custom);
879 + }
880 +}
881 +function wpbc_bfb_global_form_style__apply(value, ctx) {
882 + const options = wpbc_bfb_global_form_style__get_current_options(ctx, ctx && ctx.key, value);
883 + const style = String(options.booking_form_style || 'light_bordered');
884 + const presets = wpbc_bfb_global_form_style__get_presets();
885 + const preset = presets[style] || presets.light_bordered || {};
886 + const css_vars = wpbc_bfb_global_form_style__resolve_css_vars(options);
887 + // Form Style is global. Always start at the complete Builder theme scope so
888 + // inline Custom tokens on an outer wrapper cannot leak into a preset when a
889 + // field-level update provides only the inner canvas in ctx.canvas.
890 + const root = document.getElementById('wpbc_bfb__theme_scope') || ctx && ctx.canvas || document;
891 + const theme_classes = [];
892 + const css_var_keys = wpbc_bfb_global_form_style__get_css_var_keys(options);
893 + wpbc_bfb_global_form_style__sync_controls(options);
894 + Object.keys(presets).forEach(function (preset_key) {
895 + const class_name = presets[preset_key] && presets[preset_key].theme_class ? String(presets[preset_key].theme_class) : '';
896 + if (class_name && theme_classes.indexOf(class_name) === -1) {
897 + theme_classes.push(class_name);
898 + }
899 + });
900 + if (!root || !root.querySelectorAll) {
901 + return;
902 + }
903 + const selector = '.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__pages_panel, .wpbc_bfb__form_preview_section_container';
904 + const wraps = [];
905 + if (root.matches && root.matches(selector)) {
906 + wraps.push(root);
907 + }
908 + root.querySelectorAll(selector).forEach(function (wrap) {
909 + wraps.push(wrap);
910 + });
911 + wraps.forEach(function (wrap) {
912 + if (!wrap || !wrap.style) {
913 + return;
914 + }
915 + theme_classes.forEach(function (class_name) {
916 + wrap.classList.remove(class_name);
917 + });
918 + if (preset.theme_class) {
919 + wrap.classList.add(String(preset.theme_class));
920 + }
921 + wrap.classList.toggle('wpbc_bfb_form_appearance_custom', 'custom' === style);
922 + css_var_keys.forEach(function (css_key) {
923 + wrap.style.removeProperty(css_key);
924 + });
925 + Object.keys(css_vars).forEach(function (css_key) {
926 + wrap.style.setProperty(css_key, css_vars[css_key]);
927 + });
928 + });
929 +}
930 +['booking_form_style', 'booking_form_accent_enabled', 'booking_form_accent_color', 'booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color', 'booking_form_custom_button_border_width', 'booking_form_custom_button_border_radius'].forEach(function (key) {
931 + WPBC_BFB_Settings_Effects.register(key, function (value, ctx) {
932 + wpbc_bfb_global_form_style__apply(value, Object.assign({}, ctx || {}, {
933 + key: key
934 + }));
935 + });
936 +});
937 +function wpbc_bfb_form_appearance__sync_custom_controls_from_ui() {
938 + const options = wpbc_bfb_global_form_style__get_current_options();
939 + wpbc_bfb_global_form_style__sync_controls(options);
940 + wpbc_bfb_global_form_style__apply(null, {
941 + source: 'sync-global-style'
942 + });
943 +}
944 +wpbc_bfb_form_appearance__sync_custom_controls_from_ui();
945 +document.addEventListener('DOMContentLoaded', wpbc_bfb_form_appearance__sync_custom_controls_from_ui);
946 +
236 947 // BOOKING_FORM_THEME.
237 948 WPBC_BFB_Settings_Effects.register('booking_form_theme', function (value, ctx) {
238 - // const root = ctx.canvas;
239 - const root = document.getElementById('wpbc_bfb__theme_scope');
949 + const root = ctx && ctx.canvas || document.getElementById('wpbc_bfb__theme_scope') || document;
240 950 if (!root || !root.querySelectorAll) {
241 951 return;
242 952 }
243 -
244 - // const wraps = root.querySelectorAll( '.wpbc_container.wpbc_form' );
245 - const wraps = root.querySelectorAll('.wpbc_bfb__pages_panel');
953 + if (wpbc_bfb_form_appearance__is_user_theme_switch(ctx)) {
954 + const current_options = wpbc_bfb_form_appearance__get_current_options();
955 + if ('custom' === String(current_options.booking_form_container_style || '')) {
956 + current_options.booking_form_theme = value;
957 + wpbc_bfb_form_appearance__sync_form_style_control(current_options);
958 + wpbc_bfb_form_appearance__apply_vars('custom', Object.assign({}, ctx || {}, {
959 + key: 'booking_form_container_style',
960 + source: 'theme-base-custom',
961 + options: current_options
962 + }));
963 + } else {
964 + wpbc_bfb_form_appearance__set_container_style_control('bordered');
965 + wpbc_bfb_form_appearance__apply_vars('bordered', Object.assign({}, ctx || {}, {
966 + key: 'booking_form_container_style'
967 + }));
968 + }
969 + } else if (ctx && ctx.options) {
970 + wpbc_bfb_form_appearance__sync_form_style_control(ctx.options);
971 + }
972 + const theme_selector = '.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__pages_panel';
973 + const wraps = [];
974 + if (root.matches && root.matches(theme_selector)) {
975 + wraps.push(root);
976 + }
977 + root.querySelectorAll(theme_selector).forEach(function (wrap) {
978 + wraps.push(wrap);
979 + });
246 980 if (!wraps.length) {
247 981 return;
248 982 }
249 983 wraps.forEach(function (wrap) {
@@ -271,9 +1005,9 @@
271 1005 }
272 1006 const v = String(value == null ? '' : value).trim();
273 1007
274 1008 // allow only "number + unit".
275 - if (v && !/^-?\d+(?:\.\d+)?(?:%|px|rem|em|vw|vh)$/.test(v)) {
1009 + if (v && !/^\d+(?:\.\d+)?(?:%|px|rem|em|vw|vh)$/.test(v)) {
276 1010 return;
277 1011 }
278 1012 wraps.forEach(function (wrap) {
279 1013 if (!wrap || !wrap.style) {
@@ -299,12 +1033,12 @@
299 1033 }
300 1034
301 1035 // Get builder async.
302 1036 wpbc_bfb_api.with_builder(function (Builder) {
303 - /**
304 - * Capture active right sidebar tab and return restore handle.
305 - *
306 - * @return {{restore:function():void}|null}
1037 + /**
1038 + * Capture active right sidebar tab and return restore handle.
1039 + *
1040 + * @return {{restore:function():void}|null}
307 1041 */
308 1042 function capture_right_sidebar_active_tab_restore_handle() {
309 1043 var tablist_el = document.querySelector('.wpbc_bfb__rightbar_tabs[role="tablist"]');
310 1044 if (!tablist_el) {
@@ -356,5 +1090,5 @@
356 1090 source: 'settings-effects'
357 1091 });
358 1092 });
359 1093 });
360 -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzX2VmZmVjdHMuanMiLCJuYW1lcyI6WyJ3IiwiZCIsIkVmZmVjdHMiLCJXUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIiwibWFwIiwiT2JqZWN0IiwiY3JlYXRlIiwicmVnaXN0ZXIiLCJrZXkiLCJmbiIsIlN0cmluZyIsImdldF9jYW52YXNfcm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBseV9vbmUiLCJ2YWx1ZSIsImN0eCIsImFzc2lnbiIsImNhbnZhcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJhcHBseV9hbGwiLCJvcHRpb25zIiwia2V5cyIsImZvckVhY2giLCJrIiwibm9ybWFsaXplX3BhY2siLCJwYWNrIiwiSlNPTiIsInBhcnNlIiwiX2UiLCJoYXNfc2hhcGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjc3NfdmFycyIsImJmYl9vcHRpb25zIiwicmVhcHBseV9hZnRlcl9jYW52YXMiLCJzZXR0aW5nc19wYWNrIiwic291cmNlIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZXRhaWwiLCJzZXR0aW5ncyIsImNzc19lc2NhcGUiLCJ2IiwiQ1NTIiwiZXNjYXBlIiwicmVwbGFjZSIsImZpbmRfZnNfcm9vdCIsImVsIiwiY2xvc2VzdCIsImRpcmVjdCIsImxlbl9ncm91cCIsInJhbmdlX2dyb3VwIiwicmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QiLCJmc19yb290Iiwib3JpZ2luYWxfdGFyZ2V0IiwiZnNfdHlwZSIsImdldEF0dHJpYnV0ZSIsImNvbnRyb2xfaWQiLCJzZWxlY3RvciIsImNoZWNrZWQiLCJ0eXBlIiwiY2IiLCJvbl9jaGFuZ2UiLCJldiIsImlzVHJ1c3RlZCIsInRhcmdldCIsInRhZyIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInVzZV9jaGFuZ2UiLCJzY29wZSIsImNvbnRyb2wiLCJ3aW5kb3ciLCJkb2N1bWVudCIsInJvb3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwid3JhcHMiLCJsZW5ndGgiLCJ3cmFwIiwiQXJyYXkiLCJmcm9tIiwiY2xhc3NMaXN0IiwiY2xzIiwidGVzdCIsInJlbW92ZSIsImFkZCIsInRyaW0iLCJzdHlsZSIsInJlbW92ZVByb3BlcnR5Iiwic2V0UHJvcGVydHkiLCJ3cGJjX2JmYl9hcGkiLCJ3aXRoX2J1aWxkZXIiLCJCdWlsZGVyIiwiY2FwdHVyZV9yaWdodF9zaWRlYmFyX2FjdGl2ZV90YWJfcmVzdG9yZV9oYW5kbGUiLCJ0YWJsaXN0X2VsIiwiYWN0aXZlX3RhYl9lbCIsImNsaWNrIiwicmVzdG9yZSIsInRhYl9yZXN0b3JlX2hhbmRsZSIsInJlc3RvcmVkIiwiRVZTIiwiV1BCQ19CRkJfQ29yZSIsIldQQkNfQkZCX0V2ZW50cyIsIkVWX0RPTkUiLCJTVFJVQ1RVUkVfTE9BREVEIiwiQ0FOVkFTX1JFRlJFU0hFRCIsImRvX3Jlc3RvcmUiLCJidXMiLCJvZmYiLCJfIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib24iLCJlbmFibGVkIiwic2V0X3ByZXZpZXdfbW9kZSIsInJlYnVpbGQiLCJyZWluaXQiXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9mb3JtLXNldHRpbmdzL19zcmMvc2V0dGluZ3NfZWZmZWN0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQXBwbGllcyBlZmZlY3RzIGluIENhbnZhcywgYWZ0ZXIgY2hhbmdpbmcgc29tZSBzZXR0aW5ncyBpbiB0aGUgcmlnaHQgc2lkZWJhciBpbiBCRkIuXHJcbiAqXHJcbiAqIEBmaWxlIC4uL2luY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL2Zvcm0tc2V0dGluZ3MvX3NyYy9zZXR0aW5nc19lZmZlY3RzLmpzXHJcbiAqL1xyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdGNvbnN0IEVmZmVjdHMgPSAody5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzID0gdy5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIHx8IHt9KTtcclxuXHRjb25zdCBtYXAgICAgID0gKEVmZmVjdHMubWFwID0gRWZmZWN0cy5tYXAgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApKTtcclxuXHJcblx0RWZmZWN0cy5yZWdpc3RlciA9IGZ1bmN0aW9uIChrZXksIGZuKSB7XHJcblx0XHRpZiAoIGtleSAmJiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdG1hcFtTdHJpbmcoIGtleSApXSA9IGZuO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9jYW52YXNfcm9vdCgpIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJyN3cGJjX2JmYl9fcGFnZXNfY29udGFpbmVyJyApIHx8XHJcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcnICkgfHxcclxuXHRcdFx0ZC5nZXRFbGVtZW50QnlJZCggJ3dwYmNfYmZiX19wcmV2aWV3JyApIHx8XHJcblx0XHRcdGQuYm9keSB8fCBkLmRvY3VtZW50RWxlbWVudFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdEVmZmVjdHMuYXBwbHlfb25lID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGN0eCkge1xyXG5cdFx0Y29uc3QgZm4gPSBtYXBbU3RyaW5nKCBrZXkgKV07XHJcblx0XHRpZiAoICEgZm4gKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGZuKCB2YWx1ZSwgT2JqZWN0LmFzc2lnbiggeyBrZXksIHZhbHVlLCBjYW52YXM6IGdldF9jYW52YXNfcm9vdCgpIH0sIGN0eCB8fCB7fSApICk7XHJcblx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0Ly8ga2VlcCBzaWxlbnQgaW4gcHJvZHVjdGlvbiBpZiB5b3UgcHJlZmVyXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoICdXUEJDIEVmZmVjdHMgZXJyb3I6Jywga2V5LCBlICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0RWZmZWN0cy5hcHBseV9hbGwgPSBmdW5jdGlvbiAob3B0aW9ucywgY3R4KSB7XHJcblx0XHRpZiAoICEgb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdE9iamVjdC5rZXlzKCBvcHRpb25zICkuZm9yRWFjaCggZnVuY3Rpb24gKGspIHtcclxuXHRcdFx0RWZmZWN0cy5hcHBseV9vbmUoIGssIG9wdGlvbnNba10sIGN0eCApO1xyXG5cdFx0fSApO1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5vcm1hbGl6ZSBzZXR0aW5ncyBwYWNrIHRvIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHNoYXBlOlxyXG5cdCAqIHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9XHJcblx0ICpcclxuXHQgKiBAcGFyYW0geyp9IHBhY2tcclxuXHQgKiBAcmV0dXJuIHt7b3B0aW9uczpPYmplY3QsIGNzc192YXJzOk9iamVjdCwgYmZiX29wdGlvbnM/Ok9iamVjdH18bnVsbH1cclxuXHQgKi9cclxuXHRFZmZlY3RzLm5vcm1hbGl6ZV9wYWNrID0gZnVuY3Rpb24gKHBhY2spIHtcclxuXHJcblx0XHRpZiAoIHBhY2sgPT09IG51bGwgfHwgdHlwZW9mIHBhY2sgPT09ICd1bmRlZmluZWQnIHx8IHBhY2sgPT09ICcnICkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBQYXJzZSBKU09OIHN0cmluZyBpZiBuZWVkZWQuXHJcblx0XHRpZiAoIHR5cGVvZiBwYWNrID09PSAnc3RyaW5nJyApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRwYWNrID0gSlNPTi5wYXJzZSggcGFjayApO1xyXG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICEgcGFjayB8fCB0eXBlb2YgcGFjayAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHVzZXIgcGFzc2VkIGp1c3Qge2tleTp2YWx1ZX0gb3B0aW9ucyBtYXAsIHdyYXAgaXQuXHJcblx0XHRjb25zdCBoYXNfc2hhcGUgPVxyXG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnb3B0aW9ucycgKSB8fFxyXG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnY3NzX3ZhcnMnICkgfHxcclxuXHRcdFx0XHQgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcGFjaywgJ2JmYl9vcHRpb25zJyApO1xyXG5cclxuXHRcdGlmICggISBoYXNfc2hhcGUgKSB7XHJcblx0XHRcdHBhY2sgPSB7IG9wdGlvbnM6IHBhY2ssIGNzc192YXJzOiB7fSB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISBwYWNrLm9wdGlvbnMgfHwgdHlwZW9mIHBhY2sub3B0aW9ucyAhPT0gJ29iamVjdCcgKSB7XHJcblx0XHRcdHBhY2sub3B0aW9ucyA9IHt9O1xyXG5cdFx0fVxyXG5cdFx0aWYgKCAhIHBhY2suY3NzX3ZhcnMgfHwgdHlwZW9mIHBhY2suY3NzX3ZhcnMgIT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRwYWNrLmNzc192YXJzID0ge307XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYmZiX29wdGlvbnMgaXMgb3B0aW9uYWw7IGtlZXAgaWYgdmFsaWQuXHJcblx0XHRpZiAoIHBhY2suYmZiX29wdGlvbnMgJiYgdHlwZW9mIHBhY2suYmZiX29wdGlvbnMgIT09ICdvYmplY3QnICkge1xyXG5cdFx0XHRkZWxldGUgcGFjay5iZmJfb3B0aW9ucztcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcGFjaztcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBSZS1hcHBseSBzZXR0aW5ncyBlZmZlY3RzIGFmdGVyIGEgY2FudmFzIHJlYnVpbGQgLyBzdHJ1Y3R1cmUgbG9hZC5cclxuXHQgKlxyXG5cdCAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc3RydWN0dXJlIGxvYWRpbmcgY2FuIHJlcGxhY2UgRE9NIG5vZGVzIHRoYXQgZWZmZWN0cyB0YXJnZXQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0geyp9IHNldHRpbmdzX3BhY2sgIHN0cmluZ3xvYmplY3Qgc2V0dGluZ3NfanNvbiBwYWNrIChvciBwbGFpbiBvcHRpb25zIG1hcClcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW2N0eF1cclxuXHQgKi9cclxuXHRFZmZlY3RzLnJlYXBwbHlfYWZ0ZXJfY2FudmFzID0gZnVuY3Rpb24gKHNldHRpbmdzX3BhY2ssIGN0eCkge1xyXG5cclxuXHRcdGNvbnN0IHBhY2sgPSBFZmZlY3RzLm5vcm1hbGl6ZV9wYWNrKCBzZXR0aW5nc19wYWNrICk7XHJcblx0XHRpZiAoICEgcGFjayApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFwcGx5IGltbWVkaWF0ZWx5IChiZXN0IGVmZm9ydCkuXHJcblx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzJyB9LCBjdHggfHwge30gKSApO1xyXG5cclxuXHRcdC8vIFNvbWUgbW9kdWxlcy9oeWRyYXRpb24gbWF5IHJ1biBzaG9ydGx5IGFmdGVyOyBkbyBvbmUgbW9yZSBwYXNzLlxyXG5cdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzX2RlbGF5ZWQnIH0sIGN0eCB8fCB7fSApICk7XHJcblx0XHR9LCA2MCApO1xyXG5cdH07XHJcblxyXG5cdC8vIDEpIEFwcGx5IGZyb20gQUpBWCBsb2FkLlxyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmM6YmZiOmZvcm1fc2V0dGluZ3M6YXBwbHknLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0Y29uc3QgcGFjayA9IGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbC5zZXR0aW5ncyA6IG51bGw7XHJcblx0XHRpZiAoIHBhY2sgJiYgcGFjay5vcHRpb25zICkge1xyXG5cdFx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCB7IHNvdXJjZTogJ2FwcGx5JyB9ICk7XHJcblx0XHR9XHJcblx0fSApO1xyXG5cclxuXHQvLyAyKSBBcHBseSBsaXZlIGZyb20gVUkgY2hhbmdlIChkZWxlZ2F0ZWQpLlxyXG5cdGZ1bmN0aW9uIGNzc19lc2NhcGUodmFsdWUpIHtcclxuXHRcdGNvbnN0IHYgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICk7XHJcblx0XHRpZiAoIHcuQ1NTICYmIHR5cGVvZiB3LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHJldHVybiB3LkNTUy5lc2NhcGUoIHYgKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2LnJlcGxhY2UoIC9bXmEtekEtWjAtOV9cXC1dL2csICdcXFxcJCYnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmaW5kX2ZzX3Jvb3QoZWwpIHtcclxuXHRcdGlmICggISBlbCB8fCAhIGVsLmNsb3Nlc3QgKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIDEpIERpcmVjdDogZWxlbWVudCBvciBhbmNlc3RvciBjYXJyaWVzIEZTIGtleSAoaW5wdXQvc2VsZWN0L3RleHRhcmVhIHdyaXRlciwgcmFkaW8gd3JhcHBlciwgZXRjLilcclxuXHRcdGNvbnN0IGRpcmVjdCA9IGVsLmNsb3Nlc3QoICdbZGF0YS13cGJjLWJmYi1mcy1rZXldJyApO1xyXG5cdFx0aWYgKCBkaXJlY3QgKSB7XHJcblx0XHRcdHJldHVybiBkaXJlY3Q7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gMikgTGVuZ3RoOiBldmVudCBjYW1lIGZyb20gbnVtYmVyL3VuaXQvcmFuZ2UgaW5zaWRlIC53cGJjX3NsaWRlcl9sZW5fZ3JvdXBcclxuXHRcdGNvbnN0IGxlbl9ncm91cCA9IGVsLmNsb3Nlc3QoICcud3BiY19zbGlkZXJfbGVuX2dyb3VwJyApO1xyXG5cdFx0aWYgKCBsZW5fZ3JvdXAgKSB7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0bGVuX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc2xpZGVyX2xlbl93cml0ZXJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxyXG5cdFx0XHRcdGxlbl9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwibGVuZ3RoXCJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxyXG5cdFx0XHRcdG51bGxcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyAzKSBSYW5nZTogZXZlbnQgY2FtZSBmcm9tIHJhbmdlIGlucHV0IGluc2lkZSAud3BiY19zbGlkZXJfcmFuZ2VfZ3JvdXBcclxuXHRcdGNvbnN0IHJhbmdlX2dyb3VwID0gZWwuY2xvc2VzdCggJy53cGJjX3NsaWRlcl9yYW5nZV9ncm91cCcgKTtcclxuXHRcdGlmICggcmFuZ2VfZ3JvdXAgKSB7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0cmFuZ2VfZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcclxuXHRcdFx0XHRyYW5nZV9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9yYW5nZV93cml0ZXJdJyApIHx8XHJcblx0XHRcdFx0bnVsbFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QoZnNfcm9vdCwgb3JpZ2luYWxfdGFyZ2V0KSB7XHJcblx0XHRpZiAoICEgZnNfcm9vdCApIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGZzX3R5cGUgPSBTdHJpbmcoIGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy10eXBlJyApIHx8ICcnICk7XHJcblxyXG5cdFx0Ly8gUkFESU86IHJlYWQgY2hlY2tlZCB3aXRoaW4gd3JhcHBlci5cclxuXHRcdGlmICggZnNfdHlwZSA9PT0gJ3JhZGlvJyApIHtcclxuXHRcdFx0Y29uc3QgY29udHJvbF9pZCA9IGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnICkgfHwgJyc7XHJcblx0XHRcdGNvbnN0IHNlbGVjdG9yICAgPSBjb250cm9sX2lkXHJcblx0XHRcdFx0PyAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY3NzX2VzY2FwZSggY29udHJvbF9pZCApICsgJ1wiXTpjaGVja2VkJ1xyXG5cdFx0XHRcdDogJ2lucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJztcclxuXHJcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSBmc19yb290LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XHJcblx0XHRcdHJldHVybiBjaGVja2VkID8gU3RyaW5nKCBjaGVja2VkLnZhbHVlIHx8ICcnICkgOiAnJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDSEVDS0JPWCAvIFRPR0dMRVxyXG5cdFx0aWYgKCAob3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB8fCBmc19yb290LnR5cGUgPT09ICdjaGVja2JveCcgKSB7XHJcblx0XHRcdGNvbnN0IGNiID0gKG9yaWdpbmFsX3RhcmdldCAmJiBvcmlnaW5hbF90YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JykgPyBvcmlnaW5hbF90YXJnZXQgOiBmc19yb290O1xyXG5cdFx0XHRyZXR1cm4gY2IuY2hlY2tlZCA/ICdPbicgOiAnT2ZmJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBERUZBVUxUOiB3cml0ZXIvaW5wdXQvdGV4dGFyZWEvc2VsZWN0XHJcblx0XHRpZiAoIGZzX3Jvb3QudmFsdWUgIT0gbnVsbCApIHtcclxuXHRcdFx0cmV0dXJuIFN0cmluZyggZnNfcm9vdC52YWx1ZSApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBvcmlnaW5hbF90YXJnZXQgJiYgb3JpZ2luYWxfdGFyZ2V0LnZhbHVlICE9IG51bGwgKSB7XHJcblx0XHRcdHJldHVybiBTdHJpbmcoIG9yaWdpbmFsX3RhcmdldC52YWx1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIG9uX2NoYW5nZShldikge1xyXG5cdFx0Ly8gSWdub3JlIGV2ZW50cyBkaXNwYXRjaGVkIGJ5IGNvZGUgKGFwcGx5L3JlYXBwbHksIHNsaWRlciBzeW5jLCBldGMuKS4gRWZmZWN0cyBzaG91bGQgcmVhY3Qgb25seSB0byByZWFsIHVzZXIgaW5wdXQgKyBleHBsaWNpdCB3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmFwcGx5LlxyXG5cdFx0aWYgKCBldiAmJiBldi5pc1RydXN0ZWQgPT09IGZhbHNlICkgeyByZXR1cm47IH1cclxuXHRcdGNvbnN0IHRhcmdldCA9IGV2ICYmIGV2LnRhcmdldDtcclxuXHRcdGlmICggISB0YXJnZXQgKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdGNvbnN0IGZzX3Jvb3QgPSBmaW5kX2ZzX3Jvb3QoIHRhcmdldCApO1xyXG5cdFx0aWYgKCAhIGZzX3Jvb3QgKSB7IHJldHVybjsgfVxyXG5cclxuXHJcblx0XHQvLyBOb3JtYWxpemUgZXZlbnRzIHNvIGVhY2ggY29udHJvbCBwcm9kdWNlcyBleGFjdGx5IG9uZSBlZmZlY3QgY2FsbC5cclxuXHRcdC8vIC0gdG9nZ2xlL3NlbGVjdC9yYWRpby9jaGVja2JveCA9PiBcImNoYW5nZVwiIG9ubHkuXHJcblx0XHQvLyAtIGV2ZXJ5dGhpbmcgZWxzZSAgICAgICAgICAgICAgPT4gXCJpbnB1dFwiIG9ubHkuXHJcblx0XHRjb25zdCBmc190eXBlID0gU3RyaW5nKCBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtdHlwZScgKSB8fCAnJyApO1xyXG5cdFx0Y29uc3QgdGFnICAgICA9IFN0cmluZyggdGFyZ2V0LnRhZ05hbWUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0Y29uc3QgdHlwZSAgICA9IFN0cmluZyggdGFyZ2V0LnR5cGUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdGNvbnN0IHVzZV9jaGFuZ2UgPSAoZnNfdHlwZSA9PT0gJ3RvZ2dsZScpIHx8IChmc190eXBlID09PSAnc2VsZWN0JykgfHwgKGZzX3R5cGUgPT09ICdyYWRpbycpIHx8ICh0eXBlID09PSAnY2hlY2tib3gnKSB8fCAodHlwZSA9PT0gJ3JhZGlvJykgfHwgKHRhZyA9PT0gJ3NlbGVjdCcpO1xyXG5cclxuXHRcdGlmICggdXNlX2NoYW5nZSAmJiBldi50eXBlICE9PSAnY2hhbmdlJyApIHsgcmV0dXJuOyB9XHJcblx0XHRpZiAoICEgdXNlX2NoYW5nZSAmJiBldi50eXBlICE9PSAnaW5wdXQnICkgeyByZXR1cm47IH1cclxuXHRcdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0XHRjb25zdCBrZXkgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMta2V5JyApO1xyXG5cdFx0aWYgKCAhIGtleSApIHsgcmV0dXJuOyB9XHJcblxyXG5cdFx0Y29uc3Qgc2NvcGUgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtc2NvcGUnICkgfHwgJyc7XHJcblx0XHRjb25zdCB2YWx1ZSA9IHJlYWRfdmFsdWVfZnJvbV9mc19yb290KCBmc19yb290LCB0YXJnZXQgKTtcclxuXHJcblx0XHRFZmZlY3RzLmFwcGx5X29uZSgga2V5LCB2YWx1ZSwgeyBzb3VyY2U6ICd1aScsIHNjb3BlOiBzY29wZSwgY29udHJvbDogdGFyZ2V0LCBmc19yb290OiBmc19yb290IH0gKTtcclxuXHR9XHJcblxyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0Jywgb25fY2hhbmdlLCBmYWxzZSApO1xyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX2NoYW5nZSwgZmFsc2UgKTtcclxuXHJcbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XHJcblxyXG5cclxuLy8gQk9PS0lOR19GT1JNX1RIRU1FLlxyXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19mb3JtX3RoZW1lJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcclxuXHQvLyBjb25zdCByb290ID0gY3R4LmNhbnZhcztcclxuXHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdGhlbWVfc2NvcGUnICk7XHJcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyBjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0nICk7XHJcblx0Y29uc3Qgd3JhcHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX3BhZ2VzX3BhbmVsJyApO1xyXG5cdGlmICggISB3cmFwcy5sZW5ndGggKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHR3cmFwcy5mb3JFYWNoKCBmdW5jdGlvbiAod3JhcCkge1xyXG5cdFx0Ly8gcmVtb3ZlIGFueSBwcmV2aW91cyB0aGVtZSBjbGFzc2VzIChzaW1wbGUgKyBmdXR1cmUtcHJvb2YpLlxyXG5cdFx0QXJyYXkuZnJvbSggd3JhcC5jbGFzc0xpc3QgKS5mb3JFYWNoKCBmdW5jdGlvbiAoY2xzKSB7XHJcblx0XHRcdGlmICggL153cGJjX3RoZW1lXy8udGVzdCggY2xzICkgKSB7XHJcblx0XHRcdFx0d3JhcC5jbGFzc0xpc3QucmVtb3ZlKCBjbHMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cclxuXHRcdGlmICggdmFsdWUgKSB7XHJcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCB2YWx1ZSApICk7XHJcblx0XHR9XHJcblx0fSApO1xyXG59ICk7XHJcblxyXG5cclxuLy8gQk9PS0lOR19GT1JNX0xBWU9VVF9XSURUSCDigJQgRm9ybSB3aWR0aDogYXBwbGllcyBjb21iaW5lZCBcIjEwMCVcIiAvIFwiNjAwcHhcIiAvIFwiNDByZW1cIiB0byB0aGUgYm9va2luZyBmb3JtIGNvbnRhaW5lcnMuXHJcbldQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMucmVnaXN0ZXIoICdib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcclxuXHRjb25zdCByb290ID0gY3R4ICYmIGN0eC5jYW52YXM7XHJcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyJyApO1xyXG5cdGlmICggISB3cmFwcy5sZW5ndGggKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApLnRyaW0oKTtcclxuXHJcblx0Ly8gYWxsb3cgb25seSBcIm51bWJlciArIHVuaXRcIi5cclxuXHRpZiAoIHYgJiYgISAvXi0/XFxkKyg/OlxcLlxcZCspPyg/OiV8cHh8cmVtfGVtfHZ3fHZoKSQvLnRlc3QoIHYgKSApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdHdyYXBzLmZvckVhY2goXHJcblx0XHRmdW5jdGlvbiAod3JhcCkge1xyXG5cdFx0XHRpZiAoICEgd3JhcCB8fCAhIHdyYXAuc3R5bGUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoICEgdiApIHtcclxuXHRcdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1ib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJyApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLWJvb2tpbmdfZm9ybV9sYXlvdXRfd2lkdGgnLCB2ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHQpO1xyXG59ICk7XHJcblxyXG5cclxuLy8gRGVidWcgUHJldmlldyBNb2RlLlxyXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19iZmJfcHJldmlld19tb2RlJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcclxuXHRjb25zdCByb290ID0gY3R4LmNhbnZhcztcclxuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHdyYXBzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfY29udGFpbmVyLndwYmNfZm9ybScgKTtcclxuXHRpZiAoICEgd3JhcHMubGVuZ3RoICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gR2V0IGJ1aWxkZXIgYXN5bmMuXHJcblx0d3BiY19iZmJfYXBpLndpdGhfYnVpbGRlcihcclxuXHRcdGZ1bmN0aW9uIChCdWlsZGVyKSB7XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogQ2FwdHVyZSBhY3RpdmUgcmlnaHQgc2lkZWJhciB0YWIgYW5kIHJldHVybiByZXN0b3JlIGhhbmRsZS5cclxuXHRcdFx0ICpcclxuXHRcdFx0ICogQHJldHVybiB7e3Jlc3RvcmU6ZnVuY3Rpb24oKTp2b2lkfXxudWxsfVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZnVuY3Rpb24gY2FwdHVyZV9yaWdodF9zaWRlYmFyX2FjdGl2ZV90YWJfcmVzdG9yZV9oYW5kbGUoKSB7XHJcblxyXG5cdFx0XHRcdHZhciB0YWJsaXN0X2VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcmlnaHRiYXJfdGFic1tyb2xlPVwidGFibGlzdFwiXScgKTtcclxuXHRcdFx0XHRpZiAoICEgdGFibGlzdF9lbCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIGFjdGl2ZV90YWJfZWwgPSB0YWJsaXN0X2VsLnF1ZXJ5U2VsZWN0b3IoICdbcm9sZT1cInRhYlwiXVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhIGFjdGl2ZV90YWJfZWwgKSB7XHJcblx0XHRcdFx0XHRhY3RpdmVfdGFiX2VsID0gdGFibGlzdF9lbC5xdWVyeVNlbGVjdG9yKCAnW3JvbGU9XCJ0YWJcIl1bYXJpYS1jb250cm9scz1cIndwYmNfYmZiX19wYWxldHRlX2FkZF9uZXdcIl0nICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoICEgYWN0aXZlX3RhYl9lbCB8fCB0eXBlb2YgYWN0aXZlX3RhYl9lbC5jbGljayAhPT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0dHJ5IHsgYWN0aXZlX3RhYl9lbC5jbGljaygpOyB9IGNhdGNoICggX2UgKSB7fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciB0YWJfcmVzdG9yZV9oYW5kbGUgPSBjYXB0dXJlX3JpZ2h0X3NpZGViYXJfYWN0aXZlX3RhYl9yZXN0b3JlX2hhbmRsZSgpO1xyXG5cclxuXHRcdFx0bGV0IHJlc3RvcmVkICA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgRVZTICAgICAgPSB3aW5kb3cuV1BCQ19CRkJfQ29yZSAmJiB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgPyB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgOiB7fTtcclxuXHRcdFx0dmFyIEVWX0RPTkUgID0gRVZTLlNUUlVDVFVSRV9MT0FERUQgfHwgRVZTLkNBTlZBU19SRUZSRVNIRUQgfHwgJ3dwYmM6YmZiOnN0cnVjdHVyZS1sb2FkZWQnO1xyXG5cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGRvX3Jlc3RvcmUoKSB7XHJcblx0XHRcdFx0aWYgKCByZXN0b3JlZCApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0cmVzdG9yZWQgPSB0cnVlO1xyXG5cdFx0XHRcdHRyeSB7IEJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWX0RPTkUsIGRvX3Jlc3RvcmUgKTsgfSBjYXRjaCAoIF8gKSB7fVxyXG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aWYgKCAhIHRhYl9yZXN0b3JlX2hhbmRsZSApIHsgcmV0dXJuOyB9XHJcblx0XHRcdFx0XHR0YWJfcmVzdG9yZV9oYW5kbGUucmVzdG9yZSgpO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTGlzdGVuIG9uY2UgKGJlc3QpLCBwbHVzIGEgZmFsbGJhY2sgaW4gY2FzZSBldmVudCBpc24ndCBmaXJlZC5cclxuXHRcdFx0dHJ5IHsgQnVpbGRlcj8uYnVzPy5vbj8uKCBFVl9ET05FLCBkb19yZXN0b3JlICk7IH0gY2F0Y2ggKCBfICkge31cclxuXHJcblxyXG5cdFx0XHR2YXIgZW5hYmxlZCA9ICgnT24nID09PSB2YWx1ZSk7XHJcblx0XHRcdEJ1aWxkZXIuc2V0X3ByZXZpZXdfbW9kZSggZW5hYmxlZCwgeyByZWJ1aWxkOiB0cnVlLCByZWluaXQ6IHRydWUsIHNvdXJjZTogJ3NldHRpbmdzLWVmZmVjdHMnIH0gKTtcclxuXHRcdH1cclxuXHQpO1xyXG5cclxufSApO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWixNQUFNQyxPQUFPLEdBQUlGLENBQUMsQ0FBQ0cseUJBQXlCLEdBQUdILENBQUMsQ0FBQ0cseUJBQXlCLElBQUksQ0FBQyxDQUFFO0VBQ2pGLE1BQU1DLEdBQUcsR0FBUUYsT0FBTyxDQUFDRSxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0UsR0FBRyxJQUFJQyxNQUFNLENBQUNDLE1BQU0sQ0FBRSxJQUFLLENBQUU7RUFFcEVKLE9BQU8sQ0FBQ0ssUUFBUSxHQUFHLFVBQVVDLEdBQUcsRUFBRUMsRUFBRSxFQUFFO0lBQ3JDLElBQUtELEdBQUcsSUFBSSxPQUFPQyxFQUFFLEtBQUssVUFBVSxFQUFHO01BQ3RDTCxHQUFHLENBQUNNLE1BQU0sQ0FBRUYsR0FBSSxDQUFDLENBQUMsR0FBR0MsRUFBRTtJQUN4QjtFQUNELENBQUM7RUFFRCxTQUFTRSxlQUFlQSxDQUFBLEVBQUc7SUFDMUIsT0FDQ1YsQ0FBQyxDQUFDVyxhQUFhLENBQUUsNEJBQTZCLENBQUMsSUFDL0NYLENBQUMsQ0FBQ1csYUFBYSxDQUFFLDJCQUE0QixDQUFDLElBQzlDWCxDQUFD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
1094 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzX2VmZmVjdHMuanMiLCJuYW1lcyI6WyJ3IiwiZCIsIkVmZmVjdHMiLCJXUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIiwibWFwIiwiT2JqZWN0IiwiY3JlYXRlIiwicmVnaXN0ZXIiLCJrZXkiLCJmbiIsIlN0cmluZyIsImdldF9jYW52YXNfcm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBseV9vbmUiLCJ2YWx1ZSIsImN0eCIsImFzc2lnbiIsImNhbnZhcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJhcHBseV9hbGwiLCJvcHRpb25zIiwia2V5cyIsImZvckVhY2giLCJrIiwibm9ybWFsaXplX3BhY2siLCJwYWNrIiwiSlNPTiIsInBhcnNlIiwiX2UiLCJoYXNfc2hhcGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjc3NfdmFycyIsImJmYl9vcHRpb25zIiwicmVhcHBseV9hZnRlcl9jYW52YXMiLCJzZXR0aW5nc19wYWNrIiwic291cmNlIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5Iiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZXRhaWwiLCJzZXR0aW5ncyIsImNzc19lc2NhcGUiLCJ2IiwiQ1NTIiwiZXNjYXBlIiwicmVwbGFjZSIsImZpbmRfZnNfcm9vdCIsImVsIiwiY2xvc2VzdCIsImRpcmVjdCIsImxlbl9ncm91cCIsInNwYWNpbmdfZ3JvdXAiLCJyYW5nZV9ncm91cCIsInJlYWRfdmFsdWVfZnJvbV9mc19yb290IiwiZnNfcm9vdCIsIm9yaWdpbmFsX3RhcmdldCIsImZzX3R5cGUiLCJnZXRBdHRyaWJ1dGUiLCJjb250cm9sX2lkIiwic2VsZWN0b3IiLCJjaGVja2VkIiwiZ3JvdXAiLCJ2ZXJ0aWNhbF9pbnB1dCIsImhvcml6b250YWxfaW5wdXQiLCJ3cml0ZXIiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJjb21iaW5lZCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fbm9ybWFsaXplX3NwYWNpbmdfbnVtYmVycyIsInR5cGUiLCJjYiIsImFwcGx5X2NoYW5nZV9mcm9tX3RhcmdldCIsInRhcmdldCIsImV2ZW50X3R5cGUiLCJldmVudF9zb3VyY2UiLCJ0YWciLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJ1c2VfY2hhbmdlIiwic2NvcGUiLCJjb250cm9sIiwiaXNfY29sb3Jpc19jb250cm9sIiwibWF0Y2hlcyIsIm9uX2NoYW5nZSIsImV2IiwiaXNUcnVzdGVkIiwib25fY29sb3Jpc19waWNrIiwiY3VycmVudEVsIiwiaW5wdXQiLCJjb2xvciIsIndpbmRvdyIsImRvY3VtZW50Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfcHJlc2V0cyIsImJvcmRlcmVkIiwiYmFja2dyb3VuZCIsImJvcmRlckNvbG9yIiwiYm9yZGVyV2lkdGgiLCJyYWRpdXMiLCJwYWRkaW5nIiwic2hhZG93Iiwibm9uZSIsInNvZnQiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2RhcmtfdGhlbWUiLCJib29raW5nX2Zvcm1fdGhlbWUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMiLCJzdHlsZSIsInByZXNldHMiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yIiwiZmFsbGJhY2siLCJ0cmltIiwidGVzdCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IiLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc2FuaXRpemVfYWNjZW50X2NvbG9yIiwicmVxdWVzdGVkX2NvbG9yIiwic2V0dGluZ3NfdmFycyIsIndwYmNfYmZiX3NldHRpbmdzX3ZhcnMiLCJhY2NlbnRfZGVmYXVsdHMiLCJmb3JtX2FjY2VudF9kZWZhdWx0cyIsImRlZmF1bHRfY29sb3IiLCJib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX3NwYWNpbmciLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiaSIsImpvaW4iLCJoIiwidmVydGljYWxfbnVtIiwiaG9yaXpvbnRhbF9udW0iLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2NvbGxlY3Rfb3B0aW9ucyIsIldQQkNfQkZCX0Zvcm1TZXR0aW5ncyIsImNvbGxlY3QiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9jb250cm9sX2tleSIsImJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9jb250YWluZXJfc3R5bGVfY29udHJvbCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1c3RvbV9jb250cm9sX2tleXMiLCJpbmRleE9mIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfcmFkaW9fY29udHJvbCIsInJvdyIsIndyYXAiLCJyYWRpb3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmFkaW8iLCJzaG91bGRfY2hlY2siLCJjaG9pY2UiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9zZWxlY3RfY29udHJvbCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucyIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X3N0eWxlX3ZhbHVlX2Zyb21fb3B0aW9ucyIsInRoZW1lIiwicHJlZml4Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fcmVzb2x2ZV9mb3JtX3N0eWxlX2Nob2ljZSIsImN1cnJlbnRfb3B0aW9ucyIsImN1cnJlbnRfdGhlbWUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX3VzZXJfdGhlbWVfc3dpdGNoIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfY3VzdG9tX2NvbnRyb2xzIiwiaXNfY3VzdG9tIiwicmVzZXRfcm93IiwiYmFzZV90aGVtZV9yb3ciLCJoaWRkZW4iLCJzZXRBdHRyaWJ1dGUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmUiLCJnbG9iYWxfb3B0aW9ucyIsImdsb2JhbF9hcHBlYXJhbmNlIiwiYm9va2luZ19mb3JtX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCIsImJvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzIiwiYm9va2luZ19mb3JtX3BhZGRpbmciLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZGVzaWduX2NvbG9ycyIsInRleHRDb2xvciIsImZpZWxkQmFja2dyb3VuZCIsImZpZWxkVGV4dCIsImZpZWxkQm9yZGVyIiwiYm9va2luZ19mb3JtX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9maWVsZF90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2ZpZWxkX2JvcmRlcl9jb2xvciIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fYXBwbHlfdmFycyIsInJlc29sdmVkIiwiZGVzaWduIiwicm9vdCIsIndyYXBzIiwicmVtb3ZlUHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfdmFycyIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfcHJlc2V0cyIsInZhcnMiLCJmb3JtX3N0eWxlX3ByZXNldHMiLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2N1c3RvbV9rZXlzIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMiLCJsb2NhbGl6ZWQiLCJjdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyIsImJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCIsImJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfcmFkaXVzIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXJyZW50X29wdGlvbnMiLCJnbG9iYWxfZm9ybV9zdHlsZSIsImJvb2tpbmdfZm9ybV9zdHlsZSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19taXhfY29sb3JzIiwiYW1vdW50IiwiZGVzdGluYXRpb24iLCJjaGFubmVscyIsImluZGV4Iiwic291cmNlX2NoYW5uZWwiLCJwYXJzZUludCIsInN1YnN0ciIsInRhcmdldF9jaGFubmVsIiwicHVzaCIsIk1hdGgiLCJyb3VuZCIsImNoYW5uZWwiLCJ0b1N0cmluZyIsInNsaWNlIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9sdW1pbmFuY2UiLCJoZXgiLCJwb3ciLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHlfYWNjZW50IiwicHJlc2VydmVfY3VzdG9tX2J1dHRvbl9jb2xvcnMiLCJib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQiLCJhY2NlbnQiLCJsdW1pbmFuY2UiLCJjb250cmFzdCIsImhvdmVyX3RhcmdldCIsImhvdmVyIiwiaG92ZXJfY29udHJhc3QiLCJhY2NlbnRfb3ZlcmxheSIsImNzc192YXJfbmFtZSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19yZXNvbHZlX2Nzc192YXJzIiwicHJlc2V0IiwibGlnaHRfYm9yZGVyZWQiLCJkZWZhdWx0cyIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3NzX3Zhcl9rZXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzIiwicHJlc2V0X2tleSIsInZhcl9uYW1lIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3N5bmNfY29udHJvbHMiLCJhY2NlbnRfZW5hYmxlZCIsInRoZW1lX2NsYXNzZXMiLCJjc3NfdmFyX2tleXMiLCJjbGFzc19uYW1lIiwidGhlbWVfY2xhc3MiLCJyZW1vdmUiLCJhZGQiLCJjc3Nfa2V5Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9sc19mcm9tX3VpIiwidGhlbWVfc2VsZWN0b3IiLCJmcm9tIiwiY2xzIiwid3BiY19iZmJfYXBpIiwid2l0aF9idWlsZGVyIiwiQnVpbGRlciIsImNhcHR1cmVfcmlnaHRfc2lkZWJhcl9hY3RpdmVfdGFiX3Jlc3RvcmVfaGFuZGxlIiwidGFibGlzdF9lbCIsImFjdGl2ZV90YWJfZWwiLCJjbGljayIsInJlc3RvcmUiLCJ0YWJfcmVzdG9yZV9oYW5kbGUiLCJyZXN0b3JlZCIsIkVWUyIsIldQQkNfQkZCX0NvcmUiLCJXUEJDX0JGQl9FdmVudHMiLCJFVl9ET05FIiwiU1RSVUNUVVJFX0xPQURFRCIsIkNBTlZBU19SRUZSRVNIRUQiLCJkb19yZXN0b3JlIiwiYnVzIiwib2ZmIiwiXyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9uIiwiZW5hYmxlZCIsInNldF9wcmV2aWV3X21vZGUiLCJyZWJ1aWxkIiwicmVpbml0Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fc3JjL3NldHRpbmdzX2VmZmVjdHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBsaWVzIGVmZmVjdHMgaW4gQ2FudmFzLCBhZnRlciBjaGFuZ2luZyBzb21lIHNldHRpbmdzIGluIHRoZSByaWdodCBzaWRlYmFyIGluIEJGQi5cbiAqXG4gKiBAZmlsZSAuLi9pbmNsdWRlcy9wYWdlLWZvcm0tYnVpbGRlci9mb3JtLXNldHRpbmdzL19zcmMvc2V0dGluZ3NfZWZmZWN0cy5qc1xuICovXG4oZnVuY3Rpb24gKHcsIGQpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGNvbnN0IEVmZmVjdHMgPSAody5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzID0gdy5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIHx8IHt9KTtcblx0Y29uc3QgbWFwICAgICA9IChFZmZlY3RzLm1hcCA9IEVmZmVjdHMubWFwIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKSk7XG5cblx0RWZmZWN0cy5yZWdpc3RlciA9IGZ1bmN0aW9uIChrZXksIGZuKSB7XG5cdFx0aWYgKCBrZXkgJiYgdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0bWFwW1N0cmluZygga2V5ICldID0gZm47XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldF9jYW52YXNfcm9vdCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ZC5xdWVyeVNlbGVjdG9yKCAnI3dwYmNfYmZiX19wYWdlc19jb250YWluZXInICkgfHxcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fcGFuZWwtLXByZXZpZXcnICkgfHxcblx0XHRcdGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fcHJldmlldycgKSB8fFxuXHRcdFx0ZC5ib2R5IHx8IGQuZG9jdW1lbnRFbGVtZW50XG5cdFx0KTtcblx0fVxuXG5cdEVmZmVjdHMuYXBwbHlfb25lID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGN0eCkge1xuXHRcdGNvbnN0IGZuID0gbWFwW1N0cmluZygga2V5ICldO1xuXHRcdGlmICggISBmbiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGZuKCB2YWx1ZSwgT2JqZWN0LmFzc2lnbiggeyBrZXksIHZhbHVlLCBjYW52YXM6IGdldF9jYW52YXNfcm9vdCgpIH0sIGN0eCB8fCB7fSApICk7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHQvLyBrZWVwIHNpbGVudCBpbiBwcm9kdWN0aW9uIGlmIHlvdSBwcmVmZXJcblx0XHRcdGNvbnNvbGUuZXJyb3IoICdXUEJDIEVmZmVjdHMgZXJyb3I6Jywga2V5LCBlICk7XG5cdFx0fVxuXHR9O1xuXG5cdEVmZmVjdHMuYXBwbHlfYWxsID0gZnVuY3Rpb24gKG9wdGlvbnMsIGN0eCkge1xuXHRcdGlmICggISBvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoIG9wdGlvbnMgKS5mb3JFYWNoKCBmdW5jdGlvbiAoaykge1xuXHRcdFx0RWZmZWN0cy5hcHBseV9vbmUoIGssIG9wdGlvbnNba10sIE9iamVjdC5hc3NpZ24oIHsgb3B0aW9uczogb3B0aW9ucyB9LCBjdHggfHwge30gKSApO1xuXHRcdH0gKTtcblx0fTtcblxuXHQvKipcblx0ICogTm9ybWFsaXplIHNldHRpbmdzIHBhY2sgdG8gdGhlIG1pbmltdW0gcmVxdWlyZWQgc2hhcGU6XG5cdCAqIHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gcGFja1xuXHQgKiBAcmV0dXJuIHt7b3B0aW9uczpPYmplY3QsIGNzc192YXJzOk9iamVjdCwgYmZiX29wdGlvbnM/Ok9iamVjdH18bnVsbH1cblx0ICovXG5cdEVmZmVjdHMubm9ybWFsaXplX3BhY2sgPSBmdW5jdGlvbiAocGFjaykge1xuXG5cdFx0aWYgKCBwYWNrID09PSBudWxsIHx8IHR5cGVvZiBwYWNrID09PSAndW5kZWZpbmVkJyB8fCBwYWNrID09PSAnJyApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIFBhcnNlIEpTT04gc3RyaW5nIGlmIG5lZWRlZC5cblx0XHRpZiAoIHR5cGVvZiBwYWNrID09PSAnc3RyaW5nJyApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBhY2sgPSBKU09OLnBhcnNlKCBwYWNrICk7XG5cdFx0XHR9IGNhdGNoICggX2UgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggISBwYWNrIHx8IHR5cGVvZiBwYWNrICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIElmIHVzZXIgcGFzc2VkIGp1c3Qge2tleTp2YWx1ZX0gb3B0aW9ucyBtYXAsIHdyYXAgaXQuXG5cdFx0Y29uc3QgaGFzX3NoYXBlID1cblx0XHRcdFx0ICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHBhY2ssICdvcHRpb25zJyApIHx8XG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnY3NzX3ZhcnMnICkgfHxcblx0XHRcdFx0ICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIHBhY2ssICdiZmJfb3B0aW9ucycgKTtcblxuXHRcdGlmICggISBoYXNfc2hhcGUgKSB7XG5cdFx0XHRwYWNrID0geyBvcHRpb25zOiBwYWNrLCBjc3NfdmFyczoge30gfTtcblx0XHR9XG5cblx0XHRpZiAoICEgcGFjay5vcHRpb25zIHx8IHR5cGVvZiBwYWNrLm9wdGlvbnMgIT09ICdvYmplY3QnICkge1xuXHRcdFx0cGFjay5vcHRpb25zID0ge307XG5cdFx0fVxuXHRcdGlmICggISBwYWNrLmNzc192YXJzIHx8IHR5cGVvZiBwYWNrLmNzc192YXJzICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHBhY2suY3NzX3ZhcnMgPSB7fTtcblx0XHR9XG5cblx0XHQvLyBiZmJfb3B0aW9ucyBpcyBvcHRpb25hbDsga2VlcCBpZiB2YWxpZC5cblx0XHRpZiAoIHBhY2suYmZiX29wdGlvbnMgJiYgdHlwZW9mIHBhY2suYmZiX29wdGlvbnMgIT09ICdvYmplY3QnICkge1xuXHRcdFx0ZGVsZXRlIHBhY2suYmZiX29wdGlvbnM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhY2s7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlLWFwcGx5IHNldHRpbmdzIGVmZmVjdHMgYWZ0ZXIgYSBjYW52YXMgcmVidWlsZCAvIHN0cnVjdHVyZSBsb2FkLlxuXHQgKlxuXHQgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHN0cnVjdHVyZSBsb2FkaW5nIGNhbiByZXBsYWNlIERPTSBub2RlcyB0aGF0IGVmZmVjdHMgdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHNldHRpbmdzX3BhY2sgIHN0cmluZ3xvYmplY3Qgc2V0dGluZ3NfanNvbiBwYWNrIChvciBwbGFpbiBvcHRpb25zIG1hcClcblx0ICogQHBhcmFtIHtPYmplY3R9IFtjdHhdXG5cdCAqL1xuXHRFZmZlY3RzLnJlYXBwbHlfYWZ0ZXJfY2FudmFzID0gZnVuY3Rpb24gKHNldHRpbmdzX3BhY2ssIGN0eCkge1xuXG5cdFx0Y29uc3QgcGFjayA9IEVmZmVjdHMubm9ybWFsaXplX3BhY2soIHNldHRpbmdzX3BhY2sgKTtcblx0XHRpZiAoICEgcGFjayApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBpbW1lZGlhdGVseSAoYmVzdCBlZmZvcnQpLlxuXHRcdEVmZmVjdHMuYXBwbHlfYWxsKCBwYWNrLm9wdGlvbnMsIE9iamVjdC5hc3NpZ24oIHsgc291cmNlOiAncmVhcHBseV9hZnRlcl9jYW52YXMnIH0sIGN0eCB8fCB7fSApICk7XG5cdFx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5KCBudWxsLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzJyB9LCBjdHggfHwge30gKSApO1xuXG5cdFx0Ly8gU29tZSBtb2R1bGVzL2h5ZHJhdGlvbiBtYXkgcnVuIHNob3J0bHkgYWZ0ZXI7IGRvIG9uZSBtb3JlIHBhc3MuXG5cdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xuXHRcdFx0RWZmZWN0cy5hcHBseV9hbGwoIHBhY2sub3B0aW9ucywgT2JqZWN0LmFzc2lnbiggeyBzb3VyY2U6ICdyZWFwcGx5X2FmdGVyX2NhbnZhc19kZWxheWVkJyB9LCBjdHggfHwge30gKSApO1xuXHRcdFx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5KCBudWxsLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzX2RlbGF5ZWQnIH0sIGN0eCB8fCB7fSApICk7XG5cdFx0fSwgNjAgKTtcblx0fTtcblxuXHQvLyAxKSBBcHBseSBmcm9tIEFKQVggbG9hZC5cblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6Zm9ybV9zZXR0aW5nczphcHBseScsIGZ1bmN0aW9uIChlKSB7XG5cdFx0Y29uc3QgcGFjayA9IGUgJiYgZS5kZXRhaWwgPyBlLmRldGFpbC5zZXR0aW5ncyA6IG51bGw7XG5cdFx0aWYgKCBwYWNrICYmIHBhY2sub3B0aW9ucyApIHtcblx0XHRcdEVmZmVjdHMuYXBwbHlfYWxsKCBwYWNrLm9wdGlvbnMsIHsgc291cmNlOiAnYXBwbHknIH0gKTtcblx0XHR9XG5cdFx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5KCBudWxsLCB7IHNvdXJjZTogJ2FwcGx5LWdsb2JhbC1zdHlsZScgfSApO1xuXHR9ICk7XG5cblx0Ly8gMikgQXBwbHkgbGl2ZSBmcm9tIFVJIGNoYW5nZSAoZGVsZWdhdGVkKS5cblx0ZnVuY3Rpb24gY3NzX2VzY2FwZSh2YWx1ZSkge1xuXHRcdGNvbnN0IHYgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICk7XG5cdFx0aWYgKCB3LkNTUyAmJiB0eXBlb2Ygdy5DU1MuZXNjYXBlID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0cmV0dXJuIHcuQ1NTLmVzY2FwZSggdiApO1xuXHRcdH1cblx0XHRyZXR1cm4gdi5yZXBsYWNlKCAvW15hLXpBLVowLTlfXFwtXS9nLCAnXFxcXCQmJyApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZmluZF9mc19yb290KGVsKSB7XG5cdFx0aWYgKCAhIGVsIHx8ICEgZWwuY2xvc2VzdCApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIDEpIERpcmVjdDogZWxlbWVudCBvciBhbmNlc3RvciBjYXJyaWVzIEZTIGtleSAoaW5wdXQvc2VsZWN0L3RleHRhcmVhIHdyaXRlciwgcmFkaW8gd3JhcHBlciwgZXRjLilcblx0XHRjb25zdCBkaXJlY3QgPSBlbC5jbG9zZXN0KCAnW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKTtcblx0XHRpZiAoIGRpcmVjdCApIHtcblx0XHRcdHJldHVybiBkaXJlY3Q7XG5cdFx0fVxuXG5cdFx0Ly8gMikgTGVuZ3RoOiBldmVudCBjYW1lIGZyb20gbnVtYmVyL3VuaXQvcmFuZ2UgaW5zaWRlIC53cGJjX3NsaWRlcl9sZW5fZ3JvdXBcblx0XHRjb25zdCBsZW5fZ3JvdXAgPSBlbC5jbG9zZXN0KCAnLndwYmNfc2xpZGVyX2xlbl9ncm91cCcgKTtcblx0XHRpZiAoIGxlbl9ncm91cCApIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGxlbl9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9sZW5fd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcblx0XHRcdFx0bGVuX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJsZW5ndGhcIl1bZGF0YS13cGJjLWJmYi1mcy1rZXldJyApIHx8XG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gMykgU3BhY2luZzogZXZlbnQgY2FtZSBmcm9tIHZlcnRpY2FsL2hvcml6b250YWwgbnVtYmVyIGluc2lkZSAud3BiY19zcGFjaW5nX2dyb3VwLlxuXHRcdGNvbnN0IHNwYWNpbmdfZ3JvdXAgPSBlbC5jbG9zZXN0KCAnLndwYmNfc3BhY2luZ19ncm91cCcgKTtcblx0XHRpZiAoIHNwYWNpbmdfZ3JvdXAgKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRzcGFjaW5nX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc3BhY2luZ193cml0ZXJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxuXHRcdFx0XHRzcGFjaW5nX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJzcGFjaW5nXCJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIDQpIFJhbmdlOiBldmVudCBjYW1lIGZyb20gcmFuZ2UgaW5wdXQgaW5zaWRlIC53cGJjX3NsaWRlcl9yYW5nZV9ncm91cFxuXHRcdGNvbnN0IHJhbmdlX2dyb3VwID0gZWwuY2xvc2VzdCggJy53cGJjX3NsaWRlcl9yYW5nZV9ncm91cCcgKTtcblx0XHRpZiAoIHJhbmdlX2dyb3VwICkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0cmFuZ2VfZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcblx0XHRcdFx0cmFuZ2VfZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXScgKSB8fFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QoZnNfcm9vdCwgb3JpZ2luYWxfdGFyZ2V0KSB7XG5cdFx0aWYgKCAhIGZzX3Jvb3QgKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZnNfdHlwZSA9IFN0cmluZyggZnNfcm9vdC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWZzLXR5cGUnICkgfHwgJycgKTtcblxuXHRcdC8vIFJBRElPOiByZWFkIGNoZWNrZWQgd2l0aGluIHdyYXBwZXIuXG5cdFx0aWYgKCBmc190eXBlID09PSAncmFkaW8nICkge1xuXHRcdFx0Y29uc3QgY29udHJvbF9pZCA9IGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnICkgfHwgJyc7XG5cdFx0XHRjb25zdCBzZWxlY3RvciAgID0gY29udHJvbF9pZFxuXHRcdFx0XHQ/ICdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIicgKyBjc3NfZXNjYXBlKCBjb250cm9sX2lkICkgKyAnXCJdOmNoZWNrZWQnXG5cdFx0XHRcdDogJ2lucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkJztcblxuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IGZzX3Jvb3QucXVlcnlTZWxlY3Rvciggc2VsZWN0b3IgKTtcblx0XHRcdHJldHVybiBjaGVja2VkID8gU3RyaW5nKCBjaGVja2VkLnZhbHVlIHx8ICcnICkgOiAnJztcblx0XHR9XG5cblx0XHRpZiAoIGZzX3R5cGUgPT09ICdzcGFjaW5nJyApIHtcblx0XHRcdGNvbnN0IGdyb3VwID0gKCBvcmlnaW5hbF90YXJnZXQgJiYgb3JpZ2luYWxfdGFyZ2V0LmNsb3Nlc3QgKSA/IG9yaWdpbmFsX3RhcmdldC5jbG9zZXN0KCAnLndwYmNfc3BhY2luZ19ncm91cCcgKSA6IGZzX3Jvb3QuY2xvc2VzdCggJy53cGJjX3NwYWNpbmdfZ3JvdXAnICk7XG5cdFx0XHRjb25zdCB2ZXJ0aWNhbF9pbnB1dCA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3ZlcnRpY2FsXScgKSA6IG51bGw7XG5cdFx0XHRjb25zdCBob3Jpem9udGFsX2lucHV0ID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfaG9yaXpvbnRhbF0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3Qgd3JpdGVyID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfd3JpdGVyXScgKSA6IG51bGw7XG5cdFx0XHRjb25zdCB2ZXJ0aWNhbCA9IHZlcnRpY2FsX2lucHV0ID8gU3RyaW5nKCB2ZXJ0aWNhbF9pbnB1dC52YWx1ZSB8fCAnMCcgKSA6ICcwJztcblx0XHRcdGNvbnN0IGhvcml6b250YWwgPSBob3Jpem9udGFsX2lucHV0ID8gU3RyaW5nKCBob3Jpem9udGFsX2lucHV0LnZhbHVlIHx8IHZlcnRpY2FsICkgOiB2ZXJ0aWNhbDtcblx0XHRcdGNvbnN0IGNvbWJpbmVkID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19ub3JtYWxpemVfc3BhY2luZ19udW1iZXJzKCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbCApO1xuXG5cdFx0XHRpZiAoIHdyaXRlciApIHtcblx0XHRcdFx0d3JpdGVyLnZhbHVlID0gY29tYmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb21iaW5lZDtcblx0XHR9XG5cblx0XHQvLyBDSEVDS0JPWCAvIFRPR0dMRVxuXHRcdGlmICggKG9yaWdpbmFsX3RhcmdldCAmJiBvcmlnaW5hbF90YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JykgfHwgZnNfcm9vdC50eXBlID09PSAnY2hlY2tib3gnICkge1xuXHRcdFx0Y29uc3QgY2IgPSAob3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSA/IG9yaWdpbmFsX3RhcmdldCA6IGZzX3Jvb3Q7XG5cdFx0XHRyZXR1cm4gY2IuY2hlY2tlZCA/ICdPbicgOiAnT2ZmJztcblx0XHR9XG5cblx0XHQvLyBERUZBVUxUOiB3cml0ZXIvaW5wdXQvdGV4dGFyZWEvc2VsZWN0XG5cdFx0aWYgKCBmc19yb290LnZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nKCBmc19yb290LnZhbHVlICk7XG5cdFx0fVxuXHRcdGlmICggb3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC52YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0cmV0dXJuIFN0cmluZyggb3JpZ2luYWxfdGFyZ2V0LnZhbHVlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwbHlfY2hhbmdlX2Zyb21fdGFyZ2V0KHRhcmdldCwgZXZlbnRfdHlwZSwgZXZlbnRfc291cmNlKSB7XG5cdFx0aWYgKCAhIHRhcmdldCApIHsgcmV0dXJuOyB9XG5cblx0XHRjb25zdCBmc19yb290ID0gZmluZF9mc19yb290KCB0YXJnZXQgKTtcblx0XHRpZiAoICEgZnNfcm9vdCApIHsgcmV0dXJuOyB9XG5cblxuXHRcdC8vIE5vcm1hbGl6ZSBldmVudHMgc28gZWFjaCBjb250cm9sIHByb2R1Y2VzIGV4YWN0bHkgb25lIGVmZmVjdCBjYWxsLlxuXHRcdC8vIC0gdG9nZ2xlL3NlbGVjdC9yYWRpby9jaGVja2JveCA9PiBcImNoYW5nZVwiIG9ubHkuXG5cdFx0Ly8gLSBldmVyeXRoaW5nIGVsc2UgICAgICAgICAgICAgID0+IFwiaW5wdXRcIiBvbmx5LlxuXHRcdGNvbnN0IGZzX3R5cGUgPSBTdHJpbmcoIGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy10eXBlJyApIHx8ICcnICk7XG5cdFx0Y29uc3QgdGFnICAgICA9IFN0cmluZyggdGFyZ2V0LnRhZ05hbWUgfHwgJycgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGNvbnN0IHR5cGUgICAgPSBTdHJpbmcoIHRhcmdldC50eXBlIHx8ICcnICkudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNvbnN0IHVzZV9jaGFuZ2UgPSAoZnNfdHlwZSA9PT0gJ3RvZ2dsZScpIHx8IChmc190eXBlID09PSAnc2VsZWN0JykgfHwgKGZzX3R5cGUgPT09ICdyYWRpbycpIHx8ICh0eXBlID09PSAnY2hlY2tib3gnKSB8fCAodHlwZSA9PT0gJ3JhZGlvJykgfHwgKHRhZyA9PT0gJ3NlbGVjdCcpO1xuXG5cdFx0aWYgKCB1c2VfY2hhbmdlICYmIGV2ZW50X3R5cGUgIT09ICdjaGFuZ2UnICkgeyByZXR1cm47IH1cblx0XHRpZiAoICEgdXNlX2NoYW5nZSAmJiBldmVudF90eXBlICE9PSAnaW5wdXQnICkgeyByZXR1cm47IH1cblx0XHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0XHRjb25zdCBrZXkgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMta2V5JyApO1xuXHRcdGlmICggISBrZXkgKSB7IHJldHVybjsgfVxuXG5cdFx0Y29uc3Qgc2NvcGUgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtc2NvcGUnICkgfHwgJyc7XG5cdFx0Y29uc3QgdmFsdWUgPSByZWFkX3ZhbHVlX2Zyb21fZnNfcm9vdCggZnNfcm9vdCwgdGFyZ2V0ICk7XG5cblx0XHRFZmZlY3RzLmFwcGx5X29uZSgga2V5LCB2YWx1ZSwgeyBzb3VyY2U6IGV2ZW50X3NvdXJjZSB8fCAndWknLCBzY29wZTogc2NvcGUsIGNvbnRyb2w6IHRhcmdldCwgZnNfcm9vdDogZnNfcm9vdCB9ICk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc19jb2xvcmlzX2NvbnRyb2wodGFyZ2V0KSB7XG5cdFx0aWYgKCAhIHRhcmdldCB8fCAhIHRhcmdldC5tYXRjaGVzICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0YXJnZXQubWF0Y2hlcyggJ1tkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJjb2xvclwiXSwgW2RhdGEtaW5zcGVjdG9yLXR5cGU9XCJjb2xvclwiXSwgLndwYmNfYmZiX2NvbG9yaXMnICk7XG5cdH1cblxuXHRmdW5jdGlvbiBvbl9jaGFuZ2UoZXYpIHtcblx0XHQvLyBJZ25vcmUgZ2VuZXJpYyBzeW50aGV0aWMgZXZlbnRzIGRpc3BhdGNoZWQgYnkgY29kZSAoYXBwbHkvcmVhcHBseSwgc2xpZGVyIHN5bmMsIGV0Yy4pLlxuXHRcdC8vIENvbG9yaXMgZGlzcGF0Y2hlcyBzeW50aGV0aWMgaW5wdXQgZXZlbnRzIHdoaWxlIHRoZSB1c2VyIHBpY2tzIGEgY29sb3IsIHNvIGFsbG93IHRob3NlIGNvbG9yIGNvbnRyb2xzIHRocm91Z2guXG5cdFx0aWYgKCBldiAmJiBldi5pc1RydXN0ZWQgPT09IGZhbHNlICYmICEgaXNfY29sb3Jpc19jb250cm9sKCBldi50YXJnZXQgKSApIHsgcmV0dXJuOyB9XG5cdFx0YXBwbHlfY2hhbmdlX2Zyb21fdGFyZ2V0KCBldiAmJiBldi50YXJnZXQsIGV2ICYmIGV2LnR5cGUsICggZXYgJiYgZXYuaXNUcnVzdGVkID09PSBmYWxzZSApID8gJ2NvbG9yaXMnIDogJ3VpJyApO1xuXHR9XG5cblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnaW5wdXQnLCBvbl9jaGFuZ2UsIGZhbHNlICk7XG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NoYW5nZScsIG9uX2NoYW5nZSwgZmFsc2UgKTtcblx0ZnVuY3Rpb24gb25fY29sb3Jpc19waWNrKGV2KSB7XG5cdFx0Y29uc3QgZGV0YWlsID0gZXYgJiYgZXYuZGV0YWlsID8gZXYuZGV0YWlsIDoge307XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZGV0YWlsLmN1cnJlbnRFbCB8fCBkZXRhaWwuZWwgfHwgZGV0YWlsLmlucHV0IHx8IGV2LnRhcmdldCB8fCBudWxsO1xuXG5cdFx0aWYgKCAhIGlzX2NvbG9yaXNfY29udHJvbCggdGFyZ2V0ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBkZXRhaWwuY29sb3IgJiYgdGFyZ2V0LnZhbHVlICE9PSBkZXRhaWwuY29sb3IgKSB7XG5cdFx0XHR0YXJnZXQudmFsdWUgPSBkZXRhaWwuY29sb3I7XG5cdFx0fVxuXG5cdFx0YXBwbHlfY2hhbmdlX2Zyb21fdGFyZ2V0KCB0YXJnZXQsICdpbnB1dCcsICdjb2xvcmlzJyApO1xuXHR9XG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2NvbG9yaXM6cGljaycsIG9uX2NvbG9yaXNfcGljaywgZmFsc2UgKTtcblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnd3BiYzpiZmI6Y29sb3JpczpjaGFuZ2UnLCBvbl9jb2xvcmlzX3BpY2ssIGZhbHNlICk7XG5cbn0pKCB3aW5kb3csIGRvY3VtZW50ICk7XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X3ByZXNldHMoKSB7XG5cdHJldHVybiB7XG5cdFx0Ym9yZGVyZWQ6IHtcblx0XHRcdGJhY2tncm91bmQgOiAnI2ZmZmZmZicsXG5cdFx0XHRib3JkZXJDb2xvcjogJyNjY2NjY2MnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICcxcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICcycHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcxMHB4IDMwcHgnLFxuXHRcdFx0c2hhZG93ICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCdcblx0XHR9LFxuXHRcdG5vbmUgICAgOiB7XG5cdFx0XHRiYWNrZ3JvdW5kIDogJ3RyYW5zcGFyZW50Jyxcblx0XHRcdGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICcwcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICcwcHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcwcHgnLFxuXHRcdFx0c2hhZG93ICAgICA6ICdub25lJ1xuXHRcdH0sXG5cdFx0c29mdCAgICA6IHtcblx0XHRcdGJhY2tncm91bmQgOiAnI2Y5ZjlmYScsXG5cdFx0XHRib3JkZXJDb2xvcjogJyNmZmYnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICczcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICc4cHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcyMHB4Jyxcblx0XHRcdHNoYWRvdyAgICAgOiAncmdiYSgxNSwgMjMsIDQyLCAwLjA2KSAwcHggNHB4IDE2cHggMHB4J1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19kYXJrX3RoZW1lKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnID8gb3B0aW9ucyA6IHt9O1xuXHRyZXR1cm4gJ3dwYmNfdGhlbWVfZGFya18xJyA9PT0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV90aGVtZSB8fCAnJyApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMoc3R5bGUsIG9wdGlvbnMpIHtcblx0Y29uc3QgcHJlc2V0cyA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X3ByZXNldHMoKTtcblxuXHRpZiAoICEgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19kYXJrX3RoZW1lKCBvcHRpb25zICkgKSB7XG5cdFx0cmV0dXJuIHByZXNldHNbc3R5bGVdIHx8IHByZXNldHMuYm9yZGVyZWQ7XG5cdH1cblxuXHRpZiAoICdzb2Z0JyA9PT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJhY2tncm91bmQgOiAnIzFmMjkzNycsXG5cdFx0XHRib3JkZXJDb2xvcjogJyMzMzQxNTUnLFxuXHRcdFx0Ym9yZGVyV2lkdGg6ICczcHgnLFxuXHRcdFx0cmFkaXVzICAgICA6ICc4cHgnLFxuXHRcdFx0cGFkZGluZyAgICA6ICcyMHB4Jyxcblx0XHRcdHNoYWRvdyAgICAgOiAncmdiYSgwLCAwLCAwLCAwLjI0KSAwcHggNHB4IDE2cHggMHB4J1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcHJlc2V0c1tzdHlsZV0gfHwgcHJlc2V0cy5ib3JkZXJlZDtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvcih2YWx1ZSwgZmFsbGJhY2spIHtcblx0Y29uc3QgdiA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCk7XG5cdGlmICggL14jKD86WzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pLnRlc3QoIHYgKSApIHtcblx0XHRyZXR1cm4gdjtcblx0fVxuXHRpZiAoIHYgPT09ICd0cmFuc3BhcmVudCcgKSB7XG5cdFx0cmV0dXJuIHY7XG5cdH1cblx0cmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX29wdGlvbmFsX2NvbG9yKHZhbHVlKSB7XG5cdHJldHVybiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCB2YWx1ZSwgJycgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIG9wYXF1ZSBhY2NlbnQgY29sb3Igd2l0aCB0aGUgUEhQLWxvY2FsaXplZCBpbnN0YWxsYXRpb24gZGVmYXVsdC5cbiAqXG4gKiBUaGUgRm9ybSBTdHlsZSBlZmZlY3RzIGxpdmUgb3V0c2lkZSB0aGUgcmVnaXN0cmF0aW9uIElJRkUsIHNvIHRoZSBkZWZhdWx0IGlzXG4gKiBkZWxpYmVyYXRlbHkgcmVhZCBmcm9tIHRoZSBzaGFyZWQgbG9jYWxpemVkIHBheWxvYWQgYXQgdGhlIHBvaW50IG9mIHVzZS5cbiAqIEludmFsaWQgcmVxdWVzdGVkIGFuZCBsb2NhbGl6ZWQgdmFsdWVzIHJldHVybiBhbiBlbXB0eSBzdHJpbmcsIGFsbG93aW5nIHRoZVxuICogY2FsbGVyIHRvIHNraXAgdGhlIGFjY2VudCBvdmVybGF5IHdpdGhvdXQgdGhyb3dpbmcgb3IgcHJvZHVjaW5nIGludmFsaWQgQ1NTLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVxdWVzdGVkIGFjY2VudCBjb2xvci5cbiAqIEByZXR1cm4ge3N0cmluZ30gVmFsaWQgdGhyZWUtIG9yIHNpeC1kaWdpdCBoZXhhZGVjaW1hbCBjb2xvciwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc2FuaXRpemVfYWNjZW50X2NvbG9yKHZhbHVlKSB7XG5cdGNvbnN0IHJlcXVlc3RlZF9jb2xvciA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCk7XG5cdGlmICggL14jKD86WzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pLnRlc3QoIHJlcXVlc3RlZF9jb2xvciApICkge1xuXHRcdHJldHVybiByZXF1ZXN0ZWRfY29sb3I7XG5cdH1cblxuXHRjb25zdCBzZXR0aW5nc192YXJzID0gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMgJiYgdHlwZW9mIHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzID09PSAnb2JqZWN0J1xuXHRcdD8gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnNcblx0XHQ6IHt9O1xuXHRjb25zdCBhY2NlbnRfZGVmYXVsdHMgPSBzZXR0aW5nc192YXJzLmZvcm1fYWNjZW50X2RlZmF1bHRzICYmIHR5cGVvZiBzZXR0aW5nc192YXJzLmZvcm1fYWNjZW50X2RlZmF1bHRzID09PSAnb2JqZWN0J1xuXHRcdD8gc2V0dGluZ3NfdmFycy5mb3JtX2FjY2VudF9kZWZhdWx0c1xuXHRcdDoge307XG5cdGNvbnN0IGRlZmF1bHRfY29sb3IgPSBTdHJpbmcoIGFjY2VudF9kZWZhdWx0cy5ib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIHx8ICcnICkudHJpbSgpO1xuXG5cdHJldHVybiAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fSkkL2kudGVzdCggZGVmYXVsdF9jb2xvciApID8gZGVmYXVsdF9jb2xvciA6ICcnO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCh2YWx1ZSwgZmFsbGJhY2spIHtcblx0Y29uc3QgdiA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCk7XG5cdGlmICggL15cXGQrKD86XFwuXFxkKyk/KD86cHh8cmVtfGVtfCUpJC9pLnRlc3QoIHYgKSApIHtcblx0XHRyZXR1cm4gdjtcblx0fVxuXHRyZXR1cm4gZmFsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfc3BhY2luZyh2YWx1ZSwgZmFsbGJhY2spIHtcblx0Y29uc3QgdiA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKS50cmltKCkucmVwbGFjZSggL1xccysvZywgJyAnICk7XG5cdGNvbnN0IHBhcnRzID0gdiA/IHYuc3BsaXQoICcgJyApIDogW107XG5cdGlmICggcGFydHMubGVuZ3RoIDwgMSB8fCBwYXJ0cy5sZW5ndGggPiA0ICkge1xuXHRcdHJldHVybiBmYWxsYmFjaztcblx0fVxuXHRmb3IgKCBsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKyApIHtcblx0XHRpZiAoICEgL15cXGQrKD86XFwuXFxkKyk/KD86cHh8cmVtfGVtfCUpJC9pLnRlc3QoIHBhcnRzW2ldICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKCAnICcgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19ub3JtYWxpemVfc3BhY2luZ19udW1iZXJzKHZlcnRpY2FsLCBob3Jpem9udGFsKSB7XG5cdGNvbnN0IHYgPSBTdHJpbmcoIHZlcnRpY2FsID09IG51bGwgPyAnJyA6IHZlcnRpY2FsICkudHJpbSgpO1xuXHRjb25zdCBoID0gU3RyaW5nKCBob3Jpem9udGFsID09IG51bGwgPyAnJyA6IGhvcml6b250YWwgKS50cmltKCk7XG5cdGNvbnN0IHZlcnRpY2FsX251bSA9IC9eXFxkKyg/OlxcLlxcZCspPyQvLnRlc3QoIHYgKSA/IHYgOiAnMCc7XG5cdGNvbnN0IGhvcml6b250YWxfbnVtID0gL15cXGQrKD86XFwuXFxkKyk/JC8udGVzdCggaCApID8gaCA6IHZlcnRpY2FsX251bTtcblxuXHRyZXR1cm4gdmVydGljYWxfbnVtICsgJ3B4ICcgKyBob3Jpem9udGFsX251bSArICdweCc7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fY29sbGVjdF9vcHRpb25zKGN0eCwga2V5LCB2YWx1ZSkge1xuXHRsZXQgb3B0aW9ucyA9IChjdHggJiYgY3R4Lm9wdGlvbnMgJiYgdHlwZW9mIGN0eC5vcHRpb25zID09PSAnb2JqZWN0JykgPyBPYmplY3QuYXNzaWduKCB7fSwgY3R4Lm9wdGlvbnMgKSA6IHt9O1xuXG5cdGlmICggd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyAmJiB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKCB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QoICdmb3JtJyApIHx8IHt9LCBvcHRpb25zICk7XG5cdH1cblxuXHRpZiAoIGtleSApIHtcblx0XHRvcHRpb25zW1N0cmluZygga2V5ICldID0gdmFsdWU7XG5cdH1cblxuXHRpZiAoIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX2NvbnRyb2xfa2V5KCBrZXkgKSApIHtcblx0XHRvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgPSAnY3VzdG9tJztcblx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9jb250YWluZXJfc3R5bGVfY29udHJvbCggJ2N1c3RvbScgKTtcblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9jdXN0b21fY29udHJvbF9rZXlzKCkge1xuXHRyZXR1cm4gW1xuXHRcdCdib29raW5nX2Zvcm1fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fYm9yZGVyX3dpZHRoJyxcblx0XHQnYm9va2luZ19mb3JtX2JvcmRlcl9yYWRpdXMnLFxuXHRcdCdib29raW5nX2Zvcm1fcGFkZGluZycsXG5cdFx0J2Jvb2tpbmdfZm9ybV90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2ZpZWxkX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fZmllbGRfdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9maWVsZF9ib3JkZXJfY29sb3InXG5cdF07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX2NvbnRyb2xfa2V5KGtleSkge1xuXHRyZXR1cm4gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VzdG9tX2NvbnRyb2xfa2V5cygpLmluZGV4T2YoIFN0cmluZygga2V5IHx8ICcnICkgKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X2NvbnRhaW5lcl9zdHlsZV9jb250cm9sKHZhbHVlKSB7XG5cdGNvbnN0IGNvbnRyb2wgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItZnMta2V5PVwiYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZVwiXScgKTtcblx0aWYgKCAhIGNvbnRyb2wgfHwgY29udHJvbC52YWx1ZSA9PT0gdmFsdWUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29udHJvbC52YWx1ZSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9yYWRpb19jb250cm9sKGtleSwgdmFsdWUpIHtcblx0Y29uc3Qgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9zZXR0aW5nW2RhdGEta2V5PVwiJyArIGtleSArICdcIl0nICk7XG5cdGlmICggISByb3cgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgd3JhcCA9IHJvdy5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdfcmFkaW9bZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWRdJyApO1xuXHRjb25zdCBjb250cm9sX2lkID0gd3JhcCA/IFN0cmluZyggd3JhcC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWZzLWNvbnRyb2xpZCcgKSB8fCAnJyApIDogJyc7XG5cdGNvbnN0IHJhZGlvcyA9IGNvbnRyb2xfaWRcblx0XHQ/IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY29udHJvbF9pZCArICdcIl0nIClcblx0XHQ6IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyApO1xuXG5cdHJhZGlvcy5mb3JFYWNoKCBmdW5jdGlvbiAocmFkaW8pIHtcblx0XHRjb25zdCBzaG91bGRfY2hlY2sgPSAoIFN0cmluZyggcmFkaW8udmFsdWUgKSA9PT0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApICk7XG5cdFx0cmFkaW8uY2hlY2tlZCA9IHNob3VsZF9jaGVjaztcblxuXHRcdGNvbnN0IGNob2ljZSA9IHJhZGlvLmNsb3Nlc3QgPyByYWRpby5jbG9zZXN0KCAnLndwYmNfdGhlbWVfY2hvaWNlJyApIDogbnVsbDtcblx0XHRpZiAoIGNob2ljZSApIHtcblx0XHRcdGNob2ljZS5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtc2VsZWN0ZWQnLCBzaG91bGRfY2hlY2sgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfc2VsZWN0X2NvbnRyb2woa2V5LCB2YWx1ZSkge1xuXHRjb25zdCBjb250cm9sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWZzLWtleT1cIicgKyBrZXkgKyAnXCJdJyApO1xuXHRpZiAoIGNvbnRyb2wgKSB7XG5cdFx0Y29udHJvbC52YWx1ZSA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9jdXJyZW50X29wdGlvbnMoKSB7XG5cdHJldHVybiB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzICYmIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QgPT09ICdmdW5jdGlvbidcblx0XHQ/IHdpbmRvdy5XUEJDX0JGQl9Gb3JtU2V0dGluZ3MuY29sbGVjdCggJ2Zvcm0nICkgfHwge31cblx0XHQ6IHt9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9zdHlsZV92YWx1ZV9mcm9tX29wdGlvbnMob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgPyBvcHRpb25zIDoge307XG5cblx0Y29uc3QgdGhlbWUgPSBTdHJpbmcoIG9wdGlvbnMuYm9va2luZ19mb3JtX3RoZW1lIHx8ICcnICk7XG5cdGNvbnN0IHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJ2luaGVyaXQnICk7XG5cblx0aWYgKCAnY3VzdG9tJyA9PT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuICdjdXN0b20nO1xuXHR9XG5cdGlmICggJ2luaGVyaXQnID09PSBzdHlsZSB8fCAnJyA9PT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuICdpbmhlcml0Jztcblx0fVxuXG5cdGNvbnN0IHByZWZpeCA9ICggJ3dwYmNfdGhlbWVfZGFya18xJyA9PT0gdGhlbWUgKSA/ICdkYXJrJyA6ICdsaWdodCc7XG5cdGlmICggWyAnYm9yZGVyZWQnLCAnbm9uZScsICdzb2Z0JyBdLmluZGV4T2YoIHN0eWxlICkgPT09IC0xICkge1xuXHRcdHJldHVybiBwcmVmaXggKyAnX2JvcmRlcmVkJztcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAnXycgKyBzdHlsZTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbChvcHRpb25zKSB7XG5cdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X3JhZGlvX2NvbnRyb2woICdib29raW5nX2Zvcm1fc3R5bGUnLCB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9zdHlsZV92YWx1ZV9mcm9tX29wdGlvbnMoIG9wdGlvbnMgKSApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZm9ybV9zdHlsZV9jaG9pY2UodmFsdWUpIHtcblx0Y29uc3QgY3VycmVudF9vcHRpb25zID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VycmVudF9vcHRpb25zKCk7XG5cdGNvbnN0IGN1cnJlbnRfdGhlbWUgPSBTdHJpbmcoIGN1cnJlbnRfb3B0aW9ucy5ib29raW5nX2Zvcm1fdGhlbWUgfHwgJycgKTtcblx0Y29uc3QgY2hvaWNlID0gU3RyaW5nKCB2YWx1ZSB8fCAnaW5oZXJpdCcgKTtcblxuXHRpZiAoICdjdXN0b20nID09PSBjaG9pY2UgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJvb2tpbmdfZm9ybV90aGVtZSAgICAgICAgICA6IGN1cnJlbnRfdGhlbWUsXG5cdFx0XHRib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlOiAnY3VzdG9tJ1xuXHRcdH07XG5cdH1cblx0aWYgKCAnaW5oZXJpdCcgPT09IGNob2ljZSB8fCAnJyA9PT0gY2hvaWNlICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRib29raW5nX2Zvcm1fdGhlbWUgICAgICAgICAgOiAnJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGU6ICdpbmhlcml0J1xuXHRcdH07XG5cdH1cblxuXHRjb25zdCBwYXJ0cyA9IGNob2ljZS5zcGxpdCggJ18nICk7XG5cdGNvbnN0IHRoZW1lID0gKCAnZGFyaycgPT09IHBhcnRzWzBdICkgPyAnd3BiY190aGVtZV9kYXJrXzEnIDogJyc7XG5cdGNvbnN0IHN0eWxlID0gcGFydHNbMV0gfHwgJ2JvcmRlcmVkJztcblxuXHRyZXR1cm4ge1xuXHRcdGJvb2tpbmdfZm9ybV90aGVtZSAgICAgICAgICA6IHRoZW1lLFxuXHRcdGJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGU6ICggWyAnYm9yZGVyZWQnLCAnbm9uZScsICdzb2Z0JyBdLmluZGV4T2YoIHN0eWxlICkgPT09IC0xICkgPyAnYm9yZGVyZWQnIDogc3R5bGVcblx0fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc191c2VyX3RoZW1lX3N3aXRjaChjdHgpIHtcblx0Y29uc3Qgc291cmNlID0gU3RyaW5nKCBjdHggJiYgY3R4LnNvdXJjZSA/IGN0eC5zb3VyY2UgOiAnJyApO1xuXHRyZXR1cm4gWyAndWknLCAnY29sb3JpcycgXS5pbmRleE9mKCBzb3VyY2UgKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX3N0eWxlKG9wdGlvbnMpIHtcblx0cmV0dXJuIFN0cmluZyggb3B0aW9ucyAmJiBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgPyBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgOiAnaW5oZXJpdCcgKSA9PT0gJ2N1c3RvbSc7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHMob3B0aW9ucykge1xuXHRjb25zdCBpc19jdXN0b20gPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9zdHlsZSggb3B0aW9ucyApO1xuXHRjb25zdCByZXNldF9yb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItY3VzdG9tLWFwcGVhcmFuY2UtcmVzZXQtcm93XScgKTtcblx0Y29uc3QgYmFzZV90aGVtZV9yb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdbZGF0YS1rZXk9XCJib29raW5nX2Zvcm1fdGhlbWVcIl0nICk7XG5cblx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VzdG9tX2NvbnRyb2xfa2V5cygpLmZvckVhY2goIGZ1bmN0aW9uIChrZXkpIHtcblx0XHRjb25zdCByb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdbZGF0YS1rZXk9XCInICsga2V5ICsgJ1wiXScgKTtcblx0XHRpZiAoICEgcm93ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fSApO1xuXG5cdGlmICggcmVzZXRfcm93ICkge1xuXHRcdHJlc2V0X3Jvdy5oaWRkZW4gPSAhIGlzX2N1c3RvbTtcblx0XHRyZXNldF9yb3cuc2V0QXR0cmlidXRlKCAnYXJpYS1oaWRkZW4nLCBpc19jdXN0b20gPyAnZmFsc2UnIDogJ3RydWUnICk7XG5cdFx0cmVzZXRfcm93LmNsYXNzTGlzdC50b2dnbGUoICdpcy1oaWRkZW4nLCAhIGlzX2N1c3RvbSApO1xuXHR9XG5cblx0aWYgKCBiYXNlX3RoZW1lX3JvdyApIHtcblx0XHRiYXNlX3RoZW1lX3Jvdy5oaWRkZW4gPSAhIGlzX2N1c3RvbTtcblx0XHRiYXNlX3RoZW1lX3Jvdy5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsIGlzX2N1c3RvbSA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHRiYXNlX3RoZW1lX3Jvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmUob3B0aW9ucykge1xuXHRsZXQgc3R5bGUgICAgID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJ2luaGVyaXQnICk7XG5cblx0aWYgKCBzdHlsZSA9PT0gJ2luaGVyaXQnICkge1xuXHRcdGNvbnN0IGdsb2JhbF9vcHRpb25zID0gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMgJiYgd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuZ2xvYmFsX2FwcGVhcmFuY2Vcblx0XHRcdD8gd2luZG93LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuZ2xvYmFsX2FwcGVhcmFuY2Vcblx0XHRcdDoge307XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oIHt9LCBnbG9iYWxfb3B0aW9ucyB8fCB7fSApO1xuXHRcdHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJ2JvcmRlcmVkJyApO1xuXHR9XG5cblx0aWYgKCBzdHlsZSA9PT0gJ2JvcmRlcmVkJyApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmICggc3R5bGUgIT09ICdjdXN0b20nICkge1xuXHRcdHJldHVybiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMoIHN0eWxlLCBvcHRpb25zICk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGJhY2tncm91bmQgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9iYWNrZ3JvdW5kX2NvbG9yLCAnI2ZmZmZmZicgKSxcblx0XHRib3JkZXJDb2xvcjogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yLCAnI2NjY2NjYycgKSxcblx0XHRib3JkZXJXaWR0aDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCwgJzFweCcgKSxcblx0XHRyYWRpdXMgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2JvcmRlcl9yYWRpdXMsICcycHgnICksXG5cdFx0cGFkZGluZyAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfc3BhY2luZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fcGFkZGluZywgJzEwcHggMzBweCcgKSxcblx0XHRzaGFkb3cgICAgIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSkgMHB4IDJweCA2cHggMHB4J1xuXHR9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZGVzaWduX2NvbG9ycyhvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fTtcblxuXHRpZiAoICEgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUoIG9wdGlvbnMgKSApIHtcblx0XHRpZiAoXG5cdFx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2RhcmtfdGhlbWUoIG9wdGlvbnMgKSAmJlxuXHRcdFx0J25vbmUnID09PSBTdHJpbmcoIG9wdGlvbnMuYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZSB8fCAnJyApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0ZXh0Q29sb3IgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRcdFx0ZmllbGRCYWNrZ3JvdW5kOiAnJyxcblx0XHRcdFx0ZmllbGRUZXh0ICAgICAgOiAnJyxcblx0XHRcdFx0ZmllbGRCb3JkZXIgICAgOiAnJ1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHRDb2xvciAgICAgIDogJycsXG5cdFx0XHRmaWVsZEJhY2tncm91bmQ6ICcnLFxuXHRcdFx0ZmllbGRUZXh0ICAgICAgOiAnJyxcblx0XHRcdGZpZWxkQm9yZGVyICAgIDogJydcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0ZXh0Q29sb3IgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX3RleHRfY29sb3IgKSxcblx0XHRmaWVsZEJhY2tncm91bmQ6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHRmaWVsZFRleHQgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2ZpZWxkX3RleHRfY29sb3IgKSxcblx0XHRmaWVsZEJvcmRlciAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2ZpZWxkX2JvcmRlcl9jb2xvciApXG5cdH07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fYXBwbHlfdmFycyh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IG9wdGlvbnMgPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2NvbGxlY3Rfb3B0aW9ucyggY3R4LCBjdHggJiYgY3R4LmtleSwgdmFsdWUgKTtcblx0Y29uc3QgcmVzb2x2ZWQgPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmUoIG9wdGlvbnMgKTtcblx0Y29uc3QgZGVzaWduID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlX2Rlc2lnbl9jb2xvcnMoIG9wdGlvbnMgKTtcblx0Y29uc3QgaXNfY3VzdG9tID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUoIG9wdGlvbnMgKTtcblx0Y29uc3Qgcm9vdCA9IGN0eCAmJiBjdHguY2FudmFzO1xuXG5cdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19mb3JtX3N0eWxlX2NvbnRyb2woIG9wdGlvbnMgKTtcblx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9scyggb3B0aW9ucyApO1xuXG5cdGlmICggISByb290IHx8ICEgcm9vdC5xdWVyeVNlbGVjdG9yQWxsICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHdyYXBzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19mb3JtX3ByZXZpZXdfc2VjdGlvbl9jb250YWluZXIsIC53cGJjX2JmYl9mb3JtJyApO1xuXHRpZiAoICEgd3JhcHMubGVuZ3RoICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHdyYXBzLmZvckVhY2goIGZ1bmN0aW9uICh3cmFwKSB7XG5cdFx0aWYgKCAhIHdyYXAgfHwgISB3cmFwLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR3cmFwLmNsYXNzTGlzdC50b2dnbGUoICd3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfY3VzdG9tJywgaXNfY3VzdG9tICk7XG5cdFx0aWYgKCAhIHJlc29sdmVkICkge1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1iYWNrZ3JvdW5kJyApO1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItY29sb3InICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLWJvcmRlci13aWR0aCcgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXJhZGl1cycgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tcGFkZGluZycgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm94LXNoYWRvdycgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1iYWNrZ3JvdW5kJywgcmVzb2x2ZWQuYmFja2dyb3VuZCApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItY29sb3InLCByZXNvbHZlZC5ib3JkZXJDb2xvciApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItd2lkdGgnLCByZXNvbHZlZC5ib3JkZXJXaWR0aCApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItcmFkaXVzJywgcmVzb2x2ZWQucmFkaXVzICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLXBhZGRpbmcnLCByZXNvbHZlZC5wYWRkaW5nICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLWJveC1zaGFkb3cnLCByZXNvbHZlZC5zaGFkb3cgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi50ZXh0Q29sb3IgKSB7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tbGFiZWwtY29sb3InLCBkZXNpZ24udGV4dENvbG9yICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tbGFiZWwtc3VibGFiZWwtY29sb3InLCBkZXNpZ24udGV4dENvbG9yICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1sYWJlbC1jb2xvcicgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1sYWJlbC1zdWJsYWJlbC1jb2xvcicgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi5maWVsZEJhY2tncm91bmQgKSB7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcicsIGRlc2lnbi5maWVsZEJhY2tncm91bmQgKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1tZW51LWNvbG9yJywgZGVzaWduLmZpZWxkQmFja2dyb3VuZCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYmFja2dyb3VuZC1jb2xvcicgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1tZW51LWNvbG9yJyApO1xuXHRcdH1cblxuXHRcdGlmICggZGVzaWduLmZpZWxkVGV4dCApIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC10ZXh0LWNvbG9yJywgZGVzaWduLmZpZWxkVGV4dCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtdGV4dC1jb2xvcicgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi5maWVsZEJvcmRlciApIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3InLCBkZXNpZ24uZmllbGRCb3JkZXIgKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3Itc3BhcmUnLCBkZXNpZ24uZmllbGRCb3JkZXIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiY19mb3JtLWZpZWxkLWJvcmRlci1jb2xvcicgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3Itc3BhcmUnICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfdmFycygpIHtcblx0cmV0dXJuIHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzIHx8IHt9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ByZXNldHMoKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0cmV0dXJuIHZhcnMuZm9ybV9zdHlsZV9wcmVzZXRzICYmIHR5cGVvZiB2YXJzLmZvcm1fc3R5bGVfcHJlc2V0cyA9PT0gJ29iamVjdCcgPyB2YXJzLmZvcm1fc3R5bGVfcHJlc2V0cyA6IHt9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2N1c3RvbV9rZXlzKCkge1xuXHRyZXR1cm4gW1xuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwnLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cydcblx0XTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMoKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0Y29uc3QgbG9jYWxpemVkID0gdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyAmJiB0eXBlb2YgdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyA9PT0gJ29iamVjdCdcblx0XHQ/IHZhcnMuY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHNcblx0XHQ6IHt9O1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKCB7XG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICAgICAgIDogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yICAgICAgICAgICA6ICcjY2NjY2NjJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCAgICAgICAgICAgOiAnMXB4Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMgICAgICAgICAgOiAnMnB4Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwgICAgICAgOiAnMTBweCcsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwgICAgIDogJzMwcHgnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciAgICAgICAgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgOiAnI2ZmZmZmZicsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICAgICAgIDogJyMzYzQzNGEnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICAgICA6ICcjY2NjY2NjJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yOiAnIzA2NmFhYicsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciAgICAgIDogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciAgICA6ICcjMDY2YWFiJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yOiAnIzA1NTU4OScsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcjogJyMwNTU1ODknLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yOiAnI2ZkZmRmZCcsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3I6ICcjNDQ0NDQ0Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yOiAnI2VlZWVlZScsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3I6ICcjZmRmZGZkJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyM0NDQ0NDQnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3I6ICcjNGQ5MWNkJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGggICAgICA6ICcxcHgnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9yYWRpdXMgICAgIDogJzNweCdcblx0fSwgbG9jYWxpemVkICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3VycmVudF9vcHRpb25zKGN0eCwga2V5LCB2YWx1ZSkge1xuXHRjb25zdCB2YXJzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF92YXJzKCk7XG5cdGxldCBvcHRpb25zID0gdmFycy5nbG9iYWxfZm9ybV9zdHlsZSAmJiB0eXBlb2YgdmFycy5nbG9iYWxfZm9ybV9zdHlsZSA9PT0gJ29iamVjdCdcblx0XHQ/IE9iamVjdC5hc3NpZ24oIHt9LCB2YXJzLmdsb2JhbF9mb3JtX3N0eWxlIClcblx0XHQ6IHt9O1xuXG5cdGlmICggd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyAmJiB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0ID09PSAnZnVuY3Rpb24nICkge1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKCBvcHRpb25zLCB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QoICdnbG9iYWwnICkgfHwge30gKTtcblx0fVxuXG5cdGlmICggY3R4ICYmIGN0eC5vcHRpb25zICYmIHR5cGVvZiBjdHgub3B0aW9ucyA9PT0gJ29iamVjdCcgKSB7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oIG9wdGlvbnMsIGN0eC5vcHRpb25zICk7XG5cdH1cblx0aWYgKCBrZXkgKSB7XG5cdFx0b3B0aW9uc1tTdHJpbmcoIGtleSApXSA9IHZhbHVlO1xuXHR9XG5cdGlmICggISBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSApIHtcblx0XHRvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSA9ICdsaWdodF9ib3JkZXJlZCc7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX21peF9jb2xvcnMoY29sb3IsIHRhcmdldCwgYW1vdW50KSB7XG5cdGxldCBzb3VyY2UgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc2FuaXRpemVfYWNjZW50X2NvbG9yKCBjb2xvciApLnJlcGxhY2UoICcjJywgJycgKTtcblx0Y29uc3QgZGVzdGluYXRpb24gPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCB0YXJnZXQsICcjMDAwMDAwJyApLnJlcGxhY2UoICcjJywgJycgKTtcblx0Y29uc3QgY2hhbm5lbHMgPSBbXTtcblx0aWYgKCAhIHNvdXJjZSApIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0aWYgKCBzb3VyY2UubGVuZ3RoID09PSAzICkge1xuXHRcdHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKCAvLi9nLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgdmFsdWU7IH0gKTtcblx0fVxuXHRmb3IgKCBsZXQgaW5kZXggPSAwOyBpbmRleCA8IDM7IGluZGV4KysgKSB7XG5cdFx0Y29uc3Qgc291cmNlX2NoYW5uZWwgPSBwYXJzZUludCggc291cmNlLnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICk7XG5cdFx0Y29uc3QgdGFyZ2V0X2NoYW5uZWwgPSBwYXJzZUludCggZGVzdGluYXRpb24uc3Vic3RyKCBpbmRleCAqIDIsIDIgKSwgMTYgKTtcblx0XHRjaGFubmVscy5wdXNoKCBNYXRoLnJvdW5kKCBzb3VyY2VfY2hhbm5lbCArICggKCB0YXJnZXRfY2hhbm5lbCAtIHNvdXJjZV9jaGFubmVsICkgKiBhbW91bnQgKSApICk7XG5cdH1cblx0cmV0dXJuICcjJyArIGNoYW5uZWxzLm1hcCggZnVuY3Rpb24gKGNoYW5uZWwpIHsgcmV0dXJuICggJzAnICsgY2hhbm5lbC50b1N0cmluZyggMTYgKSApLnNsaWNlKCAtMiApOyB9ICkuam9pbiggJycgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9sdW1pbmFuY2UoY29sb3IpIHtcblx0bGV0IGhleCA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19zYW5pdGl6ZV9hY2NlbnRfY29sb3IoIGNvbG9yICkucmVwbGFjZSggJyMnLCAnJyApO1xuXHRpZiAoICEgaGV4ICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGlmICggaGV4Lmxlbmd0aCA9PT0gMyApIHtcblx0XHRoZXggPSBoZXgucmVwbGFjZSggLy4vZywgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSArIHZhbHVlOyB9ICk7XG5cdH1cblx0Y29uc3QgY2hhbm5lbHMgPSBbIDAsIDEsIDIgXS5tYXAoIGZ1bmN0aW9uIChpbmRleCkge1xuXHRcdGNvbnN0IGNoYW5uZWwgPSBwYXJzZUludCggaGV4LnN1YnN0ciggaW5kZXggKiAyLCAyICksIDE2ICkgLyAyNTU7XG5cdFx0cmV0dXJuIGNoYW5uZWwgPD0gMC4wMzkyOCA/IGNoYW5uZWwgLyAxMi45MiA6IE1hdGgucG93KCAoIGNoYW5uZWwgKyAwLjA1NSApIC8gMS4wNTUsIDIuNCApO1xuXHR9ICk7XG5cdHJldHVybiAoIDAuMjEyNiAqIGNoYW5uZWxzWzBdICkgKyAoIDAuNzE1MiAqIGNoYW5uZWxzWzFdICkgKyAoIDAuMDcyMiAqIGNoYW5uZWxzWzJdICk7XG59XG5cbi8qKlxuICogQXBwbHkgc2hhcmVkIGFjY2VudCB2YXJpYWJsZXMgd2l0aG91dCBtYXNraW5nIGV4cGxpY2l0IEN1c3RvbSBidXR0b24gY29udHJvbHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9ICBjc3NfdmFycyAgICAgICAgICAgICAgICAgICAgICBSZXNvbHZlZCBiYXNlIHN0eWxlIHZhcmlhYmxlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBnbG9iYWwgc3R5bGUgb3B0aW9ucy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJlc2VydmVfY3VzdG9tX2J1dHRvbl9jb2xvcnMgV2hldGhlciBDdXN0b20gYnV0dG9uIHZhcmlhYmxlcyByZW1haW4gYXV0aG9yaXRhdGl2ZS5cbiAqIEByZXR1cm4ge09iamVjdH0gUmVzb2x2ZWQgdmFyaWFibGVzIHdpdGggdGhlIG9wdGlvbmFsIGFjY2VudCBvdmVybGF5LlxuICovXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHlfYWNjZW50KGNzc192YXJzLCBvcHRpb25zLCBwcmVzZXJ2ZV9jdXN0b21fYnV0dG9uX2NvbG9ycykge1xuXHRpZiAoIFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQgfHwgJ09mZicgKSAhPT0gJ09uJyApIHtcblx0XHRyZXR1cm4gY3NzX3ZhcnM7XG5cdH1cblx0Y29uc3QgYWNjZW50ID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3Nhbml0aXplX2FjY2VudF9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yICk7XG5cdGlmICggISBhY2NlbnQgKSB7XG5cdFx0cmV0dXJuIGNzc192YXJzO1xuXHR9XG5cdGNvbnN0IGx1bWluYW5jZSA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfbHVtaW5hbmNlKCBhY2NlbnQgKTtcblx0Y29uc3QgY29udHJhc3QgPSBsdW1pbmFuY2UgPiAwLjE4ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuXHRjb25zdCBob3Zlcl90YXJnZXQgPSAnI2ZmZmZmZicgPT09IGNvbnRyYXN0ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuXHRjb25zdCBob3ZlciA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19taXhfY29sb3JzKCBhY2NlbnQsIGhvdmVyX3RhcmdldCwgMC4xMCApO1xuXHRjb25zdCBob3Zlcl9jb250cmFzdCA9IGNvbnRyYXN0O1xuXG5cdGNvbnN0IGFjY2VudF9vdmVybGF5ID0ge1xuXHRcdCctLXdwYmNfZm9ybS1hY2NlbnQtY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWFjY2VudC1ob3Zlci1jb2xvcic6IGhvdmVyLFxuXHRcdCctLXdwYmNfZm9ybS1hY2NlbnQtY29udHJhc3QtY29sb3InOiBjb250cmFzdCxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtZm9jdXMtYm9yZGVyLWNvbG9yJzogYWNjZW50LFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1mb2N1cy1zaGFkb3ctY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1jaGVja2VkLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWNoZWNrZWQtY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1mb2N1cy1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJhY2tncm91bmQtY29sb3InOiBhY2NlbnQsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWFsdCc6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3InOiBjb250cmFzdCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3ItYWx0JzogY29udHJhc3QsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yJzogaG92ZXIsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29sb3InOiBob3Zlcixcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLXRleHQtY29sb3InOiBob3Zlcl9jb250cmFzdCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLWJvcmRlci1jb2xvcic6IGFjY2VudCxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXByaW1hcnktaG92ZXItYm9yZGVyLWNvbG9yJzogaG92ZXIsXG5cdFx0Jy0td3BiY19mb3JtLXBhZ2UtYnJlYWstY29sb3InOiBhY2NlbnRcblx0fTtcblxuXHRpZiAoIHByZXNlcnZlX2N1c3RvbV9idXR0b25fY29sb3JzICkge1xuXHRcdFtcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWx0Jyxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLWNvbG9yJyxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24tdGV4dC1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3ItYWx0Jyxcblx0XHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcicsXG5cdFx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWhvdmVyLXRleHQtY29sb3InLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1ib3JkZXItY29sb3InLFxuXHRcdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1wcmltYXJ5LWhvdmVyLWJvcmRlci1jb2xvcidcblx0XHRdLmZvckVhY2goIGZ1bmN0aW9uIChjc3NfdmFyX25hbWUpIHtcblx0XHRcdGRlbGV0ZSBhY2NlbnRfb3ZlcmxheVtjc3NfdmFyX25hbWVdO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKCB7fSwgY3NzX3ZhcnMsIGFjY2VudF9vdmVybGF5ICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19yZXNvbHZlX2Nzc192YXJzKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnID8gb3B0aW9ucyA6IHt9O1xuXHRjb25zdCBzdHlsZSA9IFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fc3R5bGUgfHwgJ2xpZ2h0X2JvcmRlcmVkJyApO1xuXHRjb25zdCBwcmVzZXRzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9wcmVzZXRzKCk7XG5cdGNvbnN0IHByZXNldCA9IHByZXNldHNbc3R5bGVdIHx8IHByZXNldHMubGlnaHRfYm9yZGVyZWQgfHwge307XG5cdGNvbnN0IGRlZmF1bHRzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMoKTtcblxuXHRpZiAoICdjdXN0b20nICE9PSBzdHlsZSApIHtcblx0XHRyZXR1cm4gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5X2FjY2VudCggcHJlc2V0LmNzc192YXJzICYmIHR5cGVvZiBwcmVzZXQuY3NzX3ZhcnMgPT09ICdvYmplY3QnID8gT2JqZWN0LmFzc2lnbigge30sIHByZXNldC5jc3NfdmFycyApIDoge30sIG9wdGlvbnMgKTtcblx0fVxuXG5cdGNvbnN0IGNzc192YXJzID0ge1xuXHRcdCctLXdwYmMtYmZiLWZvcm0tYmFja2dyb3VuZCcgICAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiYy1iZmItZm9ybS1ib3JkZXItY29sb3InICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiYy1iZmItZm9ybS1ib3JkZXItd2lkdGgnICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXJhZGl1cycgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cyApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tcGFkZGluZycgICAgICAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCApICsgJyAnICsgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsICksXG5cdFx0Jy0td3BiYy1iZmItZm9ybS1ib3gtc2hhZG93JyAgICAgICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCcsXG5cdFx0Jy0td3BiY19mb3JtLWxhYmVsLWNvbG9yJyAgICAgICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tbGFiZWwtc3VibGFiZWwtY29sb3InICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1sYWJlbC1lcnJvci1jb2xvcicgICAgICAgOiAnI2Q2MzYzNycsXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWJhY2tncm91bmQtY29sb3InICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtbWVudS1jb2xvcicgICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC10ZXh0LWNvbG9yJyAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWJvcmRlci1jb2xvcicgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWJvcmRlci1jb2xvci1zcGFyZSc6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWZvY3VzLWJvcmRlci1jb2xvcic6ICcjMDY2YWFiJyxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtZm9jdXMtc2hhZG93LWNvbG9yJzogJyMwNjZhYWInLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1kaXNhYmxlZC1jb2xvcicgICAgOiAncmdiYSgwLCAwLCAwLCAwLjIpJyxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1yYWRpdXMnICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cywgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cyApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLXN0eWxlJyAgICAgOiAnc29saWQnLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYm9yZGVyLXNpemUnICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfd2lkdGgsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvcicgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWx0Jzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ib3JkZXItY29sb3InICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3InICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi10ZXh0LWNvbG9yLWFsdCcgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYmFja2dyb3VuZC1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yJzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24taG92ZXItdGV4dC1jb2xvcicgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWNoZWNrZWQtYm9yZGVyLWNvbG9yJzogJyMwNjZhYWInLFxuXHRcdCctLXdwYmNfZm9ybS1jaG9pY2UtY2hlY2tlZC1jb2xvcicgICAgOiAnIzA2NmFhYicsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1mb2N1cy1jb2xvcicgICAgICA6ICcjMDY2YWFiJyxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWJhY2tncm91bmQtY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtYm9yZGVyLWNvbG9yJzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ib3JkZXItc2l6ZSc6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC10ZXh0LWNvbG9yJyA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ib3gtc2hhZG93JyA6ICcwIDJweCAxMHB4IDJweCAjZmZmZmZmNTQnLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItYmFja2dyb3VuZC1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1ib3JkZXItY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLXRleHQtY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItYm94LXNoYWRvdyc6ICcwIDJweCAxMHB4IDJweCAjZmZmZmZmNTQnLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tcHJpbWFyeS1ob3Zlci1ib3JkZXItY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLXBhZ2UtYnJlYWstY29sb3InICAgICAgICA6ICcjMDY2YWFiJ1xuXHR9O1xuXG5cdHJldHVybiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHlfYWNjZW50KCBjc3NfdmFycywgb3B0aW9ucywgdHJ1ZSApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2Nzc192YXJfa2V5cyhvcHRpb25zKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0Y29uc3QgbG9jYWxpemVkID0gQXJyYXkuaXNBcnJheSggdmFycy5mb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMgKSA/IHZhcnMuZm9ybV9zdHlsZV9jc3NfdmFyX25hbWVzIDogW107XG5cdGNvbnN0IGtleXMgPSBbXTtcblx0Y29uc3QgcHJlc2V0cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfcHJlc2V0cygpO1xuXG5cdGlmICggbG9jYWxpemVkLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gbG9jYWxpemVkO1xuXHR9XG5cblx0T2JqZWN0LmtleXMoIHByZXNldHMgKS5mb3JFYWNoKCBmdW5jdGlvbiAocHJlc2V0X2tleSkge1xuXHRcdGNvbnN0IHByZXNldCA9IHByZXNldHNbcHJlc2V0X2tleV0gfHwge307XG5cdFx0Y29uc3QgY3NzX3ZhcnMgPSBwcmVzZXQuY3NzX3ZhcnMgJiYgdHlwZW9mIHByZXNldC5jc3NfdmFycyA9PT0gJ29iamVjdCcgPyBwcmVzZXQuY3NzX3ZhcnMgOiB7fTtcblxuXHRcdE9iamVjdC5rZXlzKCBjc3NfdmFycyApLmZvckVhY2goIGZ1bmN0aW9uICh2YXJfbmFtZSkge1xuXHRcdFx0aWYgKCBrZXlzLmluZGV4T2YoIHZhcl9uYW1lICkgPT09IC0xICkge1xuXHRcdFx0XHRrZXlzLnB1c2goIHZhcl9uYW1lICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG5cblx0T2JqZWN0LmtleXMoIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19yZXNvbHZlX2Nzc192YXJzKCBPYmplY3QuYXNzaWduKCB7fSwgb3B0aW9ucyB8fCB7fSwgeyBib29raW5nX2Zvcm1fc3R5bGU6ICdjdXN0b20nIH0gKSApICkuZm9yRWFjaCggZnVuY3Rpb24gKHZhcl9uYW1lKSB7XG5cdFx0aWYgKCBrZXlzLmluZGV4T2YoIHZhcl9uYW1lICkgPT09IC0xICkge1xuXHRcdFx0a2V5cy5wdXNoKCB2YXJfbmFtZSApO1xuXHRcdH1cblx0fSApO1xuXG5cdHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fc3luY19jb250cm9scyhvcHRpb25zKSB7XG5cdGNvbnN0IGlzX2N1c3RvbSA9ICdjdXN0b20nID09PSBTdHJpbmcoIG9wdGlvbnMgJiYgb3B0aW9ucy5ib29raW5nX2Zvcm1fc3R5bGUgPyBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSA6ICcnICk7XG5cdGNvbnN0IGFjY2VudF9lbmFibGVkID0gJ09uJyA9PT0gU3RyaW5nKCBvcHRpb25zICYmIG9wdGlvbnMuYm9va2luZ19mb3JtX2FjY2VudF9lbmFibGVkID8gb3B0aW9ucy5ib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQgOiAnT2ZmJyApO1xuXHRjb25zdCByZXNldF9yb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnW2RhdGEtd3BiYy1iZmItY3VzdG9tLWFwcGVhcmFuY2UtcmVzZXQtcm93XScgKTtcblxuXHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9yYWRpb19jb250cm9sKCAnYm9va2luZ19mb3JtX3N0eWxlJywgb3B0aW9ucy5ib29raW5nX2Zvcm1fc3R5bGUgfHwgJ2xpZ2h0X2JvcmRlcmVkJyApO1xuXG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ19nbG9iYWxfY3VzdG9tX3N0eWxlJyApLmZvckVhY2goIGZ1bmN0aW9uIChyb3cpIHtcblx0XHRyb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fSApO1xuXG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ19nbG9iYWxfYWNjZW50X2RlcGVuZGVudCcgKS5mb3JFYWNoKCBmdW5jdGlvbiAocm93KSB7XG5cdFx0cm93LmhpZGRlbiA9ICEgYWNjZW50X2VuYWJsZWQ7XG5cdFx0cm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgYWNjZW50X2VuYWJsZWQgPyAnZmFsc2UnIDogJ3RydWUnICk7XG5cdFx0cm93LmNsYXNzTGlzdC50b2dnbGUoICdpcy1oaWRkZW4nLCAhIGFjY2VudF9lbmFibGVkICk7XG5cdH0gKTtcblxuXHRpZiAoIHJlc2V0X3JvdyApIHtcblx0XHRyZXNldF9yb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cmVzZXRfcm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJlc2V0X3Jvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHkodmFsdWUsIGN0eCkge1xuXHRjb25zdCBvcHRpb25zID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXJyZW50X29wdGlvbnMoIGN0eCwgY3R4ICYmIGN0eC5rZXksIHZhbHVlICk7XG5cdGNvbnN0IHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSB8fCAnbGlnaHRfYm9yZGVyZWQnICk7XG5cdGNvbnN0IHByZXNldHMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ByZXNldHMoKTtcblx0Y29uc3QgcHJlc2V0ID0gcHJlc2V0c1tzdHlsZV0gfHwgcHJlc2V0cy5saWdodF9ib3JkZXJlZCB8fCB7fTtcblx0Y29uc3QgY3NzX3ZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fcmVzb2x2ZV9jc3NfdmFycyggb3B0aW9ucyApO1xuXHQvLyBGb3JtIFN0eWxlIGlzIGdsb2JhbC4gQWx3YXlzIHN0YXJ0IGF0IHRoZSBjb21wbGV0ZSBCdWlsZGVyIHRoZW1lIHNjb3BlIHNvXG5cdC8vIGlubGluZSBDdXN0b20gdG9rZW5zIG9uIGFuIG91dGVyIHdyYXBwZXIgY2Fubm90IGxlYWsgaW50byBhIHByZXNldCB3aGVuIGFcblx0Ly8gZmllbGQtbGV2ZWwgdXBkYXRlIHByb3ZpZGVzIG9ubHkgdGhlIGlubmVyIGNhbnZhcyBpbiBjdHguY2FudmFzLlxuXHRjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjX2JmYl9fdGhlbWVfc2NvcGUnICkgfHwgKCBjdHggJiYgY3R4LmNhbnZhcyApIHx8IGRvY3VtZW50O1xuXHRjb25zdCB0aGVtZV9jbGFzc2VzID0gW107XG5cdGNvbnN0IGNzc192YXJfa2V5cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3NzX3Zhcl9rZXlzKCBvcHRpb25zICk7XG5cblx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3N5bmNfY29udHJvbHMoIG9wdGlvbnMgKTtcblxuXHRPYmplY3Qua2V5cyggcHJlc2V0cyApLmZvckVhY2goIGZ1bmN0aW9uIChwcmVzZXRfa2V5KSB7XG5cdFx0Y29uc3QgY2xhc3NfbmFtZSA9IHByZXNldHNbcHJlc2V0X2tleV0gJiYgcHJlc2V0c1twcmVzZXRfa2V5XS50aGVtZV9jbGFzcyA/IFN0cmluZyggcHJlc2V0c1twcmVzZXRfa2V5XS50aGVtZV9jbGFzcyApIDogJyc7XG5cdFx0aWYgKCBjbGFzc19uYW1lICYmIHRoZW1lX2NsYXNzZXMuaW5kZXhPZiggY2xhc3NfbmFtZSApID09PSAtMSApIHtcblx0XHRcdHRoZW1lX2NsYXNzZXMucHVzaCggY2xhc3NfbmFtZSApO1xuXHRcdH1cblx0fSApO1xuXG5cdGlmICggISByb290IHx8ICEgcm9vdC5xdWVyeVNlbGVjdG9yQWxsICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdG9yID0gJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtLCAud3BiY19iZmJfX3BhZ2VzX3BhbmVsLCAud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcic7XG5cdGNvbnN0IHdyYXBzID0gW107XG5cdGlmICggcm9vdC5tYXRjaGVzICYmIHJvb3QubWF0Y2hlcyggc2VsZWN0b3IgKSApIHtcblx0XHR3cmFwcy5wdXNoKCByb290ICk7XG5cdH1cblx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCBzZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uICh3cmFwKSB7XG5cdFx0d3JhcHMucHVzaCggd3JhcCApO1xuXHR9ICk7XG5cblx0d3JhcHMuZm9yRWFjaCggZnVuY3Rpb24gKHdyYXApIHtcblx0XHRpZiAoICEgd3JhcCB8fCAhIHdyYXAuc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoZW1lX2NsYXNzZXMuZm9yRWFjaCggZnVuY3Rpb24gKGNsYXNzX25hbWUpIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LnJlbW92ZSggY2xhc3NfbmFtZSApO1xuXHRcdH0gKTtcblx0XHRpZiAoIHByZXNldC50aGVtZV9jbGFzcyApIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCBwcmVzZXQudGhlbWVfY2xhc3MgKSApO1xuXHRcdH1cblx0XHR3cmFwLmNsYXNzTGlzdC50b2dnbGUoICd3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfY3VzdG9tJywgJ2N1c3RvbScgPT09IHN0eWxlICk7XG5cblx0XHRjc3NfdmFyX2tleXMuZm9yRWFjaCggZnVuY3Rpb24gKGNzc19rZXkpIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoIGNzc19rZXkgKTtcblx0XHR9ICk7XG5cdFx0T2JqZWN0LmtleXMoIGNzc192YXJzICkuZm9yRWFjaCggZnVuY3Rpb24gKGNzc19rZXkpIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoIGNzc19rZXksIGNzc192YXJzW2Nzc19rZXldICk7XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbltcblx0J2Jvb2tpbmdfZm9ybV9zdHlsZScsXG5cdCdib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQnLFxuXHQnYm9va2luZ19mb3JtX2FjY2VudF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgnLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfcmFkaXVzJ1xuXS5mb3JFYWNoKCBmdW5jdGlvbiAoa2V5KSB7XG5cdFdQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMucmVnaXN0ZXIoIGtleSwgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcblx0XHR3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHkoIHZhbHVlLCBPYmplY3QuYXNzaWduKCB7fSwgY3R4IHx8IHt9LCB7IGtleToga2V5IH0gKSApO1xuXHR9ICk7XG59ICk7XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHNfZnJvbV91aSgpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3VycmVudF9vcHRpb25zKCk7XG5cdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19zeW5jX2NvbnRyb2xzKCBvcHRpb25zICk7XG5cdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19hcHBseSggbnVsbCwgeyBzb3VyY2U6ICdzeW5jLWdsb2JhbC1zdHlsZScgfSApO1xufVxuXG53cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfY3VzdG9tX2NvbnRyb2xzX2Zyb21fdWkoKTtcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9sc19mcm9tX3VpICk7XG5cblxuLy8gQk9PS0lOR19GT1JNX1RIRU1FLlxuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cy5yZWdpc3RlciggJ2Jvb2tpbmdfZm9ybV90aGVtZScsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSAoY3R4ICYmIGN0eC5jYW52YXMpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3RoZW1lX3Njb3BlJyApIHx8IGRvY3VtZW50O1xuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfdXNlcl90aGVtZV9zd2l0Y2goIGN0eCApICkge1xuXHRcdGNvbnN0IGN1cnJlbnRfb3B0aW9ucyA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucygpO1xuXHRcdGlmICggJ2N1c3RvbScgPT09IFN0cmluZyggY3VycmVudF9vcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJycgKSApIHtcblx0XHRcdGN1cnJlbnRfb3B0aW9ucy5ib29raW5nX2Zvcm1fdGhlbWUgPSB2YWx1ZTtcblx0XHRcdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19mb3JtX3N0eWxlX2NvbnRyb2woIGN1cnJlbnRfb3B0aW9ucyApO1xuXHRcdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19hcHBseV92YXJzKCAnY3VzdG9tJywgT2JqZWN0LmFzc2lnbigge30sIGN0eCB8fCB7fSwge1xuXHRcdFx0XHRrZXkgICAgOiAnYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZScsXG5cdFx0XHRcdHNvdXJjZSA6ICd0aGVtZS1iYXNlLWN1c3RvbScsXG5cdFx0XHRcdG9wdGlvbnM6IGN1cnJlbnRfb3B0aW9uc1xuXHRcdFx0fSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X2NvbnRhaW5lcl9zdHlsZV9jb250cm9sKCAnYm9yZGVyZWQnICk7XG5cdFx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2FwcGx5X3ZhcnMoICdib3JkZXJlZCcsIE9iamVjdC5hc3NpZ24oIHt9LCBjdHggfHwge30sIHsga2V5OiAnYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZScgfSApICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBjdHggJiYgY3R4Lm9wdGlvbnMgKSB7XG5cdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbCggY3R4Lm9wdGlvbnMgKTtcblx0fVxuXG5cdGNvbnN0IHRoZW1lX3NlbGVjdG9yID0gJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtLCAud3BiY19iZmJfX3BhZ2VzX3BhbmVsJztcblx0Y29uc3Qgd3JhcHMgPSBbXTtcblx0aWYgKCByb290Lm1hdGNoZXMgJiYgcm9vdC5tYXRjaGVzKCB0aGVtZV9zZWxlY3RvciApICkge1xuXHRcdHdyYXBzLnB1c2goIHJvb3QgKTtcblx0fVxuXHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoZW1lX3NlbGVjdG9yICkuZm9yRWFjaCggZnVuY3Rpb24gKHdyYXApIHtcblx0XHR3cmFwcy5wdXNoKCB3cmFwICk7XG5cdH0gKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3cmFwcy5mb3JFYWNoKCBmdW5jdGlvbiAod3JhcCkge1xuXHRcdC8vIHJlbW92ZSBhbnkgcHJldmlvdXMgdGhlbWUgY2xhc3NlcyAoc2ltcGxlICsgZnV0dXJlLXByb29mKS5cblx0XHRBcnJheS5mcm9tKCB3cmFwLmNsYXNzTGlzdCApLmZvckVhY2goIGZ1bmN0aW9uIChjbHMpIHtcblx0XHRcdGlmICggL153cGJjX3RoZW1lXy8udGVzdCggY2xzICkgKSB7XG5cdFx0XHRcdHdyYXAuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCB2YWx1ZSApICk7XG5cdFx0fVxuXHR9ICk7XG59ICk7XG5cblxuLy8gQk9PS0lOR19GT1JNX0xBWU9VVF9XSURUSCDigJQgRm9ybSB3aWR0aDogYXBwbGllcyBjb21iaW5lZCBcIjEwMCVcIiAvIFwiNjAwcHhcIiAvIFwiNDByZW1cIiB0byB0aGUgYm9va2luZyBmb3JtIGNvbnRhaW5lcnMuXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19mb3JtX2xheW91dF93aWR0aCcsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSBjdHggJiYgY3R4LmNhbnZhcztcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgd3JhcHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApLnRyaW0oKTtcblxuXHQvLyBhbGxvdyBvbmx5IFwibnVtYmVyICsgdW5pdFwiLlxuXHRpZiAoIHYgJiYgISAvXlxcZCsoPzpcXC5cXGQrKT8oPzolfHB4fHJlbXxlbXx2d3x2aCkkLy50ZXN0KCB2ICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0d3JhcHMuZm9yRWFjaChcblx0XHRmdW5jdGlvbiAod3JhcCkge1xuXHRcdFx0aWYgKCAhIHdyYXAgfHwgISB3cmFwLnN0eWxlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggISB2ICkge1xuXHRcdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1ib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItYm9va2luZ19mb3JtX2xheW91dF93aWR0aCcsIHYgKTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gRGVidWcgUHJldmlldyBNb2RlLlxuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cy5yZWdpc3RlciggJ2Jvb2tpbmdfYmZiX3ByZXZpZXdfbW9kZScsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSBjdHguY2FudmFzO1xuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0nICk7XG5cdGlmICggISB3cmFwcy5sZW5ndGggKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gR2V0IGJ1aWxkZXIgYXN5bmMuXG5cdHdwYmNfYmZiX2FwaS53aXRoX2J1aWxkZXIoXG5cdFx0ZnVuY3Rpb24gKEJ1aWxkZXIpIHtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYXB0dXJlIGFjdGl2ZSByaWdodCBzaWRlYmFyIHRhYiBhbmQgcmV0dXJuIHJlc3RvcmUgaGFuZGxlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEByZXR1cm4ge3tyZXN0b3JlOmZ1bmN0aW9uKCk6dm9pZH18bnVsbH1cblx0XHRcdCAqL1xuXHRcdFx0ZnVuY3Rpb24gY2FwdHVyZV9yaWdodF9zaWRlYmFyX2FjdGl2ZV90YWJfcmVzdG9yZV9oYW5kbGUoKSB7XG5cblx0XHRcdFx0dmFyIHRhYmxpc3RfZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCAnLndwYmNfYmZiX19yaWdodGJhcl90YWJzW3JvbGU9XCJ0YWJsaXN0XCJdJyApO1xuXHRcdFx0XHRpZiAoICEgdGFibGlzdF9lbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhY3RpdmVfdGFiX2VsID0gdGFibGlzdF9lbC5xdWVyeVNlbGVjdG9yKCAnW3JvbGU9XCJ0YWJcIl1bYXJpYS1zZWxlY3RlZD1cInRydWVcIl0nICk7XG5cblx0XHRcdFx0aWYgKCAhIGFjdGl2ZV90YWJfZWwgKSB7XG5cdFx0XHRcdFx0YWN0aXZlX3RhYl9lbCA9IHRhYmxpc3RfZWwucXVlcnlTZWxlY3RvciggJ1tyb2xlPVwidGFiXCJdW2FyaWEtY29udHJvbHM9XCJ3cGJjX2JmYl9fcGFsZXR0ZV9hZGRfbmV3XCJdJyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAhIGFjdGl2ZV90YWJfZWwgfHwgdHlwZW9mIGFjdGl2ZV90YWJfZWwuY2xpY2sgIT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHRyeSB7IGFjdGl2ZV90YWJfZWwuY2xpY2soKTsgfSBjYXRjaCAoIF9lICkge31cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0YWJfcmVzdG9yZV9oYW5kbGUgPSBjYXB0dXJlX3JpZ2h0X3NpZGViYXJfYWN0aXZlX3RhYl9yZXN0b3JlX2hhbmRsZSgpO1xuXG5cdFx0XHRsZXQgcmVzdG9yZWQgID0gZmFsc2U7XG5cdFx0XHR2YXIgRVZTICAgICAgPSB3aW5kb3cuV1BCQ19CRkJfQ29yZSAmJiB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgPyB3aW5kb3cuV1BCQ19CRkJfQ29yZS5XUEJDX0JGQl9FdmVudHMgOiB7fTtcblx0XHRcdHZhciBFVl9ET05FICA9IEVWUy5TVFJVQ1RVUkVfTE9BREVEIHx8IEVWUy5DQU5WQVNfUkVGUkVTSEVEIHx8ICd3cGJjOmJmYjpzdHJ1Y3R1cmUtbG9hZGVkJztcblxuXG5cdFx0XHRmdW5jdGlvbiBkb19yZXN0b3JlKCkge1xuXHRcdFx0XHRpZiAoIHJlc3RvcmVkICkgeyByZXR1cm47IH1cblx0XHRcdFx0cmVzdG9yZWQgPSB0cnVlO1xuXHRcdFx0XHR0cnkgeyBCdWlsZGVyPy5idXM/Lm9mZj8uKCBFVl9ET05FLCBkb19yZXN0b3JlICk7IH0gY2F0Y2ggKCBfICkge31cblx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKCAhIHRhYl9yZXN0b3JlX2hhbmRsZSApIHsgcmV0dXJuOyB9XG5cdFx0XHRcdFx0dGFiX3Jlc3RvcmVfaGFuZGxlLnJlc3RvcmUoKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMaXN0ZW4gb25jZSAoYmVzdCksIHBsdXMgYSBmYWxsYmFjayBpbiBjYXNlIGV2ZW50IGlzbid0IGZpcmVkLlxuXHRcdFx0dHJ5IHsgQnVpbGRlcj8uYnVzPy5vbj8uKCBFVl9ET05FLCBkb19yZXN0b3JlICk7IH0gY2F0Y2ggKCBfICkge31cblxuXG5cdFx0XHR2YXIgZW5hYmxlZCA9ICgnT24nID09PSB2YWx1ZSk7XG5cdFx0XHRCdWlsZGVyLnNldF9wcmV2aWV3X21vZGUoIGVuYWJsZWQsIHsgcmVidWlsZDogdHJ1ZSwgcmVpbml0OiB0cnVlLCBzb3VyY2U6ICdzZXR0aW5ncy1lZmZlY3RzJyB9ICk7XG5cdFx0fVxuXHQpO1xuXG59ICk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWixNQUFNQyxPQUFPLEdBQUlGLENBQUMsQ0FBQ0cseUJBQXlCLEdBQUdILENBQUMsQ0FBQ0cseUJBQXlCLElBQUksQ0FBQyxDQUFFO0VBQ2pGLE1BQU1DLEdBQUcsR0FBUUYsT0FBTyxDQUFDRSxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0UsR0FBRyxJQUFJQyxNQUFNLENBQUNDLE1BQU0sQ0FBRSxJQUFLLENBQUU7RUFFcEVKLE9BQU8sQ0FBQ0ssUUFBUSxHQUFHLFVBQVVDLEdBQUcsRUFBRUMsRUFBRSxFQUFFO0lBQ3JDLElBQUtELEdBQUcsSUFBSSxPQUFPQyxFQUFFLEtBQUssVUFBVSxFQUFHO01BQ3RDTCxHQUFHLENBQUNNLE1BQU0sQ0FBRUYsR0FBSSxDQUFDLENBQUMsR0FBR0MsRUFBRTtJQUN4QjtFQUNELENBQUM7RUFFRCxTQUFTRSxlQUFlQSxDQUFBLEVBQUc7SUFDMUIsT0FDQ1YsQ0FBQyxDQUFDVyxhQUFhLENBQUUsNEJBQTZCLENBQUMsSUFDL0NYLENBQUMsQ0FBQ1csYUFBYSxDQUFFLDJCQUE0QixDQUFDLElBQzlDWCxDQUFDLENBQUNZLGNBQWMsQ0FBRSxtQkFBb0IsQ0FBQyxJQUN2Q1osQ0FBQyxDQUFDYSxJQUFJLElBQUliLENBQUMsQ0FBQ2MsZUFBZTtFQUU3QjtFQUVB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