PluginProbe
Booking Calendar / 11.5
Booking Calendar v11.5
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
booking / includes / page-settings-calendar / _out / settings_calendar_page.js

settings_calendar_page.js in Booking Calendar 11.5, at includes/page-settings-calendar/_out/settings_calendar_page.js

633 lines 128.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 /**
4 * Calendar settings page UI.
5 */
6 (function ($, w) {
7 'use strict';
8
9 var cfg = w.wpbc_settings_calendar_page || {};
10 var preview_ajax = null;
11 var preview_timer = 0;
12 var is_saving = false;
13 var notice_timer = 0;
14 var calendar_load_patch_timer = 0;
15 var last_preview_signature = '';
16 function trim_text(value) {
17 return String(value || '').trim();
18 }
19 function show_message(message, type, delay) {
20 if (typeof w.wpbc_admin_show_message === 'function') {
21 w.wpbc_admin_show_message(message, type || 'info', delay || 4000, false);
22 }
23 }
24 function pulse_element($element, duration) {
25 if (!$element || !$element.length) {
26 return;
27 }
28 $element.removeClass('wpbc_calendar_attention_pulse').each(function () {
29 void this.offsetWidth;
30 }).addClass('wpbc_calendar_attention_pulse');
31 setTimeout(function () {
32 $element.removeClass('wpbc_calendar_attention_pulse');
33 }, duration || 2100);
34 }
35 function pulse_latest_warning_notice() {
36 clearTimeout(notice_timer);
37 notice_timer = setTimeout(function () {
38 pulse_element($('#ajax_working .wpbc_inner_message.notice-warning').last());
39 }, 50);
40 }
41 function show_premium_notice($control) {
42 var is_range_info = $control && $control.is('[data-wpbc-calendar-premium-range-info="1"]');
43 var is_changeover_info = $control && $control.is('[data-wpbc-calendar-premium-changeover-info="1"]');
44 var message = cfg.i18n && cfg.i18n.premium_option_notice ? cfg.i18n.premium_option_notice : 'This option is available in Booking Calendar Business Small or higher.';
45 var $note;
46 if (is_range_info) {
47 message = cfg.i18n && cfg.i18n.premium_notice ? cfg.i18n.premium_notice : 'Advanced range rules are available in Booking Calendar Business Small or higher. Open the live demo to test the real behavior.';
48 } else if (is_changeover_info) {
49 message = cfg.i18n && cfg.i18n.premium_changeover_notice ? cfg.i18n.premium_changeover_notice : 'Changeover days are available in Booking Calendar Business Small or higher. Open the live demo to test the real behavior.';
50 }
51 pulse_element($control.closest('.wpbc_calendar_field_row, label, .wpbc_calendar_radio_stack'));
52 if (is_range_info) {
53 $note = $control.closest('.wpbc_ui__collapsible_group').find('[data-wpbc-calendar-range-upgrade-note="1"]').first();
54 $note.addClass('is-visible');
55 pulse_element($note);
56 } else if (is_changeover_info) {
57 $note = $control.closest('.wpbc_ui__collapsible_group').find('[data-wpbc-calendar-changeover-upgrade-note="1"]').first();
58 $note.addClass('is-visible');
59 pulse_element($note);
60 }
61 show_message(message, 'warning', 9000);
62 pulse_latest_warning_notice();
63 }
64 function is_range_supported() {
65 return cfg.is_range_supported === 1 || cfg.is_range_supported === '1' || cfg.is_range_supported === true;
66 }
67 function is_locked_changeover_control(field) {
68 return !is_range_supported() && $(field).is('[name="booking_range_selection_time_is_active"]');
69 }
70 function switch_panel($tab) {
71 var panel_id = $tab.attr('aria-controls');
72 var $tabs = $tab.closest('.wpbc_calendar_rightbar_tabs').find('[role="tab"]');
73 var $panels = $('.wpbc_calendar_rightbar_panels [role="tabpanel"]');
74 $tabs.attr('aria-selected', 'false');
75 $tab.attr('aria-selected', 'true');
76 $panels.attr('hidden', 'hidden').attr('aria-hidden', 'true');
77 $('#' + panel_id).removeAttr('hidden').attr('aria-hidden', 'false');
78 }
79 function toggle_group($button) {
80 var $group = $button.closest('.wpbc_ui__collapsible_group');
81 var $fields = $group.find('> .group__fields');
82 var is_open = $group.hasClass('is-open');
83 $group.toggleClass('is-open', !is_open);
84 $button.attr('aria-expanded', is_open ? 'false' : 'true');
85 $fields.prop('hidden', is_open).attr('aria-hidden', is_open ? 'true' : 'false');
86 }
87 function close_group($group) {
88 var $button = $group.find('> .group__header');
89 var $fields = $group.find('> .group__fields');
90 $group.removeClass('is-open');
91 $button.attr('aria-expanded', 'false');
92 $fields.prop('hidden', true).attr('aria-hidden', 'true');
93 }
94 function open_group(group_name, is_exclusive) {
95 var $group = $('.wpbc_calendar_rightbar_panels .wpbc_ui__collapsible_group[data-group="' + group_name + '"]');
96 var $button = $group.find('> .group__header');
97 var $fields = $group.find('> .group__fields');
98 if (!$group.length) {
99 return $();
100 }
101 if (is_exclusive) {
102 $group.siblings('.wpbc_ui__collapsible_group').each(function () {
103 close_group($(this));
104 });
105 }
106 $group.addClass('is-open');
107 $button.attr('aria-expanded', 'true');
108 $fields.prop('hidden', false).attr('aria-hidden', 'false');
109 return $group;
110 }
111 function scroll_to_group(group_name) {
112 var $group = $('.wpbc_calendar_rightbar_panels .wpbc_ui__collapsible_group[data-group="' + group_name + '"]');
113 var $scroll_parent = $();
114 var scroll_parent_el;
115 var group_el;
116 var scroll_top;
117 var parent_rect;
118 var group_rect;
119 if (!$group.length) {
120 return;
121 }
122 $group.parents().each(function () {
123 var $candidate = $(this);
124 var overflow_y = $candidate.css('overflow-y');
125 if ($candidate.hasClass('simplebar-content-wrapper') || /(auto|scroll)/.test(overflow_y) && this.scrollHeight > this.clientHeight) {
126 $scroll_parent = $candidate;
127 return false;
128 }
129 });
130 if (!$scroll_parent.length) {
131 $scroll_parent = $group.closest('.wpbc_ui_el__vert_right_bar__content').find('.simplebar-content-wrapper').first();
132 }
133 if (!$scroll_parent.length) {
134 $group.get(0).scrollIntoView({
135 block: 'nearest'
136 });
137 return;
138 }
139 scroll_parent_el = $scroll_parent.get(0);
140 group_el = $group.get(0);
141 parent_rect = scroll_parent_el.getBoundingClientRect();
142 group_rect = group_el.getBoundingClientRect();
143 scroll_top = $scroll_parent.scrollTop() + group_rect.top - parent_rect.top - 10;
144 $scroll_parent.stop().animate({
145 scrollTop: Math.max(0, scroll_top)
146 }, 180);
147 }
148 function apply_open_section_from_url() {
149 var section_groups = cfg.section_groups || {};
150 var group_name = section_groups[cfg.open_section] || '';
151 var $group;
152 if ('' === group_name) {
153 return;
154 }
155 $group = open_group(group_name, true);
156 $.each([120, 650], function (index, delay) {
157 setTimeout(function () {
158 scroll_to_group(group_name);
159 pulse_element($group);
160 }, delay);
161 });
162 }
163 function sync_left_navigation_active_section() {
164 var section_menus = cfg.section_menus || {};
165 var menu_slug = section_menus[cfg.open_section] || '';
166 var $menu_item;
167 if ('' === menu_slug) {
168 return;
169 }
170 $menu_item = $('.wpbc_ui_el__vert_nav_item__' + menu_slug);
171 if (!$menu_item.length) {
172 return;
173 }
174 $menu_item.closest('.wpbc_ui_el__level__folder').find('.wpbc_ui_el__vert_nav_item_sub').removeClass('active');
175 $menu_item.addClass('active');
176 }
177 function get_form() {
178 return $('[data-wpbc-calendar-settings-form="1"]').first();
179 }
180 function collect_payload() {
181 var $form = get_form();
182 var data = {};
183 var name;
184 var checkboxes = ['booking_calendar_allow_several_months_on_mobile', 'booking_recurrent_time', 'booking_last_checkout_day_available', 'booking_range_selection_time_is_active', 'booking_change_over_days_triangles', 'booking_change_over__is_excerpt_on_pages', 'booking_is_show_legend', 'booking_legend_is_show_numbers', 'booking_legend_is_vertical', 'booking_show_timeslots_in_tooltip', 'booking_is_show_availability_in_tooltips', 'booking_is_show_availability_in_date_cell', 'booking_is_show_cost_in_tooltips', 'booking_is_show_cost_in_date_cell', 'booking_is_show_booked_data_in_tooltips'];
185 $.each($form.serializeArray(), function (index, item) {
186 name = String(item.name || '').replace(/\[\]$/, '');
187 if (0 === name.indexOf('wpbc_setup')) {
188 return;
189 }
190 if (data[name]) {
191 if (!Array.isArray(data[name])) {
192 data[name] = [data[name]];
193 }
194 data[name].push(item.value);
195 } else {
196 data[name] = item.value;
197 }
198 });
199 $.each(checkboxes, function (index, name) {
200 data[name] = $form.find('[name="' + name + '"]').prop('checked') ? 'On' : 'Off';
201 });
202 $form.find('input[type="checkbox"][name]').each(function () {
203 var raw_name = String(this.name || '');
204 var is_array_name = /\[\]$/.test(raw_name);
205 name = raw_name.replace(/\[\]$/, '');
206 if (is_array_name) {
207 if ('undefined' === typeof data[name]) {
208 data[name] = [];
209 }
210 return;
211 }
212 if ($.inArray(name, checkboxes) !== -1) {
213 return;
214 }
215 data[name] = $(this).prop('checked') ? $(this).val() || 'On' : 'Off';
216 });
217 data.booking_disable_timeslots_in_tooltip = data.booking_show_timeslots_in_tooltip === 'On' ? 'Off' : 'On';
218 data.resource_id = $('#wpbc_calendar_resource_id').val() || '';
219 data.months_count = $('#wpbc_calendar_months_count').val() || '';
220 return data;
221 }
222 function get_resource_id() {
223 var $preview = $('[data-wpbc-calendar-preview="1"]').first();
224 return parseInt($preview.attr('data-resource-id') || $('#wpbc_calendar_resource_id').val() || 0, 10);
225 }
226 function get_months_count() {
227 return parseInt($('#wpbc_calendar_months_count').val() || 3, 10);
228 }
229 function parse_number_list(value) {
230 if (Array.isArray(value)) {
231 return $.map(value, function (item) {
232 var parsed = parseInt(item, 10);
233 return isNaN(parsed) ? null : parsed;
234 });
235 }
236 return $.map(String(value || '').split(/\s*,\s*/), function (item) {
237 var parsed = parseInt(item, 10);
238 return '' === item || isNaN(parsed) ? null : parsed;
239 });
240 }
241 function normalize_fixed_range_days_count(value) {
242 var days_count = parseInt(value, 10);
243 if (isNaN(days_count) || days_count < 1) {
244 return 3;
245 }
246 return Math.min(180, days_count);
247 }
248 function set_calendar_param(resource_id, key, value) {
249 if (w._wpbc && typeof w._wpbc.calendar__set_param_value === 'function') {
250 w._wpbc.calendar__set_param_value(resource_id, key, value);
251 }
252 }
253 function patch_calendar_data_loader() {
254 if (typeof w.wpbc_calendar__load_data__ajx !== 'function') {
255 clearTimeout(calendar_load_patch_timer);
256 calendar_load_patch_timer = setTimeout(patch_calendar_data_loader, 120);
257 return;
258 }
259 if (w.wpbc_calendar__load_data__ajx.wpbc_settings_calendar_preview_patched) {
260 return;
261 }
262 var original_loader = w.wpbc_calendar__load_data__ajx;
263 w.wpbc_calendar__load_data__ajx = function (params) {
264 var payload;
265 if ($('[data-wpbc-calendar-page="1"]').length && params && typeof params === 'object') {
266 payload = collect_payload();
267 params.wpbc_settings_calendar_preview = 1;
268 params.wpbc_settings_calendar_preview_changeover = payload.booking_range_selection_time_is_active === 'On' ? 'On' : 'Off';
269 params.wpbc_settings_calendar_preview_triangles = payload.booking_change_over_days_triangles === 'Off' ? 'Off' : 'On';
270 params.wpbc_settings_calendar_preview_recurrent_time = payload.booking_recurrent_time === 'On' ? 'On' : 'Off';
271 params.wpbc_settings_calendar_preview_last_checkout = payload.booking_last_checkout_day_available === 'On' ? 'On' : 'Off';
272 params.wpbc_settings_calendar_preview_excerpt_on_pages = payload.booking_change_over__is_excerpt_on_pages === 'On' ? 'On' : 'Off';
273 params.wpbc_settings_calendar_preview_excerpt_pages = payload.booking_change_over__excerpt_on_pages || '';
274 params.wpbc_settings_calendar_preview_excerpt_resources = payload.booking_change_over__excerpt_bk_resources || '';
275 params.wpbc_settings_calendar_preview_show_legend = payload.booking_is_show_legend === 'On' ? 'On' : 'Off';
276 params.wpbc_settings_calendar_preview_legend_show_numbers = payload.booking_legend_is_show_numbers === 'On' ? 'On' : 'Off';
277 params.wpbc_settings_calendar_preview_legend_vertical = payload.booking_legend_is_vertical === 'On' ? 'On' : 'Off';
278 $.each(['available', 'pending', 'approved', 'partially', 'unavailable'], function (index, legend_item) {
279 params['wpbc_settings_calendar_preview_legend_show_' + legend_item] = payload['booking_legend_is_show_item_' + legend_item] === 'On' ? 'On' : 'Off';
280 params['wpbc_settings_calendar_preview_legend_text_' + legend_item] = payload['booking_legend_text_for_item_' + legend_item] || '';
281 });
282 params.wpbc_settings_calendar_preview_disable_timeslots_tooltip = payload.booking_disable_timeslots_in_tooltip === 'On' ? 'On' : 'Off';
283 params.wpbc_settings_calendar_preview_timeslot_word = payload.booking_highlight_timeslot_word || '';
284 params.wpbc_settings_calendar_preview_show_availability_tooltip = payload.booking_is_show_availability_in_tooltips === 'On' ? 'On' : 'Off';
285 params.wpbc_settings_calendar_preview_availability_word = payload.booking_highlight_availability_word || '';
286 params.wpbc_settings_calendar_preview_show_availability_cell = payload.booking_is_show_availability_in_date_cell === 'On' ? 'On' : 'Off';
287 params.wpbc_settings_calendar_preview_availability_cell_word = payload.booking_highlight_availability_word_in_date_cell || '';
288 params.wpbc_settings_calendar_preview_show_cost_tooltip = payload.booking_is_show_cost_in_tooltips === 'On' ? 'On' : 'Off';
289 params.wpbc_settings_calendar_preview_cost_word = payload.booking_highlight_cost_word || '';
290 params.wpbc_settings_calendar_preview_show_cost_cell = payload.booking_is_show_cost_in_date_cell === 'On' ? 'On' : 'Off';
291 params.wpbc_settings_calendar_preview_cost_currency = payload.booking_cost_in_date_cell_currency || '';
292 params.wpbc_settings_calendar_preview_show_booked_details = payload.booking_is_show_booked_data_in_tooltips === 'On' ? 'On' : 'Off';
293 params.wpbc_settings_calendar_preview_booked_details = payload.booking_booked_data_in_tooltips || '';
294 }
295 return original_loader.apply(this, arguments);
296 };
297 w.wpbc_calendar__load_data__ajx.wpbc_settings_calendar_preview_patched = true;
298 }
299 function sync_changeover_preview_class(payload) {
300 var data = payload || collect_payload();
301 var is_enabled = data.booking_range_selection_time_is_active === 'On' && data.booking_change_over_days_triangles !== 'Off';
302 $('[data-wpbc-calendar-preview="1"], [data-wpbc-calendar-preview="1"] .wpbc_calendar_wraper').toggleClass('wpbc_change_over_triangle', is_enabled);
303 $('[data-wpbc-calendar-preview="1"] .wpbc_calendar_legend_table_width_height').parent('span').toggleClass('wpbc_change_over_triangle', is_enabled);
304 }
305 function sync_mobile_months_preview(resource_id, payload) {
306 var data = payload || collect_payload();
307 var allow_mobile_months = data.booking_calendar_allow_several_months_on_mobile === 'On';
308 var months_count = get_months_count() || 3;
309 if (!resource_id) {
310 return;
311 }
312 if (w._wpbc && typeof w._wpbc.set_other_param === 'function') {
313 w._wpbc.set_other_param('is_allow_several_months_on_mobile', allow_mobile_months);
314 }
315 if (allow_mobile_months && typeof w.wpbc_calendar__update_months_number === 'function') {
316 w.wpbc_calendar__update_months_number(resource_id, months_count);
317 return;
318 }
319 if (typeof w.wpbc_calendar__auto_update_months_number__on_resize === 'function') {
320 w.wpbc_calendar__auto_update_months_number__on_resize(resource_id);
321 } else if (typeof w.wpbc_calendar__update_months_number === 'function') {
322 w.wpbc_calendar__update_months_number(resource_id, $(w).width() <= 782 ? 1 : months_count);
323 }
324 }
325 function apply_standard_days_selection(resource_id, days_selection) {
326 var ds = days_selection || {};
327 var mode = String(ds.days_select_mode || 'multiple');
328 var fixed_week_days = parse_number_list(ds.fixed__week_days__start);
329 var dynamic_specific = parse_number_list(ds.dynamic__days_specific);
330 var dynamic_week_days = parse_number_list(ds.dynamic__week_days__start);
331 fixed_week_days = fixed_week_days.length ? fixed_week_days : [-1];
332 dynamic_week_days = dynamic_week_days.length ? dynamic_week_days : [-1];
333 if ('single' === mode && typeof w.wpbc_cal_days_select__single === 'function') {
334 w.wpbc_cal_days_select__single(resource_id);
335 return true;
336 }
337 if ('multiple' === mode && typeof w.wpbc_cal_days_select__multiple === 'function') {
338 w.wpbc_cal_days_select__multiple(resource_id);
339 return true;
340 }
341 if ('fixed' === mode && typeof w.wpbc_cal_days_select__fixed === 'function') {
342 w.wpbc_cal_days_select__fixed(resource_id, normalize_fixed_range_days_count(ds.fixed__days_num), fixed_week_days);
343 return true;
344 }
345 if ('dynamic' === mode && typeof w.wpbc_cal_days_select__range === 'function') {
346 w.wpbc_cal_days_select__range(resource_id, parseInt(ds.dynamic__days_min || 1, 10), parseInt(ds.dynamic__days_max || 1, 10), dynamic_specific, dynamic_week_days);
347 return true;
348 }
349 return false;
350 }
351 function apply_calendar_settings_to_calendar(days_selection, should_reinit) {
352 var resource_id = get_resource_id();
353 var ds = days_selection || {};
354 var payload = collect_payload();
355 var fixed_week_days;
356 var dynamic_specific;
357 var dynamic_week_days;
358 var $calendar;
359 if (!resource_id || !w._wpbc || typeof w._wpbc.calendar__set_param_value !== 'function') {
360 return;
361 }
362 fixed_week_days = parse_number_list(ds.fixed__week_days__start);
363 dynamic_specific = parse_number_list(ds.dynamic__days_specific);
364 dynamic_week_days = parse_number_list(ds.dynamic__week_days__start);
365 set_calendar_param(resource_id, 'booking_max_monthes_in_calendar', String(payload.booking_max_monthes_in_calendar || '1y'));
366 set_calendar_param(resource_id, 'booking_start_day_weeek', String(payload.booking_start_day_weeek || '0'));
367 set_calendar_param(resource_id, 'calendar_number_of_months', String(get_months_count() || 3));
368 set_calendar_param(resource_id, 'calendar_scroll_to', false);
369 set_calendar_param(resource_id, 'is_enabled_change_over', payload.booking_range_selection_time_is_active === 'On');
370 set_calendar_param(resource_id, 'days_select_mode', String(ds.days_select_mode || 'multiple'));
371 set_calendar_param(resource_id, 'fixed__days_num', normalize_fixed_range_days_count(ds.fixed__days_num));
372 set_calendar_param(resource_id, 'fixed__week_days__start', fixed_week_days.length ? fixed_week_days : [-1]);
373 set_calendar_param(resource_id, 'dynamic__days_min', parseInt(ds.dynamic__days_min || 1, 10));
374 set_calendar_param(resource_id, 'dynamic__days_max', parseInt(ds.dynamic__days_max || 1, 10));
375 set_calendar_param(resource_id, 'dynamic__days_specific', dynamic_specific);
376 set_calendar_param(resource_id, 'dynamic__week_days__start', dynamic_week_days.length ? dynamic_week_days : [-1]);
377 set_calendar_param(resource_id, 'booking_recurrent_time', get_form().find('[name="booking_recurrent_time"]').prop('checked') ? 'On' : 'Off');
378 if (w._wpbc && typeof w._wpbc.set_other_param === 'function') {
379 w._wpbc.set_other_param('is_enabled_change_over', payload.booking_range_selection_time_is_active === 'On');
380 w._wpbc.set_other_param('is_allow_several_months_on_mobile', payload.booking_calendar_allow_several_months_on_mobile === 'On');
381 }
382 sync_changeover_preview_class(payload);
383 sync_mobile_months_preview(resource_id, payload);
384 if (typeof w.wpbc__conditions__SAVE_INITIAL__days_selection_params__bm === 'function') {
385 w.wpbc__conditions__SAVE_INITIAL__days_selection_params__bm(resource_id);
386 }
387 $calendar = $('#calendar_booking' + resource_id);
388 if (should_reinit && $calendar.length && apply_standard_days_selection(resource_id, ds)) {
389 return;
390 }
391 if (should_reinit && $calendar.length && typeof w.wpbc_cal__re_init === 'function') {
392 w.wpbc_cal__re_init(resource_id);
393 }
394 }
395 function schedule_calendar_settings_apply(days_selection) {
396 $.each([0, 120, 420, 900, 1400], function (index, delay) {
397 setTimeout(function () {
398 apply_calendar_settings_to_calendar(days_selection || get_days_selection_from_form(), true);
399 }, delay);
400 });
401 }
402 function get_days_selection_from_form() {
403 var data = collect_payload();
404 var mode = data.booking_type_of_day_selections === 'range' ? is_range_supported() ? data.booking_range_selection_type : 'dynamic' : data.booking_type_of_day_selections;
405 var fixed_days = data.booking_range_start_day_mode === '-1' ? '-1' : data.booking_range_start_day_weekdays || '-1';
406 var dynamic_days = data.booking_range_start_day_dynamic_mode === '-1' ? '-1' : data.booking_range_start_day_dynamic_weekdays || '-1';
407 if (Array.isArray(fixed_days)) {
408 fixed_days = fixed_days.join(',');
409 }
410 if (Array.isArray(dynamic_days)) {
411 dynamic_days = dynamic_days.join(',');
412 }
413 return {
414 days_select_mode: mode || 'multiple',
415 fixed__days_num: normalize_fixed_range_days_count(data.booking_range_selection_days_count),
416 fixed__week_days__start: fixed_days || '-1',
417 dynamic__days_min: parseInt(data.booking_range_selection_days_count_dynamic || 1, 10),
418 dynamic__days_max: parseInt(data.booking_range_selection_days_max_count_dynamic || 1, 10),
419 dynamic__days_specific: data.booking_range_selection_days_specific_num_dynamic || '',
420 dynamic__week_days__start: dynamic_days || '-1'
421 };
422 }
423 function refresh_conditional_controls() {
424 var $form = get_form();
425 var day_mode = $form.find('[name="booking_type_of_day_selections"]:checked').val() || 'multiple';
426 var range_type = $form.find('[name="booking_range_selection_type"]:checked').val() || 'dynamic';
427 var fixed_start = $form.find('[name="booking_range_start_day_mode"]:checked').val() || '-1';
428 var dynamic_start = $form.find('[name="booking_range_start_day_dynamic_mode"]:checked').val() || '-1';
429 var is_changeover = $form.find('[name="booking_range_selection_time_is_active"]').prop('checked');
430 var is_legend = $form.find('[name="booking_is_show_legend"]').prop('checked');
431 var is_timeslot_tooltip = $form.find('[name="booking_show_timeslots_in_tooltip"]').prop('checked');
432 var is_availability_tooltip = $form.find('[name="booking_is_show_availability_in_tooltips"]').prop('checked');
433 var is_availability_cell = $form.find('[name="booking_is_show_availability_in_date_cell"]').prop('checked');
434 var is_cost_tooltip = $form.find('[name="booking_is_show_cost_in_tooltips"]').prop('checked');
435 var is_cost_cell = $form.find('[name="booking_is_show_cost_in_date_cell"]').prop('checked');
436 var is_booked_tooltip = $form.find('[name="booking_is_show_booked_data_in_tooltips"]').prop('checked');
437 $('[data-wpbc-calendar-range-settings="1"]').toggleClass('is-visible', day_mode === 'range');
438 $('[data-wpbc-calendar-range-upgrade-note="1"]').toggleClass('is-visible', day_mode === 'range' && !is_range_supported());
439 $('[data-wpbc-calendar-range-type]').removeClass('is-visible');
440 $('[data-wpbc-calendar-range-type="' + range_type + '"]').addClass('is-visible');
441 $('[data-wpbc-calendar-weekday-checks="booking_range_start_day_weekdays"]').toggleClass('is-visible', fixed_start !== '-1');
442 $('[data-wpbc-calendar-weekday-checks="booking_range_start_day_dynamic_weekdays"]').toggleClass('is-visible', dynamic_start !== '-1');
443 $('[data-wpbc-calendar-changeover-settings="1"]').toggleClass('is-visible', !!is_changeover);
444 $('[data-wpbc-calendar-legend-settings="1"]').toggleClass('is-visible', !!is_legend);
445 $('[data-wpbc-calendar-timeslot-tooltip-settings="1"]').toggleClass('is-visible', !!is_timeslot_tooltip);
446 $('[data-wpbc-calendar-availability-tooltip-settings="1"]').toggleClass('is-visible', !!is_availability_tooltip);
447 $('[data-wpbc-calendar-availability-cell-settings="1"]').toggleClass('is-visible', !!is_availability_cell);
448 $('[data-wpbc-calendar-cost-tooltip-settings="1"]').toggleClass('is-visible', !!is_cost_tooltip);
449 $('[data-wpbc-calendar-cost-cell-settings="1"]').toggleClass('is-visible', !!is_cost_cell);
450 $('[data-wpbc-calendar-booked-tooltip-settings="1"]').toggleClass('is-visible', !!is_booked_tooltip);
451 if (is_changeover) {
452 $form.find('[name="booking_recurrent_time"], [name="booking_last_checkout_day_available"]').prop('checked', false);
453 }
454 if ($form.find('[name="booking_recurrent_time"]').prop('checked')) {
455 $form.find('[name="booking_range_selection_time_is_active"]').prop('checked', false);
456 $('[data-wpbc-calendar-changeover-settings="1"]').removeClass('is-visible');
457 }
458 }
459 function set_calendar_loading(is_loading) {
460 var $panel = $('[data-wpbc-calendar-panel="1"]');
461 $panel.toggleClass('is-loading', !!is_loading);
462 $panel.find('.wpbc_calendar_settings_loading').remove();
463 if (is_loading) {
464 $panel.append('<div class="wpbc_calendar_loading wpbc_calendar_settings_loading">' + '<span class="wpbc_icn_autorenew wpbc_animation_spin"></span>&nbsp;' + trim_text(cfg.i18n && cfg.i18n.loading ? cfg.i18n.loading : 'Loading') + '</div>');
465 }
466 }
467 function refresh_preview() {
468 var data = collect_payload();
469 var signature;
470 if (is_saving) {
471 return;
472 }
473 data.action = cfg.preview_action;
474 data.nonce = cfg.nonce;
475 signature = JSON.stringify(data);
476 if (signature === last_preview_signature) {
477 return;
478 }
479 if (preview_ajax && preview_ajax.readyState !== 4) {
480 preview_ajax.abort();
481 }
482 last_preview_signature = signature;
483 set_calendar_loading(true);
484 preview_ajax = $.post(cfg.ajax_url, data).done(function (response) {
485 if (response && response.success && response.data && response.data.html) {
486 $('[data-wpbc-calendar-preview="1"]').replaceWith(response.data.html);
487 cfg.days_selection = response.data.days_selection || get_days_selection_from_form();
488 schedule_calendar_settings_apply(cfg.days_selection);
489 return;
490 }
491 show_message(response && response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.preview_failed ? cfg.i18n.preview_failed : 'Unable to refresh calendar preview.', 'error', 10000);
492 }).fail(function (xhr, text_status) {
493 if ('abort' === text_status) {
494 return;
495 }
496 last_preview_signature = '';
497 show_message(cfg.i18n && cfg.i18n.preview_failed ? cfg.i18n.preview_failed : 'Unable to refresh calendar preview.', 'error', 10000);
498 }).always(function () {
499 set_calendar_loading(false);
500 });
501 }
502 function schedule_preview_refresh(delay) {
503 clearTimeout(preview_timer);
504 if (is_saving) {
505 return;
506 }
507 preview_timer = setTimeout(refresh_preview, typeof delay === 'number' ? delay : 180);
508 }
509 function is_text_typing_field(field) {
510 var tag_name = String(field && field.tagName ? field.tagName : '').toLowerCase();
511 var input_type = String(field && field.type ? field.type : '').toLowerCase();
512 return 'textarea' === tag_name || 'input' === tag_name && -1 !== $.inArray(input_type, ['text', 'number', 'search', 'email', 'url', 'tel']);
513 }
514 function is_full_preview_only_field(field_name) {
515 field_name = String(field_name || '').replace(/\[\]$/, '');
516 return 'booking_is_show_legend' === field_name || 0 === field_name.indexOf('booking_legend_') || 'booking_show_timeslots_in_tooltip' === field_name || 'booking_disable_timeslots_in_tooltip' === field_name || 0 === field_name.indexOf('booking_highlight_') || 'booking_is_show_availability_in_tooltips' === field_name || 'booking_is_show_availability_in_date_cell' === field_name || 'booking_is_show_cost_in_tooltips' === field_name || 'booking_is_show_cost_in_date_cell' === field_name || 'booking_cost_in_date_cell_currency' === field_name || 'booking_is_show_booked_data_in_tooltips' === field_name || 'booking_booked_data_in_tooltips' === field_name;
517 }
518 function apply_calendar_settings_safely(days_selection) {
519 try {
520 apply_calendar_settings_to_calendar(days_selection, true);
521 } catch (error) {
522 if (w.console && typeof w.console.warn === 'function') {
523 w.console.warn('[WPBC] Calendar Settings preview apply failed; full preview refresh will continue.', error);
524 }
525 }
526 }
527 function save_settings() {
528 var $button = $('[data-wpbc-calendar-save="1"]');
529 var original_text = $button.data('wpbc-original-text');
530 var data = collect_payload();
531 if (!original_text) {
532 original_text = $button.html();
533 $button.data('wpbc-original-text', original_text);
534 }
535 data.action = cfg.action;
536 data.nonce = cfg.nonce;
537 is_saving = true;
538 clearTimeout(preview_timer);
539 if (preview_ajax && preview_ajax.readyState !== 4) {
540 preview_ajax.abort();
541 }
542 preview_ajax = null;
543 last_preview_signature = '';
544 set_calendar_loading(false);
545 $button.addClass('disabled').attr('aria-disabled', 'true');
546 $button.find('.in-button-text').html('&nbsp;&nbsp;' + trim_text(cfg.i18n && cfg.i18n.saving ? cfg.i18n.saving : 'Saving') + '...');
547 $.post(cfg.ajax_url, data).done(function (response) {
548 if (response && response.success) {
549 show_message(response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.saved ? cfg.i18n.saved : 'Saved', 'success', 3000);
550 cfg.settings = response.data && response.data.settings ? response.data.settings : cfg.settings;
551 cfg.days_selection = response.data && response.data.days_selection ? response.data.days_selection : get_days_selection_from_form();
552 schedule_calendar_settings_apply(cfg.days_selection);
553 $(document).trigger('wpbc:setup-wizard:step-saved', ['date_selection']);
554 return;
555 }
556 show_message(response && response.data && response.data.message ? response.data.message : cfg.i18n && cfg.i18n.save_failed ? cfg.i18n.save_failed : 'Unable to save calendar settings.', 'error', 10000);
557 }).fail(function (xhr, text_status) {
558 var message;
559 if ('abort' === text_status) {
560 return;
561 }
562 message = xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message ? xhr.responseJSON.data.message : cfg.i18n && cfg.i18n.save_failed ? cfg.i18n.save_failed : 'Unable to save calendar settings.';
563 show_message(message, 'error', 10000);
564 }).always(function () {
565 is_saving = false;
566 $button.removeClass('disabled').removeAttr('aria-disabled').html(original_text);
567 });
568 }
569 function bind_events() {
570 $(document).on('click', '.wpbc_calendar_rightbar_tabs [role="tab"]', function (event) {
571 event.preventDefault();
572 switch_panel($(this));
573 });
574 $(document).on('click', '.wpbc_calendar_premium_dismiss a', function (event) {
575 event.stopPropagation();
576 });
577 $(document).on('click', '.wpbc_calendar_rightbar_panels .wpbc_ui__collapsible_group > .group__header', function (event) {
578 event.preventDefault();
579 toggle_group($(this));
580 });
581 $(document).on('click', '[data-wpbc-calendar-save="1"]', function (event) {
582 event.preventDefault();
583 if (!$(this).hasClass('disabled')) {
584 save_settings();
585 }
586 });
587 $(document).on('click', '[data-wpbc-calendar-premium-range-info="1"], [data-wpbc-calendar-premium-changeover-info="1"]', function (event) {
588 event.preventDefault();
589 event.stopImmediatePropagation();
590 if ($(this).is('[data-wpbc-calendar-premium-changeover-info="1"]')) {
591 $(this).prop('checked', false);
592 }
593 refresh_conditional_controls();
594 show_premium_notice($(this));
595 });
596 $(document).on('change input', '[data-wpbc-calendar-settings-form="1"] input, [data-wpbc-calendar-settings-form="1"] select, [data-wpbc-calendar-settings-form="1"] textarea', function (event) {
597 var field_name = this.name || '';
598 var preview_delay = 'input' === event.type && is_text_typing_field(this) ? 850 : 180;
599 if (is_locked_changeover_control(this)) {
600 $(this).prop('checked', false);
601 refresh_conditional_controls();
602 show_premium_notice($(this));
603 return;
604 }
605 refresh_conditional_controls();
606 schedule_preview_refresh(preview_delay);
607 if (is_full_preview_only_field(field_name)) {
608 return;
609 }
610 apply_calendar_settings_safely(get_days_selection_from_form());
611 });
612 $(document).on('change', '[data-wpbc-calendar-premium="1"]', function () {
613 show_premium_notice($(this));
614 });
615 $(document).on('change', '#wpbc_calendar_resource_id, #wpbc_calendar_months_count', function () {
616 schedule_preview_refresh();
617 });
618 }
619 patch_calendar_data_loader();
620 $(function () {
621 if (!$('[data-wpbc-calendar-page="1"]').length) {
622 return;
623 }
624 bind_events();
625 patch_calendar_data_loader();
626 refresh_conditional_controls();
627 sync_left_navigation_active_section();
628 apply_open_section_from_url();
629 schedule_calendar_settings_apply(cfg.days_selection || get_days_selection_from_form());
630 });
631 })(jQuery, window);
632 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1zZXR0aW5ncy1jYWxlbmRhci9fb3V0L3NldHRpbmdzX2NhbGVuZGFyX3BhZ2UuanMiLCJuYW1lcyI6WyIkIiwidyIsImNmZyIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcGFnZSIsInByZXZpZXdfYWpheCIsInByZXZpZXdfdGltZXIiLCJpc19zYXZpbmciLCJub3RpY2VfdGltZXIiLCJjYWxlbmRhcl9sb2FkX3BhdGNoX3RpbWVyIiwibGFzdF9wcmV2aWV3X3NpZ25hdHVyZSIsInRyaW1fdGV4dCIsInZhbHVlIiwiU3RyaW5nIiwidHJpbSIsInNob3dfbWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiZGVsYXkiLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSIsInB1bHNlX2VsZW1lbnQiLCIkZWxlbWVudCIsImR1cmF0aW9uIiwibGVuZ3RoIiwicmVtb3ZlQ2xhc3MiLCJlYWNoIiwib2Zmc2V0V2lkdGgiLCJhZGRDbGFzcyIsInNldFRpbWVvdXQiLCJwdWxzZV9sYXRlc3Rfd2FybmluZ19ub3RpY2UiLCJjbGVhclRpbWVvdXQiLCJsYXN0Iiwic2hvd19wcmVtaXVtX25vdGljZSIsIiRjb250cm9sIiwiaXNfcmFuZ2VfaW5mbyIsImlzIiwiaXNfY2hhbmdlb3Zlcl9pbmZvIiwiaTE4biIsInByZW1pdW1fb3B0aW9uX25vdGljZSIsIiRub3RlIiwicHJlbWl1bV9ub3RpY2UiLCJwcmVtaXVtX2NoYW5nZW92ZXJfbm90aWNlIiwiY2xvc2VzdCIsImZpbmQiLCJmaXJzdCIsImlzX3JhbmdlX3N1cHBvcnRlZCIsImlzX2xvY2tlZF9jaGFuZ2VvdmVyX2NvbnRyb2wiLCJmaWVsZCIsInN3aXRjaF9wYW5lbCIsIiR0YWIiLCJwYW5lbF9pZCIsImF0dHIiLCIkdGFicyIsIiRwYW5lbHMiLCJyZW1vdmVBdHRyIiwidG9nZ2xlX2dyb3VwIiwiJGJ1dHRvbiIsIiRncm91cCIsIiRmaWVsZHMiLCJpc19vcGVuIiwiaGFzQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInByb3AiLCJjbG9zZV9ncm91cCIsIm9wZW5fZ3JvdXAiLCJncm91cF9uYW1lIiwiaXNfZXhjbHVzaXZlIiwic2libGluZ3MiLCJzY3JvbGxfdG9fZ3JvdXAiLCIkc2Nyb2xsX3BhcmVudCIsInNjcm9sbF9wYXJlbnRfZWwiLCJncm91cF9lbCIsInNjcm9sbF90b3AiLCJwYXJlbnRfcmVjdCIsImdyb3VwX3JlY3QiLCJwYXJlbnRzIiwiJGNhbmRpZGF0ZSIsIm92ZXJmbG93X3kiLCJjc3MiLCJ0ZXN0Iiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZ2V0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvcCIsInRvcCIsInN0b3AiLCJhbmltYXRlIiwiTWF0aCIsIm1heCIsImFwcGx5X29wZW5fc2VjdGlvbl9mcm9tX3VybCIsInNlY3Rpb25fZ3JvdXBzIiwib3Blbl9zZWN0aW9uIiwiaW5kZXgiLCJzeW5jX2xlZnRfbmF2aWdhdGlvbl9hY3RpdmVfc2VjdGlvbiIsInNlY3Rpb25fbWVudXMiLCJtZW51X3NsdWciLCIkbWVudV9pdGVtIiwiZ2V0X2Zvcm0iLCJjb2xsZWN0X3BheWxvYWQiLCIkZm9ybSIsImRhdGEiLCJuYW1lIiwiY2hlY2tib3hlcyIsInNlcmlhbGl6ZUFycmF5IiwiaXRlbSIsInJlcGxhY2UiLCJpbmRleE9mIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInJhd19uYW1lIiwiaXNfYXJyYXlfbmFtZSIsImluQXJyYXkiLCJ2YWwiLCJib29raW5nX2Rpc2FibGVfdGltZXNsb3RzX2luX3Rvb2x0aXAiLCJib29raW5nX3Nob3dfdGltZXNsb3RzX2luX3Rvb2x0aXAiLCJyZXNvdXJjZV9pZCIsIm1vbnRoc19jb3VudCIsImdldF9yZXNvdXJjZV9pZCIsIiRwcmV2aWV3IiwicGFyc2VJbnQiLCJnZXRfbW9udGhzX2NvdW50IiwicGFyc2VfbnVtYmVyX2xpc3QiLCJtYXAiLCJwYXJzZWQiLCJpc05hTiIsInNwbGl0Iiwibm9ybWFsaXplX2ZpeGVkX3JhbmdlX2RheXNfY291bnQiLCJkYXlzX2NvdW50IiwibWluIiwic2V0X2NhbGVuZGFyX3BhcmFtIiwia2V5IiwiX3dwYmMiLCJjYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlIiwicGF0Y2hfY2FsZW5kYXJfZGF0YV9sb2FkZXIiLCJ3cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19wYXRjaGVkIiwib3JpZ2luYWxfbG9hZGVyIiwicGFyYW1zIiwicGF5bG9hZCIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlldyIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19jaGFuZ2VvdmVyIiwiYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fdGltZV9pc19hY3RpdmUiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfdHJpYW5nbGVzIiwiYm9va2luZ19jaGFuZ2Vfb3Zlcl9kYXlzX3RyaWFuZ2xlcyIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19yZWN1cnJlbnRfdGltZSIsImJvb2tpbmdfcmVjdXJyZW50X3RpbWUiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfbGFzdF9jaGVja291dCIsImJvb2tpbmdfbGFzdF9jaGVja291dF9kYXlfYXZhaWxhYmxlIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2V4Y2VycHRfb25fcGFnZXMiLCJib29raW5nX2NoYW5nZV9vdmVyX19pc19leGNlcnB0X29uX3BhZ2VzIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2V4Y2VycHRfcGFnZXMiLCJib29raW5nX2NoYW5nZV9vdmVyX19leGNlcnB0X29uX3BhZ2VzIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2V4Y2VycHRfcmVzb3VyY2VzIiwiYm9va2luZ19jaGFuZ2Vfb3Zlcl9fZXhjZXJwdF9ia19yZXNvdXJjZXMiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19sZWdlbmQiLCJib29raW5nX2lzX3Nob3dfbGVnZW5kIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2xlZ2VuZF9zaG93X251bWJlcnMiLCJib29raW5nX2xlZ2VuZF9pc19zaG93X251bWJlcnMiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfbGVnZW5kX3ZlcnRpY2FsIiwiYm9va2luZ19sZWdlbmRfaXNfdmVydGljYWwiLCJsZWdlbmRfaXRlbSIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19kaXNhYmxlX3RpbWVzbG90c190b29sdGlwIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X3RpbWVzbG90X3dvcmQiLCJib29raW5nX2hpZ2hsaWdodF90aW1lc2xvdF93b3JkIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X3Nob3dfYXZhaWxhYmlsaXR5X3Rvb2x0aXAiLCJib29raW5nX2lzX3Nob3dfYXZhaWxhYmlsaXR5X2luX3Rvb2x0aXBzIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2F2YWlsYWJpbGl0eV93b3JkIiwiYm9va2luZ19oaWdobGlnaHRfYXZhaWxhYmlsaXR5X3dvcmQiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19hdmFpbGFiaWxpdHlfY2VsbCIsImJvb2tpbmdfaXNfc2hvd19hdmFpbGFiaWxpdHlfaW5fZGF0ZV9jZWxsIiwid3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2F2YWlsYWJpbGl0eV9jZWxsX3dvcmQiLCJib29raW5nX2hpZ2hsaWdodF9hdmFpbGFiaWxpdHlfd29yZF9pbl9kYXRlX2NlbGwiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19jb3N0X3Rvb2x0aXAiLCJib29raW5nX2lzX3Nob3dfY29zdF9pbl90b29sdGlwcyIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19jb3N0X3dvcmQiLCJib29raW5nX2hpZ2hsaWdodF9jb3N0X3dvcmQiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19jb3N0X2NlbGwiLCJib29raW5nX2lzX3Nob3dfY29zdF9pbl9kYXRlX2NlbGwiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfY29zdF9jdXJyZW5jeSIsImJvb2tpbmdfY29zdF9pbl9kYXRlX2NlbGxfY3VycmVuY3kiLCJ3cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19ib29rZWRfZGV0YWlscyIsImJvb2tpbmdfaXNfc2hvd19ib29rZWRfZGF0YV9pbl90b29sdGlwcyIsIndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19ib29rZWRfZGV0YWlscyIsImJvb2tpbmdfYm9va2VkX2RhdGFfaW5fdG9vbHRpcHMiLCJhcHBseSIsImFyZ3VtZW50cyIsInN5bmNfY2hhbmdlb3Zlcl9wcmV2aWV3X2NsYXNzIiwiaXNfZW5hYmxlZCIsInBhcmVudCIsInN5bmNfbW9iaWxlX21vbnRoc19wcmV2aWV3IiwiYWxsb3dfbW9iaWxlX21vbnRocyIsImJvb2tpbmdfY2FsZW5kYXJfYWxsb3dfc2V2ZXJhbF9tb250aHNfb25fbW9iaWxlIiwic2V0X290aGVyX3BhcmFtIiwid3BiY19jYWxlbmRhcl9fdXBkYXRlX21vbnRoc19udW1iZXIiLCJ3cGJjX2NhbGVuZGFyX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyX19vbl9yZXNpemUiLCJ3aWR0aCIsImFwcGx5X3N0YW5kYXJkX2RheXNfc2VsZWN0aW9uIiwiZGF5c19zZWxlY3Rpb24iLCJkcyIsIm1vZGUiLCJkYXlzX3NlbGVjdF9tb2RlIiwiZml4ZWRfd2Vla19kYXlzIiwiZml4ZWRfX3dlZWtfZGF5c19fc3RhcnQiLCJkeW5hbWljX3NwZWNpZmljIiwiZHluYW1pY19fZGF5c19zcGVjaWZpYyIsImR5bmFtaWNfd2Vla19kYXlzIiwiZHluYW1pY19fd2Vla19kYXlzX19zdGFydCIsIndwYmNfY2FsX2RheXNfc2VsZWN0X19zaW5nbGUiLCJ3cGJjX2NhbF9kYXlzX3NlbGVjdF9fbXVsdGlwbGUiLCJ3cGJjX2NhbF9kYXlzX3NlbGVjdF9fZml4ZWQiLCJmaXhlZF9fZGF5c19udW0iLCJ3cGJjX2NhbF9kYXlzX3NlbGVjdF9fcmFuZ2UiLCJkeW5hbWljX19kYXlzX21pbiIsImR5bmFtaWNfX2RheXNfbWF4IiwiYXBwbHlfY2FsZW5kYXJfc2V0dGluZ3NfdG9fY2FsZW5kYXIiLCJzaG91bGRfcmVpbml0IiwiJGNhbGVuZGFyIiwiYm9va2luZ19tYXhfbW9udGhlc19pbl9jYWxlbmRhciIsImJvb2tpbmdfc3RhcnRfZGF5X3dlZWVrIiwid3BiY19fY29uZGl0aW9uc19fU0FWRV9JTklUSUFMX19kYXlzX3NlbGVjdGlvbl9wYXJhbXNfX2JtIiwid3BiY19jYWxfX3JlX2luaXQiLCJzY2hlZHVsZV9jYWxlbmRhcl9zZXR0aW5nc19hcHBseSIsImdldF9kYXlzX3NlbGVjdGlvbl9mcm9tX2Zvcm0iLCJib29raW5nX3R5cGVfb2ZfZGF5X3NlbGVjdGlvbnMiLCJib29raW5nX3JhbmdlX3NlbGVjdGlvbl90eXBlIiwiZml4ZWRfZGF5cyIsImJvb2tpbmdfcmFuZ2Vfc3RhcnRfZGF5X21vZGUiLCJib29raW5nX3JhbmdlX3N0YXJ0X2RheV93ZWVrZGF5cyIsImR5bmFtaWNfZGF5cyIsImJvb2tpbmdfcmFuZ2Vfc3RhcnRfZGF5X2R5bmFtaWNfbW9kZSIsImJvb2tpbmdfcmFuZ2Vfc3RhcnRfZGF5X2R5bmFtaWNfd2Vla2RheXMiLCJqb2luIiwiYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fZGF5c19jb3VudCIsImJvb2tpbmdfcmFuZ2Vfc2VsZWN0aW9uX2RheXNfY291bnRfZHluYW1pYyIsImJvb2tpbmdfcmFuZ2Vfc2VsZWN0aW9uX2RheXNfbWF4X2NvdW50X2R5bmFtaWMiLCJib29raW5nX3JhbmdlX3NlbGVjdGlvbl9kYXlzX3NwZWNpZmljX251bV9keW5hbWljIiwicmVmcmVzaF9jb25kaXRpb25hbF9jb250cm9scyIsImRheV9tb2RlIiwicmFuZ2VfdHlwZSIsImZpeGVkX3N0YXJ0IiwiZHluYW1pY19zdGFydCIsImlzX2NoYW5nZW92ZXIiLCJpc19sZWdlbmQiLCJpc190aW1lc2xvdF90b29sdGlwIiwiaXNfYXZhaWxhYmlsaXR5X3Rvb2x0aXAiLCJpc19hdmFpbGFiaWxpdHlfY2VsbCIsImlzX2Nvc3RfdG9vbHRpcCIsImlzX2Nvc3RfY2VsbCIsImlzX2Jvb2tlZF90b29sdGlwIiwic2V0X2NhbGVuZGFyX2xvYWRpbmciLCJpc19sb2FkaW5nIiwiJHBhbmVsIiwicmVtb3ZlIiwiYXBwZW5kIiwibG9hZGluZyIsInJlZnJlc2hfcHJldmlldyIsInNpZ25hdHVyZSIsImFjdGlvbiIsInByZXZpZXdfYWN0aW9uIiwibm9uY2UiLCJKU09OIiwic3RyaW5naWZ5IiwicmVhZHlTdGF0ZSIsImFib3J0IiwicG9zdCIsImFqYXhfdXJsIiwiZG9uZSIsInJlc3BvbnNlIiwic3VjY2VzcyIsImh0bWwiLCJyZXBsYWNlV2l0aCIsInByZXZpZXdfZmFpbGVkIiwiZmFpbCIsInhociIsInRleHRfc3RhdHVzIiwiYWx3YXlzIiwic2NoZWR1bGVfcHJldmlld19yZWZyZXNoIiwiaXNfdGV4dF90eXBpbmdfZmllbGQiLCJ0YWdfbmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsImlucHV0X3R5cGUiLCJpc19mdWxsX3ByZXZpZXdfb25seV9maWVsZCIsImZpZWxkX25hbWUiLCJhcHBseV9jYWxlbmRhcl9zZXR0aW5nc19zYWZlbHkiLCJlcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwic2F2ZV9zZXR0aW5ncyIsIm9yaWdpbmFsX3RleHQiLCJzYXZpbmciLCJzYXZlZCIsInNldHRpbmdzIiwiZG9jdW1lbnQiLCJ0cmlnZ2VyIiwic2F2ZV9mYWlsZWQiLCJyZXNwb25zZUpTT04iLCJiaW5kX2V2ZW50cyIsIm9uIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInByZXZpZXdfZGVsYXkiLCJqUXVlcnkiLCJ3aW5kb3ciXSwic291cmNlcyI6WyJpbmNsdWRlcy9wYWdlLXNldHRpbmdzLWNhbGVuZGFyL19zcmMvc2V0dGluZ3NfY2FsZW5kYXJfcGFnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ2FsZW5kYXIgc2V0dGluZ3MgcGFnZSBVSS5cclxuICovXHJcbiggZnVuY3Rpb24gKCAkLCB3ICkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHJcblx0dmFyIGNmZyA9IHcud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wYWdlIHx8IHt9O1xyXG5cdHZhciBwcmV2aWV3X2FqYXggPSBudWxsO1xuXHR2YXIgcHJldmlld190aW1lciA9IDA7XG5cdHZhciBpc19zYXZpbmcgPSBmYWxzZTtcblx0dmFyIG5vdGljZV90aW1lciA9IDA7XG5cdHZhciBjYWxlbmRhcl9sb2FkX3BhdGNoX3RpbWVyID0gMDtcblx0dmFyIGxhc3RfcHJldmlld19zaWduYXR1cmUgPSAnJztcblxyXG5cdGZ1bmN0aW9uIHRyaW1fdGV4dCggdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnRyaW0oKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNob3dfbWVzc2FnZSggbWVzc2FnZSwgdHlwZSwgZGVsYXkgKSB7XHJcblx0XHRpZiAoIHR5cGVvZiB3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHR3LndwYmNfYWRtaW5fc2hvd19tZXNzYWdlKCBtZXNzYWdlLCB0eXBlIHx8ICdpbmZvJywgZGVsYXkgfHwgNDAwMCwgZmFsc2UgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHB1bHNlX2VsZW1lbnQoICRlbGVtZW50LCBkdXJhdGlvbiApIHtcclxuXHRcdGlmICggISAkZWxlbWVudCB8fCAhICRlbGVtZW50Lmxlbmd0aCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRlbGVtZW50XHJcblx0XHRcdC5yZW1vdmVDbGFzcyggJ3dwYmNfY2FsZW5kYXJfYXR0ZW50aW9uX3B1bHNlJyApXHJcblx0XHRcdC5lYWNoKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0dm9pZCB0aGlzLm9mZnNldFdpZHRoO1xyXG5cdFx0XHR9IClcclxuXHRcdFx0LmFkZENsYXNzKCAnd3BiY19jYWxlbmRhcl9hdHRlbnRpb25fcHVsc2UnICk7XHJcblxyXG5cdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQkZWxlbWVudC5yZW1vdmVDbGFzcyggJ3dwYmNfY2FsZW5kYXJfYXR0ZW50aW9uX3B1bHNlJyApO1xyXG5cdFx0fSwgZHVyYXRpb24gfHwgMjEwMCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcHVsc2VfbGF0ZXN0X3dhcm5pbmdfbm90aWNlKCkge1xyXG5cdFx0Y2xlYXJUaW1lb3V0KCBub3RpY2VfdGltZXIgKTtcclxuXHRcdG5vdGljZV90aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cHVsc2VfZWxlbWVudCggJCggJyNhamF4X3dvcmtpbmcgLndwYmNfaW5uZXJfbWVzc2FnZS5ub3RpY2Utd2FybmluZycgKS5sYXN0KCkgKTtcclxuXHRcdH0sIDUwICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzaG93X3ByZW1pdW1fbm90aWNlKCAkY29udHJvbCApIHtcclxuXHRcdHZhciBpc19yYW5nZV9pbmZvID0gJGNvbnRyb2wgJiYgJGNvbnRyb2wuaXMoICdbZGF0YS13cGJjLWNhbGVuZGFyLXByZW1pdW0tcmFuZ2UtaW5mbz1cIjFcIl0nICk7XHJcblx0XHR2YXIgaXNfY2hhbmdlb3Zlcl9pbmZvID0gJGNvbnRyb2wgJiYgJGNvbnRyb2wuaXMoICdbZGF0YS13cGJjLWNhbGVuZGFyLXByZW1pdW0tY2hhbmdlb3Zlci1pbmZvPVwiMVwiXScgKTtcclxuXHRcdHZhciBtZXNzYWdlID0gY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucHJlbWl1bV9vcHRpb25fbm90aWNlID8gY2ZnLmkxOG4ucHJlbWl1bV9vcHRpb25fbm90aWNlIDogJ1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBpbiBCb29raW5nIENhbGVuZGFyIEJ1c2luZXNzIFNtYWxsIG9yIGhpZ2hlci4nO1xyXG5cdFx0dmFyICRub3RlO1xyXG5cclxuXHRcdGlmICggaXNfcmFuZ2VfaW5mbyApIHtcclxuXHRcdFx0bWVzc2FnZSA9IGNmZy5pMThuICYmIGNmZy5pMThuLnByZW1pdW1fbm90aWNlID8gY2ZnLmkxOG4ucHJlbWl1bV9ub3RpY2UgOiAnQWR2YW5jZWQgcmFuZ2UgcnVsZXMgYXJlIGF2YWlsYWJsZSBpbiBCb29raW5nIENhbGVuZGFyIEJ1c2luZXNzIFNtYWxsIG9yIGhpZ2hlci4gT3BlbiB0aGUgbGl2ZSBkZW1vIHRvIHRlc3QgdGhlIHJlYWwgYmVoYXZpb3IuJztcblx0XHR9IGVsc2UgaWYgKCBpc19jaGFuZ2VvdmVyX2luZm8gKSB7XHJcblx0XHRcdG1lc3NhZ2UgPSBjZmcuaTE4biAmJiBjZmcuaTE4bi5wcmVtaXVtX2NoYW5nZW92ZXJfbm90aWNlID8gY2ZnLmkxOG4ucHJlbWl1bV9jaGFuZ2VvdmVyX25vdGljZSA6ICdDaGFuZ2VvdmVyIGRheXMgYXJlIGF2YWlsYWJsZSBpbiBCb29raW5nIENhbGVuZGFyIEJ1c2luZXNzIFNtYWxsIG9yIGhpZ2hlci4gT3BlbiB0aGUgbGl2ZSBkZW1vIHRvIHRlc3QgdGhlIHJlYWwgYmVoYXZpb3IuJztcclxuXHRcdH1cclxuXHJcblx0XHRwdWxzZV9lbGVtZW50KCAkY29udHJvbC5jbG9zZXN0KCAnLndwYmNfY2FsZW5kYXJfZmllbGRfcm93LCBsYWJlbCwgLndwYmNfY2FsZW5kYXJfcmFkaW9fc3RhY2snICkgKTtcclxuXHRcdGlmICggaXNfcmFuZ2VfaW5mbyApIHtcclxuXHRcdFx0JG5vdGUgPSAkY29udHJvbC5jbG9zZXN0KCAnLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyApLmZpbmQoICdbZGF0YS13cGJjLWNhbGVuZGFyLXJhbmdlLXVwZ3JhZGUtbm90ZT1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHRcdFx0JG5vdGUuYWRkQ2xhc3MoICdpcy12aXNpYmxlJyApO1xyXG5cdFx0XHRwdWxzZV9lbGVtZW50KCAkbm90ZSApO1xyXG5cdFx0fSBlbHNlIGlmICggaXNfY2hhbmdlb3Zlcl9pbmZvICkge1xyXG5cdFx0XHQkbm90ZSA9ICRjb250cm9sLmNsb3Nlc3QoICcud3BiY191aV9fY29sbGFwc2libGVfZ3JvdXAnICkuZmluZCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItY2hhbmdlb3Zlci11cGdyYWRlLW5vdGU9XCIxXCJdJyApLmZpcnN0KCk7XHJcblx0XHRcdCRub3RlLmFkZENsYXNzKCAnaXMtdmlzaWJsZScgKTtcclxuXHRcdFx0cHVsc2VfZWxlbWVudCggJG5vdGUgKTtcclxuXHRcdH1cclxuXHRcdHNob3dfbWVzc2FnZSggbWVzc2FnZSwgJ3dhcm5pbmcnLCA5MDAwICk7XHJcblx0XHRwdWxzZV9sYXRlc3Rfd2FybmluZ19ub3RpY2UoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGlzX3JhbmdlX3N1cHBvcnRlZCgpIHtcclxuXHRcdHJldHVybiBjZmcuaXNfcmFuZ2Vfc3VwcG9ydGVkID09PSAxIHx8IGNmZy5pc19yYW5nZV9zdXBwb3J0ZWQgPT09ICcxJyB8fCBjZmcuaXNfcmFuZ2Vfc3VwcG9ydGVkID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaXNfbG9ja2VkX2NoYW5nZW92ZXJfY29udHJvbCggZmllbGQgKSB7XG5cdFx0cmV0dXJuICEgaXNfcmFuZ2Vfc3VwcG9ydGVkKCkgJiYgJCggZmllbGQgKS5pcyggJ1tuYW1lPVwiYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fdGltZV9pc19hY3RpdmVcIl0nICk7XG5cdH1cblxyXG5cdGZ1bmN0aW9uIHN3aXRjaF9wYW5lbCggJHRhYiApIHtcclxuXHRcdHZhciBwYW5lbF9pZCA9ICR0YWIuYXR0ciggJ2FyaWEtY29udHJvbHMnICk7XHJcblx0XHR2YXIgJHRhYnMgPSAkdGFiLmNsb3Nlc3QoICcud3BiY19jYWxlbmRhcl9yaWdodGJhcl90YWJzJyApLmZpbmQoICdbcm9sZT1cInRhYlwiXScgKTtcclxuXHRcdHZhciAkcGFuZWxzID0gJCggJy53cGJjX2NhbGVuZGFyX3JpZ2h0YmFyX3BhbmVscyBbcm9sZT1cInRhYnBhbmVsXCJdJyApO1xyXG5cclxuXHRcdCR0YWJzLmF0dHIoICdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyApO1xyXG5cdFx0JHRhYi5hdHRyKCAnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyApO1xyXG5cclxuXHRcdCRwYW5lbHMuYXR0ciggJ2hpZGRlbicsICdoaWRkZW4nICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ3RydWUnICk7XHJcblx0XHQkKCAnIycgKyBwYW5lbF9pZCApLnJlbW92ZUF0dHIoICdoaWRkZW4nICkuYXR0ciggJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdG9nZ2xlX2dyb3VwKCAkYnV0dG9uICkge1xyXG5cdFx0dmFyICRncm91cCA9ICRidXR0b24uY2xvc2VzdCggJy53cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cCcgKTtcclxuXHRcdHZhciAkZmllbGRzID0gJGdyb3VwLmZpbmQoICc+IC5ncm91cF9fZmllbGRzJyApO1xyXG5cdFx0dmFyIGlzX29wZW4gPSAkZ3JvdXAuaGFzQ2xhc3MoICdpcy1vcGVuJyApO1xyXG5cclxuXHRcdCRncm91cC50b2dnbGVDbGFzcyggJ2lzLW9wZW4nLCAhIGlzX29wZW4gKTtcclxuXHRcdCRidXR0b24uYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCBpc19vcGVuID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xyXG5cdFx0JGZpZWxkcy5wcm9wKCAnaGlkZGVuJywgaXNfb3BlbiApLmF0dHIoICdhcmlhLWhpZGRlbicsIGlzX29wZW4gPyAndHJ1ZScgOiAnZmFsc2UnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjbG9zZV9ncm91cCggJGdyb3VwICkge1xyXG5cdFx0dmFyICRidXR0b24gPSAkZ3JvdXAuZmluZCggJz4gLmdyb3VwX19oZWFkZXInICk7XHJcblx0XHR2YXIgJGZpZWxkcyA9ICRncm91cC5maW5kKCAnPiAuZ3JvdXBfX2ZpZWxkcycgKTtcclxuXHJcblx0XHQkZ3JvdXAucmVtb3ZlQ2xhc3MoICdpcy1vcGVuJyApO1xyXG5cdFx0JGJ1dHRvbi5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScgKTtcclxuXHRcdCRmaWVsZHMucHJvcCggJ2hpZGRlbicsIHRydWUgKS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIG9wZW5fZ3JvdXAoIGdyb3VwX25hbWUsIGlzX2V4Y2x1c2l2ZSApIHtcclxuXHRcdHZhciAkZ3JvdXAgPSAkKCAnLndwYmNfY2FsZW5kYXJfcmlnaHRiYXJfcGFuZWxzIC53cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cFtkYXRhLWdyb3VwPVwiJyArIGdyb3VwX25hbWUgKyAnXCJdJyApO1xyXG5cdFx0dmFyICRidXR0b24gPSAkZ3JvdXAuZmluZCggJz4gLmdyb3VwX19oZWFkZXInICk7XHJcblx0XHR2YXIgJGZpZWxkcyA9ICRncm91cC5maW5kKCAnPiAuZ3JvdXBfX2ZpZWxkcycgKTtcclxuXHJcblx0XHRpZiAoICEgJGdyb3VwLmxlbmd0aCApIHtcclxuXHRcdFx0cmV0dXJuICQoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGlzX2V4Y2x1c2l2ZSApIHtcclxuXHRcdFx0JGdyb3VwLnNpYmxpbmdzKCAnLndwYmNfdWlfX2NvbGxhcHNpYmxlX2dyb3VwJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRjbG9zZV9ncm91cCggJCggdGhpcyApICk7XHJcblx0XHRcdH0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQkZ3JvdXAuYWRkQ2xhc3MoICdpcy1vcGVuJyApO1xyXG5cdFx0JGJ1dHRvbi5hdHRyKCAnYXJpYS1leHBhbmRlZCcsICd0cnVlJyApO1xyXG5cdFx0JGZpZWxkcy5wcm9wKCAnaGlkZGVuJywgZmFsc2UgKS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAnZmFsc2UnICk7XHJcblxyXG5cdFx0cmV0dXJuICRncm91cDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHNjcm9sbF90b19ncm91cCggZ3JvdXBfbmFtZSApIHtcclxuXHRcdHZhciAkZ3JvdXAgPSAkKCAnLndwYmNfY2FsZW5kYXJfcmlnaHRiYXJfcGFuZWxzIC53cGJjX3VpX19jb2xsYXBzaWJsZV9ncm91cFtkYXRhLWdyb3VwPVwiJyArIGdyb3VwX25hbWUgKyAnXCJdJyApO1xyXG5cdFx0dmFyICRzY3JvbGxfcGFyZW50ID0gJCgpO1xyXG5cdFx0dmFyIHNjcm9sbF9wYXJlbnRfZWw7XHJcblx0XHR2YXIgZ3JvdXBfZWw7XHJcblx0XHR2YXIgc2Nyb2xsX3RvcDtcclxuXHRcdHZhciBwYXJlbnRfcmVjdDtcclxuXHRcdHZhciBncm91cF9yZWN0O1xyXG5cclxuXHRcdGlmICggISAkZ3JvdXAubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGdyb3VwLnBhcmVudHMoKS5lYWNoKCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkY2FuZGlkYXRlID0gJCggdGhpcyApO1xyXG5cdFx0XHR2YXIgb3ZlcmZsb3dfeSA9ICRjYW5kaWRhdGUuY3NzKCAnb3ZlcmZsb3cteScgKTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQkY2FuZGlkYXRlLmhhc0NsYXNzKCAnc2ltcGxlYmFyLWNvbnRlbnQtd3JhcHBlcicgKVxyXG5cdFx0XHRcdHx8IChcclxuXHRcdFx0XHRcdC8oYXV0b3xzY3JvbGwpLy50ZXN0KCBvdmVyZmxvd195IClcclxuXHRcdFx0XHRcdCYmIHRoaXMuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5jbGllbnRIZWlnaHRcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdCRzY3JvbGxfcGFyZW50ID0gJGNhbmRpZGF0ZTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHJcblx0XHRpZiAoICEgJHNjcm9sbF9wYXJlbnQubGVuZ3RoICkge1xyXG5cdFx0XHQkc2Nyb2xsX3BhcmVudCA9ICRncm91cC5jbG9zZXN0KCAnLndwYmNfdWlfZWxfX3ZlcnRfcmlnaHRfYmFyX19jb250ZW50JyApLmZpbmQoICcuc2ltcGxlYmFyLWNvbnRlbnQtd3JhcHBlcicgKS5maXJzdCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggISAkc2Nyb2xsX3BhcmVudC5sZW5ndGggKSB7XHJcblx0XHRcdCRncm91cC5nZXQoIDAgKS5zY3JvbGxJbnRvVmlldyggeyBibG9jazogJ25lYXJlc3QnIH0gKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNjcm9sbF9wYXJlbnRfZWwgPSAkc2Nyb2xsX3BhcmVudC5nZXQoIDAgKTtcclxuXHRcdGdyb3VwX2VsICAgICAgICAgPSAkZ3JvdXAuZ2V0KCAwICk7XHJcblx0XHRwYXJlbnRfcmVjdCAgICAgID0gc2Nyb2xsX3BhcmVudF9lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdGdyb3VwX3JlY3QgICAgICAgPSBncm91cF9lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdHNjcm9sbF90b3AgICAgICAgPSAkc2Nyb2xsX3BhcmVudC5zY3JvbGxUb3AoKSArIGdyb3VwX3JlY3QudG9wIC0gcGFyZW50X3JlY3QudG9wIC0gMTA7XHJcblxyXG5cdFx0JHNjcm9sbF9wYXJlbnQuc3RvcCgpLmFuaW1hdGUoIHsgc2Nyb2xsVG9wOiBNYXRoLm1heCggMCwgc2Nyb2xsX3RvcCApIH0sIDE4MCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gYXBwbHlfb3Blbl9zZWN0aW9uX2Zyb21fdXJsKCkge1xyXG5cdFx0dmFyIHNlY3Rpb25fZ3JvdXBzID0gY2ZnLnNlY3Rpb25fZ3JvdXBzIHx8IHt9O1xyXG5cdFx0dmFyIGdyb3VwX25hbWUgPSBzZWN0aW9uX2dyb3Vwc1sgY2ZnLm9wZW5fc2VjdGlvbiBdIHx8ICcnO1xyXG5cdFx0dmFyICRncm91cDtcclxuXHJcblx0XHRpZiAoICcnID09PSBncm91cF9uYW1lICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JGdyb3VwID0gb3Blbl9ncm91cCggZ3JvdXBfbmFtZSwgdHJ1ZSApO1xyXG5cdFx0JC5lYWNoKCBbIDEyMCwgNjUwIF0sIGZ1bmN0aW9uICggaW5kZXgsIGRlbGF5ICkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0c2Nyb2xsX3RvX2dyb3VwKCBncm91cF9uYW1lICk7XHJcblx0XHRcdFx0cHVsc2VfZWxlbWVudCggJGdyb3VwICk7XHJcblx0XHRcdH0sIGRlbGF5ICk7XHJcblx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzeW5jX2xlZnRfbmF2aWdhdGlvbl9hY3RpdmVfc2VjdGlvbigpIHtcclxuXHRcdHZhciBzZWN0aW9uX21lbnVzID0gY2ZnLnNlY3Rpb25fbWVudXMgfHwge307XHJcblx0XHR2YXIgbWVudV9zbHVnID0gc2VjdGlvbl9tZW51c1sgY2ZnLm9wZW5fc2VjdGlvbiBdIHx8ICcnO1xyXG5cdFx0dmFyICRtZW51X2l0ZW07XHJcblxyXG5cdFx0aWYgKCAnJyA9PT0gbWVudV9zbHVnICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JG1lbnVfaXRlbSA9ICQoICcud3BiY191aV9lbF9fdmVydF9uYXZfaXRlbV9fJyArIG1lbnVfc2x1ZyApO1xyXG5cdFx0aWYgKCAhICRtZW51X2l0ZW0ubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0JG1lbnVfaXRlbVxyXG5cdFx0XHQuY2xvc2VzdCggJy53cGJjX3VpX2VsX19sZXZlbF9fZm9sZGVyJyApXHJcblx0XHRcdC5maW5kKCAnLndwYmNfdWlfZWxfX3ZlcnRfbmF2X2l0ZW1fc3ViJyApXHJcblx0XHRcdC5yZW1vdmVDbGFzcyggJ2FjdGl2ZScgKTtcclxuXHRcdCRtZW51X2l0ZW0uYWRkQ2xhc3MoICdhY3RpdmUnICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRfZm9ybSgpIHtcclxuXHRcdHJldHVybiAkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1zZXR0aW5ncy1mb3JtPVwiMVwiXScgKS5maXJzdCgpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29sbGVjdF9wYXlsb2FkKCkge1xuXHRcdHZhciAkZm9ybSA9IGdldF9mb3JtKCk7XG5cdFx0dmFyIGRhdGEgPSB7fTtcblx0XHR2YXIgbmFtZTtcblx0XHR2YXIgY2hlY2tib3hlcyA9IFtcclxuXHRcdFx0J2Jvb2tpbmdfY2FsZW5kYXJfYWxsb3dfc2V2ZXJhbF9tb250aHNfb25fbW9iaWxlJyxcclxuXHRcdFx0J2Jvb2tpbmdfcmVjdXJyZW50X3RpbWUnLFxyXG5cdFx0XHQnYm9va2luZ19sYXN0X2NoZWNrb3V0X2RheV9hdmFpbGFibGUnLFxyXG5cdFx0XHQnYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fdGltZV9pc19hY3RpdmUnLFxyXG5cdFx0XHQnYm9va2luZ19jaGFuZ2Vfb3Zlcl9kYXlzX3RyaWFuZ2xlcycsXHJcblx0XHRcdCdib29raW5nX2NoYW5nZV9vdmVyX19pc19leGNlcnB0X29uX3BhZ2VzJyxcclxuXHRcdFx0J2Jvb2tpbmdfaXNfc2hvd19sZWdlbmQnLFxyXG5cdFx0XHQnYm9va2luZ19sZWdlbmRfaXNfc2hvd19udW1iZXJzJyxcclxuXHRcdFx0J2Jvb2tpbmdfbGVnZW5kX2lzX3ZlcnRpY2FsJyxcclxuXHRcdFx0J2Jvb2tpbmdfc2hvd190aW1lc2xvdHNfaW5fdG9vbHRpcCcsXHJcblx0XHRcdCdib29raW5nX2lzX3Nob3dfYXZhaWxhYmlsaXR5X2luX3Rvb2x0aXBzJyxcclxuXHRcdFx0J2Jvb2tpbmdfaXNfc2hvd19hdmFpbGFiaWxpdHlfaW5fZGF0ZV9jZWxsJyxcclxuXHRcdFx0J2Jvb2tpbmdfaXNfc2hvd19jb3N0X2luX3Rvb2x0aXBzJyxcclxuXHRcdFx0J2Jvb2tpbmdfaXNfc2hvd19jb3N0X2luX2RhdGVfY2VsbCcsXHJcblx0XHRcdCdib29raW5nX2lzX3Nob3dfYm9va2VkX2RhdGFfaW5fdG9vbHRpcHMnXHJcblx0XHRdO1xuXG5cdFx0JC5lYWNoKCAkZm9ybS5zZXJpYWxpemVBcnJheSgpLCBmdW5jdGlvbiAoIGluZGV4LCBpdGVtICkge1xuXHRcdFx0bmFtZSA9IFN0cmluZyggaXRlbS5uYW1lIHx8ICcnICkucmVwbGFjZSggL1xcW1xcXSQvLCAnJyApO1xuXHRcdFx0aWYgKCAwID09PSBuYW1lLmluZGV4T2YoICd3cGJjX3NldHVwJyApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGRhdGFbIG5hbWUgXSApIHtcblx0XHRcdFx0aWYgKCAhIEFycmF5LmlzQXJyYXkoIGRhdGFbIG5hbWUgXSApICkge1xuXHRcdFx0XHRcdGRhdGFbIG5hbWUgXSA9IFsgZGF0YVsgbmFtZSBdIF07XG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRhWyBuYW1lIF0ucHVzaCggaXRlbS52YWx1ZSApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRhdGFbIG5hbWUgXSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdH0gKTtcclxuXHJcblx0XHQkLmVhY2goIGNoZWNrYm94ZXMsIGZ1bmN0aW9uICggaW5kZXgsIG5hbWUgKSB7XHJcblx0XHRcdGRhdGFbIG5hbWUgXSA9ICRmb3JtLmZpbmQoICdbbmFtZT1cIicgKyBuYW1lICsgJ1wiXScgKS5wcm9wKCAnY2hlY2tlZCcgKSA/ICdPbicgOiAnT2ZmJztcclxuXHRcdH0gKTtcclxuXHJcblx0XHQkZm9ybS5maW5kKCAnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW25hbWVdJyApLmVhY2goIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIHJhd19uYW1lID0gU3RyaW5nKCB0aGlzLm5hbWUgfHwgJycgKTtcclxuXHRcdFx0dmFyIGlzX2FycmF5X25hbWUgPSAvXFxbXFxdJC8udGVzdCggcmF3X25hbWUgKTtcclxuXHJcblx0XHRcdG5hbWUgPSByYXdfbmFtZS5yZXBsYWNlKCAvXFxbXFxdJC8sICcnICk7XHJcblx0XHRcdGlmICggaXNfYXJyYXlfbmFtZSApIHtcclxuXHRcdFx0XHRpZiAoICd1bmRlZmluZWQnID09PSB0eXBlb2YgZGF0YVsgbmFtZSBdICkge1xyXG5cdFx0XHRcdFx0ZGF0YVsgbmFtZSBdID0gW107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoICQuaW5BcnJheSggbmFtZSwgY2hlY2tib3hlcyApICE9PSAtMSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0ZGF0YVsgbmFtZSBdID0gJCggdGhpcyApLnByb3AoICdjaGVja2VkJyApID8gKCAkKCB0aGlzICkudmFsKCkgfHwgJ09uJyApIDogJ09mZic7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0ZGF0YS5ib29raW5nX2Rpc2FibGVfdGltZXNsb3RzX2luX3Rvb2x0aXAgPSBkYXRhLmJvb2tpbmdfc2hvd190aW1lc2xvdHNfaW5fdG9vbHRpcCA9PT0gJ09uJyA/ICdPZmYnIDogJ09uJztcclxuXHJcblx0XHRkYXRhLnJlc291cmNlX2lkID0gJCggJyN3cGJjX2NhbGVuZGFyX3Jlc291cmNlX2lkJyApLnZhbCgpIHx8ICcnO1xyXG5cdFx0ZGF0YS5tb250aHNfY291bnQgPSAkKCAnI3dwYmNfY2FsZW5kYXJfbW9udGhzX2NvdW50JyApLnZhbCgpIHx8ICcnO1xyXG5cclxuXHRcdHJldHVybiBkYXRhO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X3Jlc291cmNlX2lkKCkge1xyXG5cdFx0dmFyICRwcmV2aWV3ID0gJCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItcHJldmlldz1cIjFcIl0nICkuZmlyc3QoKTtcclxuXHJcblx0XHRyZXR1cm4gcGFyc2VJbnQoICRwcmV2aWV3LmF0dHIoICdkYXRhLXJlc291cmNlLWlkJyApIHx8ICQoICcjd3BiY19jYWxlbmRhcl9yZXNvdXJjZV9pZCcgKS52YWwoKSB8fCAwLCAxMCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZ2V0X21vbnRoc19jb3VudCgpIHtcclxuXHRcdHJldHVybiBwYXJzZUludCggJCggJyN3cGJjX2NhbGVuZGFyX21vbnRoc19jb3VudCcgKS52YWwoKSB8fCAzLCAxMCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcGFyc2VfbnVtYmVyX2xpc3QoIHZhbHVlICkge1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcclxuXHRcdFx0cmV0dXJuICQubWFwKCB2YWx1ZSwgZnVuY3Rpb24gKCBpdGVtICkge1xyXG5cdFx0XHRcdHZhciBwYXJzZWQgPSBwYXJzZUludCggaXRlbSwgMTAgKTtcclxuXHRcdFx0XHRyZXR1cm4gaXNOYU4oIHBhcnNlZCApID8gbnVsbCA6IHBhcnNlZDtcclxuXHRcdFx0fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAkLm1hcCggU3RyaW5nKCB2YWx1ZSB8fCAnJyApLnNwbGl0KCAvXFxzKixcXHMqLyApLCBmdW5jdGlvbiAoIGl0ZW0gKSB7XHJcblx0XHRcdHZhciBwYXJzZWQgPSBwYXJzZUludCggaXRlbSwgMTAgKTtcclxuXHRcdFx0cmV0dXJuICggJycgPT09IGl0ZW0gfHwgaXNOYU4oIHBhcnNlZCApICkgPyBudWxsIDogcGFyc2VkO1xyXG5cdFx0fSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gbm9ybWFsaXplX2ZpeGVkX3JhbmdlX2RheXNfY291bnQoIHZhbHVlICkge1xuXHRcdHZhciBkYXlzX2NvdW50ID0gcGFyc2VJbnQoIHZhbHVlLCAxMCApO1xuXG5cdFx0aWYgKCBpc05hTiggZGF5c19jb3VudCApIHx8IGRheXNfY291bnQgPCAxICkge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIE1hdGgubWluKCAxODAsIGRheXNfY291bnQgKTtcblx0fVxuXHJcblx0ZnVuY3Rpb24gc2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwga2V5LCB2YWx1ZSApIHtcclxuXHRcdGlmICggdy5fd3BiYyAmJiB0eXBlb2Ygdy5fd3BiYy5jYWxlbmRhcl9fc2V0X3BhcmFtX3ZhbHVlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHR3Ll93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUoIHJlc291cmNlX2lkLCBrZXksIHZhbHVlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwYXRjaF9jYWxlbmRhcl9kYXRhX2xvYWRlcigpIHtcclxuXHRcdGlmICggdHlwZW9mIHcud3BiY19jYWxlbmRhcl9fbG9hZF9kYXRhX19hanggIT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCggY2FsZW5kYXJfbG9hZF9wYXRjaF90aW1lciApO1xyXG5cdFx0XHRjYWxlbmRhcl9sb2FkX3BhdGNoX3RpbWVyID0gc2V0VGltZW91dCggcGF0Y2hfY2FsZW5kYXJfZGF0YV9sb2FkZXIsIDEyMCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB3LndwYmNfY2FsZW5kYXJfX2xvYWRfZGF0YV9fYWp4LndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19wYXRjaGVkICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIG9yaWdpbmFsX2xvYWRlciA9IHcud3BiY19jYWxlbmRhcl9fbG9hZF9kYXRhX19hang7XHJcblxyXG5cdFx0dy53cGJjX2NhbGVuZGFyX19sb2FkX2RhdGFfX2FqeCA9IGZ1bmN0aW9uICggcGFyYW1zICkge1xyXG5cdFx0XHR2YXIgcGF5bG9hZDtcclxuXHJcblx0XHRcdGlmICggJCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItcGFnZT1cIjFcIl0nICkubGVuZ3RoICYmIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0JyApIHtcclxuXHRcdFx0XHRwYXlsb2FkID0gY29sbGVjdF9wYXlsb2FkKCk7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlldyA9IDE7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19jaGFuZ2VvdmVyID0gcGF5bG9hZC5ib29raW5nX3JhbmdlX3NlbGVjdGlvbl90aW1lX2lzX2FjdGl2ZSA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X3RyaWFuZ2xlcyA9IHBheWxvYWQuYm9va2luZ19jaGFuZ2Vfb3Zlcl9kYXlzX3RyaWFuZ2xlcyA9PT0gJ09mZicgPyAnT2ZmJyA6ICdPbic7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19yZWN1cnJlbnRfdGltZSA9IHBheWxvYWQuYm9va2luZ19yZWN1cnJlbnRfdGltZSA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2xhc3RfY2hlY2tvdXQgPSBwYXlsb2FkLmJvb2tpbmdfbGFzdF9jaGVja291dF9kYXlfYXZhaWxhYmxlID09PSAnT24nID8gJ09uJyA6ICdPZmYnO1xyXG5cdFx0XHRcdHBhcmFtcy53cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfZXhjZXJwdF9vbl9wYWdlcyA9IHBheWxvYWQuYm9va2luZ19jaGFuZ2Vfb3Zlcl9faXNfZXhjZXJwdF9vbl9wYWdlcyA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2V4Y2VycHRfcGFnZXMgPSBwYXlsb2FkLmJvb2tpbmdfY2hhbmdlX292ZXJfX2V4Y2VycHRfb25fcGFnZXMgfHwgJyc7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19leGNlcnB0X3Jlc291cmNlcyA9IHBheWxvYWQuYm9va2luZ19jaGFuZ2Vfb3Zlcl9fZXhjZXJwdF9ia19yZXNvdXJjZXMgfHwgJyc7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19zaG93X2xlZ2VuZCA9IHBheWxvYWQuYm9va2luZ19pc19zaG93X2xlZ2VuZCA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2xlZ2VuZF9zaG93X251bWJlcnMgPSBwYXlsb2FkLmJvb2tpbmdfbGVnZW5kX2lzX3Nob3dfbnVtYmVycyA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2xlZ2VuZF92ZXJ0aWNhbCA9IHBheWxvYWQuYm9va2luZ19sZWdlbmRfaXNfdmVydGljYWwgPT09ICdPbicgPyAnT24nIDogJ09mZic7XHJcblx0XHRcdFx0JC5lYWNoKCBbICdhdmFpbGFibGUnLCAncGVuZGluZycsICdhcHByb3ZlZCcsICdwYXJ0aWFsbHknLCAndW5hdmFpbGFibGUnIF0sIGZ1bmN0aW9uICggaW5kZXgsIGxlZ2VuZF9pdGVtICkge1xyXG5cdFx0XHRcdFx0cGFyYW1zWyAnd3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2xlZ2VuZF9zaG93XycgKyBsZWdlbmRfaXRlbSBdID0gcGF5bG9hZFsgJ2Jvb2tpbmdfbGVnZW5kX2lzX3Nob3dfaXRlbV8nICsgbGVnZW5kX2l0ZW0gXSA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRcdHBhcmFtc1sgJ3dwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19sZWdlbmRfdGV4dF8nICsgbGVnZW5kX2l0ZW0gXSA9IHBheWxvYWRbICdib29raW5nX2xlZ2VuZF90ZXh0X2Zvcl9pdGVtXycgKyBsZWdlbmRfaXRlbSBdIHx8ICcnO1xyXG5cdFx0XHRcdH0gKTtcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X2Rpc2FibGVfdGltZXNsb3RzX3Rvb2x0aXAgPSBwYXlsb2FkLmJvb2tpbmdfZGlzYWJsZV90aW1lc2xvdHNfaW5fdG9vbHRpcCA9PT0gJ09uJyA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X3RpbWVzbG90X3dvcmQgPSBwYXlsb2FkLmJvb2tpbmdfaGlnaGxpZ2h0X3RpbWVzbG90X3dvcmQgfHwgJyc7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19zaG93X2F2YWlsYWJpbGl0eV90b29sdGlwID0gcGF5bG9hZC5ib29raW5nX2lzX3Nob3dfYXZhaWxhYmlsaXR5X2luX3Rvb2x0aXBzID09PSAnT24nID8gJ09uJyA6ICdPZmYnO1xyXG5cdFx0XHRcdHBhcmFtcy53cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfYXZhaWxhYmlsaXR5X3dvcmQgPSBwYXlsb2FkLmJvb2tpbmdfaGlnaGxpZ2h0X2F2YWlsYWJpbGl0eV93b3JkIHx8ICcnO1xyXG5cdFx0XHRcdHBhcmFtcy53cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19hdmFpbGFiaWxpdHlfY2VsbCA9IHBheWxvYWQuYm9va2luZ19pc19zaG93X2F2YWlsYWJpbGl0eV9pbl9kYXRlX2NlbGwgPT09ICdPbicgPyAnT24nIDogJ09mZic7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19hdmFpbGFiaWxpdHlfY2VsbF93b3JkID0gcGF5bG9hZC5ib29raW5nX2hpZ2hsaWdodF9hdmFpbGFiaWxpdHlfd29yZF9pbl9kYXRlX2NlbGwgfHwgJyc7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19zaG93X2Nvc3RfdG9vbHRpcCA9IHBheWxvYWQuYm9va2luZ19pc19zaG93X2Nvc3RfaW5fdG9vbHRpcHMgPT09ICdPbicgPyAnT24nIDogJ09mZic7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19jb3N0X3dvcmQgPSBwYXlsb2FkLmJvb2tpbmdfaGlnaGxpZ2h0X2Nvc3Rfd29yZCB8fCAnJztcclxuXHRcdFx0XHRwYXJhbXMud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X3Nob3dfY29zdF9jZWxsID0gcGF5bG9hZC5ib29raW5nX2lzX3Nob3dfY29zdF9pbl9kYXRlX2NlbGwgPT09ICdPbicgPyAnT24nIDogJ09mZic7XHJcblx0XHRcdFx0cGFyYW1zLndwYmNfc2V0dGluZ3NfY2FsZW5kYXJfcHJldmlld19jb3N0X2N1cnJlbmN5ID0gcGF5bG9hZC5ib29raW5nX2Nvc3RfaW5fZGF0ZV9jZWxsX2N1cnJlbmN5IHx8ICcnO1xyXG5cdFx0XHRcdHBhcmFtcy53cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfc2hvd19ib29rZWRfZGV0YWlscyA9IHBheWxvYWQuYm9va2luZ19pc19zaG93X2Jvb2tlZF9kYXRhX2luX3Rvb2x0aXBzID09PSAnT24nID8gJ09uJyA6ICdPZmYnO1xyXG5cdFx0XHRcdHBhcmFtcy53cGJjX3NldHRpbmdzX2NhbGVuZGFyX3ByZXZpZXdfYm9va2VkX2RldGFpbHMgPSBwYXlsb2FkLmJvb2tpbmdfYm9va2VkX2RhdGFfaW5fdG9vbHRpcHMgfHwgJyc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBvcmlnaW5hbF9sb2FkZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0fTtcclxuXHRcdHcud3BiY19jYWxlbmRhcl9fbG9hZF9kYXRhX19hangud3BiY19zZXR0aW5nc19jYWxlbmRhcl9wcmV2aWV3X3BhdGNoZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc3luY19jaGFuZ2VvdmVyX3ByZXZpZXdfY2xhc3MoIHBheWxvYWQgKSB7XHJcblx0XHR2YXIgZGF0YSA9IHBheWxvYWQgfHwgY29sbGVjdF9wYXlsb2FkKCk7XHJcblx0XHR2YXIgaXNfZW5hYmxlZCA9IGRhdGEuYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fdGltZV9pc19hY3RpdmUgPT09ICdPbicgJiYgZGF0YS5ib29raW5nX2NoYW5nZV9vdmVyX2RheXNfdHJpYW5nbGVzICE9PSAnT2ZmJztcclxuXHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1wcmV2aWV3PVwiMVwiXSwgW2RhdGEtd3BiYy1jYWxlbmRhci1wcmV2aWV3PVwiMVwiXSAud3BiY19jYWxlbmRhcl93cmFwZXInIClcclxuXHRcdFx0LnRvZ2dsZUNsYXNzKCAnd3BiY19jaGFuZ2Vfb3Zlcl90cmlhbmdsZScsIGlzX2VuYWJsZWQgKTtcclxuXHRcdCQoICdbZGF0YS13cGJjLWNhbGVuZGFyLXByZXZpZXc9XCIxXCJdIC53cGJjX2NhbGVuZGFyX2xlZ2VuZF90YWJsZV93aWR0aF9oZWlnaHQnICkucGFyZW50KCAnc3BhbicgKVxyXG5cdFx0XHQudG9nZ2xlQ2xhc3MoICd3cGJjX2NoYW5nZV9vdmVyX3RyaWFuZ2xlJywgaXNfZW5hYmxlZCApO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc3luY19tb2JpbGVfbW9udGhzX3ByZXZpZXcoIHJlc291cmNlX2lkLCBwYXlsb2FkICkge1xyXG5cdFx0dmFyIGRhdGEgPSBwYXlsb2FkIHx8IGNvbGxlY3RfcGF5bG9hZCgpO1xyXG5cdFx0dmFyIGFsbG93X21vYmlsZV9tb250aHMgPSBkYXRhLmJvb2tpbmdfY2FsZW5kYXJfYWxsb3dfc2V2ZXJhbF9tb250aHNfb25fbW9iaWxlID09PSAnT24nO1xyXG5cdFx0dmFyIG1vbnRoc19jb3VudCA9IGdldF9tb250aHNfY291bnQoKSB8fCAzO1xyXG5cclxuXHRcdGlmICggISByZXNvdXJjZV9pZCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdy5fd3BiYyAmJiB0eXBlb2Ygdy5fd3BiYy5zZXRfb3RoZXJfcGFyYW0gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHcuX3dwYmMuc2V0X290aGVyX3BhcmFtKCAnaXNfYWxsb3dfc2V2ZXJhbF9tb250aHNfb25fbW9iaWxlJywgYWxsb3dfbW9iaWxlX21vbnRocyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggYWxsb3dfbW9iaWxlX21vbnRocyAmJiB0eXBlb2Ygdy53cGJjX2NhbGVuZGFyX191cGRhdGVfbW9udGhzX251bWJlciA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy53cGJjX2NhbGVuZGFyX191cGRhdGVfbW9udGhzX251bWJlciggcmVzb3VyY2VfaWQsIG1vbnRoc19jb3VudCApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygdy53cGJjX2NhbGVuZGFyX19hdXRvX3VwZGF0ZV9tb250aHNfbnVtYmVyX19vbl9yZXNpemUgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHcud3BiY19jYWxlbmRhcl9fYXV0b191cGRhdGVfbW9udGhzX251bWJlcl9fb25fcmVzaXplKCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fSBlbHNlIGlmICggdHlwZW9mIHcud3BiY19jYWxlbmRhcl9fdXBkYXRlX21vbnRoc19udW1iZXIgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHcud3BiY19jYWxlbmRhcl9fdXBkYXRlX21vbnRoc19udW1iZXIoIHJlc291cmNlX2lkLCAkKCB3ICkud2lkdGgoKSA8PSA3ODIgPyAxIDogbW9udGhzX2NvdW50ICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBhcHBseV9zdGFuZGFyZF9kYXlzX3NlbGVjdGlvbiggcmVzb3VyY2VfaWQsIGRheXNfc2VsZWN0aW9uICkge1xyXG5cdFx0dmFyIGRzID0gZGF5c19zZWxlY3Rpb24gfHwge307XHJcblx0XHR2YXIgbW9kZSA9IFN0cmluZyggZHMuZGF5c19zZWxlY3RfbW9kZSB8fCAnbXVsdGlwbGUnICk7XHJcblx0XHR2YXIgZml4ZWRfd2Vla19kYXlzID0gcGFyc2VfbnVtYmVyX2xpc3QoIGRzLmZpeGVkX193ZWVrX2RheXNfX3N0YXJ0ICk7XHJcblx0XHR2YXIgZHluYW1pY19zcGVjaWZpYyA9IHBhcnNlX251bWJlcl9saXN0KCBkcy5keW5hbWljX19kYXlzX3NwZWNpZmljICk7XHJcblx0XHR2YXIgZHluYW1pY193ZWVrX2RheXMgPSBwYXJzZV9udW1iZXJfbGlzdCggZHMuZHluYW1pY19fd2Vla19kYXlzX19zdGFydCApO1xyXG5cclxuXHRcdGZpeGVkX3dlZWtfZGF5cyA9IGZpeGVkX3dlZWtfZGF5cy5sZW5ndGggPyBmaXhlZF93ZWVrX2RheXMgOiBbIC0xIF07XHJcblx0XHRkeW5hbWljX3dlZWtfZGF5cyA9IGR5bmFtaWNfd2Vla19kYXlzLmxlbmd0aCA/IGR5bmFtaWNfd2Vla19kYXlzIDogWyAtMSBdO1xyXG5cclxuXHRcdGlmICggJ3NpbmdsZScgPT09IG1vZGUgJiYgdHlwZW9mIHcud3BiY19jYWxfZGF5c19zZWxlY3RfX3NpbmdsZSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy53cGJjX2NhbF9kYXlzX3NlbGVjdF9fc2luZ2xlKCByZXNvdXJjZV9pZCApO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICdtdWx0aXBsZScgPT09IG1vZGUgJiYgdHlwZW9mIHcud3BiY19jYWxfZGF5c19zZWxlY3RfX211bHRpcGxlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHR3LndwYmNfY2FsX2RheXNfc2VsZWN0X19tdWx0aXBsZSggcmVzb3VyY2VfaWQgKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAnZml4ZWQnID09PSBtb2RlICYmIHR5cGVvZiB3LndwYmNfY2FsX2RheXNfc2VsZWN0X19maXhlZCA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy53cGJjX2NhbF9kYXlzX3NlbGVjdF9fZml4ZWQoXHJcblx0XHRcdFx0cmVzb3VyY2VfaWQsXHJcblx0XHRcdFx0bm9ybWFsaXplX2ZpeGVkX3JhbmdlX2RheXNfY291bnQoIGRzLmZpeGVkX19kYXlzX251bSApLFxuXHRcdFx0XHRmaXhlZF93ZWVrX2RheXNcclxuXHRcdFx0KTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAnZHluYW1pYycgPT09IG1vZGUgJiYgdHlwZW9mIHcud3BiY19jYWxfZGF5c19zZWxlY3RfX3JhbmdlID09PSAnZnVuY3Rpb24nICkge1xyXG5cdFx0XHR3LndwYmNfY2FsX2RheXNfc2VsZWN0X19yYW5nZShcclxuXHRcdFx0XHRyZXNvdXJjZV9pZCxcclxuXHRcdFx0XHRwYXJzZUludCggZHMuZHluYW1pY19fZGF5c19taW4gfHwgMSwgMTAgKSxcclxuXHRcdFx0XHRwYXJzZUludCggZHMuZHluYW1pY19fZGF5c19tYXggfHwgMSwgMTAgKSxcclxuXHRcdFx0XHRkeW5hbWljX3NwZWNpZmljLFxyXG5cdFx0XHRcdGR5bmFtaWNfd2Vla19kYXlzXHJcblx0XHRcdCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFwcGx5X2NhbGVuZGFyX3NldHRpbmdzX3RvX2NhbGVuZGFyKCBkYXlzX3NlbGVjdGlvbiwgc2hvdWxkX3JlaW5pdCApIHtcclxuXHRcdHZhciByZXNvdXJjZV9pZCA9IGdldF9yZXNvdXJjZV9pZCgpO1xyXG5cdFx0dmFyIGRzID0gZGF5c19zZWxlY3Rpb24gfHwge307XHJcblx0XHR2YXIgcGF5bG9hZCA9IGNvbGxlY3RfcGF5bG9hZCgpO1xyXG5cdFx0dmFyIGZpeGVkX3dlZWtfZGF5cztcclxuXHRcdHZhciBkeW5hbWljX3NwZWNpZmljO1xyXG5cdFx0dmFyIGR5bmFtaWNfd2Vla19kYXlzO1xyXG5cdFx0dmFyICRjYWxlbmRhcjtcclxuXHJcblx0XHRpZiAoICEgcmVzb3VyY2VfaWQgfHwgISB3Ll93cGJjIHx8IHR5cGVvZiB3Ll93cGJjLmNhbGVuZGFyX19zZXRfcGFyYW1fdmFsdWUgIT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRmaXhlZF93ZWVrX2RheXMgPSBwYXJzZV9udW1iZXJfbGlzdCggZHMuZml4ZWRfX3dlZWtfZGF5c19fc3RhcnQgKTtcclxuXHRcdGR5bmFtaWNfc3BlY2lmaWMgPSBwYXJzZV9udW1iZXJfbGlzdCggZHMuZHluYW1pY19fZGF5c19zcGVjaWZpYyApO1xyXG5cdFx0ZHluYW1pY193ZWVrX2RheXMgPSBwYXJzZV9udW1iZXJfbGlzdCggZHMuZHluYW1pY19fd2Vla19kYXlzX19zdGFydCApO1xyXG5cclxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdib29raW5nX21heF9tb250aGVzX2luX2NhbGVuZGFyJywgU3RyaW5nKCBwYXlsb2FkLmJvb2tpbmdfbWF4X21vbnRoZXNfaW5fY2FsZW5kYXIgfHwgJzF5JyApICk7XHJcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnYm9va2luZ19zdGFydF9kYXlfd2VlZWsnLCBTdHJpbmcoIHBheWxvYWQuYm9va2luZ19zdGFydF9kYXlfd2VlZWsgfHwgJzAnICkgKTtcclxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdjYWxlbmRhcl9udW1iZXJfb2ZfbW9udGhzJywgU3RyaW5nKCBnZXRfbW9udGhzX2NvdW50KCkgfHwgMyApICk7XHJcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnY2FsZW5kYXJfc2Nyb2xsX3RvJywgZmFsc2UgKTtcclxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdpc19lbmFibGVkX2NoYW5nZV9vdmVyJywgcGF5bG9hZC5ib29raW5nX3JhbmdlX3NlbGVjdGlvbl90aW1lX2lzX2FjdGl2ZSA9PT0gJ09uJyApO1xyXG5cdFx0c2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwgJ2RheXNfc2VsZWN0X21vZGUnLCBTdHJpbmcoIGRzLmRheXNfc2VsZWN0X21vZGUgfHwgJ211bHRpcGxlJyApICk7XHJcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnZml4ZWRfX2RheXNfbnVtJywgbm9ybWFsaXplX2ZpeGVkX3JhbmdlX2RheXNfY291bnQoIGRzLmZpeGVkX19kYXlzX251bSApICk7XG5cdFx0c2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwgJ2ZpeGVkX193ZWVrX2RheXNfX3N0YXJ0JywgZml4ZWRfd2Vla19kYXlzLmxlbmd0aCA/IGZpeGVkX3dlZWtfZGF5cyA6IFsgLTEgXSApO1xyXG5cdFx0c2V0X2NhbGVuZGFyX3BhcmFtKCByZXNvdXJjZV9pZCwgJ2R5bmFtaWNfX2RheXNfbWluJywgcGFyc2VJbnQoIGRzLmR5bmFtaWNfX2RheXNfbWluIHx8IDEsIDEwICkgKTtcclxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkeW5hbWljX19kYXlzX21heCcsIHBhcnNlSW50KCBkcy5keW5hbWljX19kYXlzX21heCB8fCAxLCAxMCApICk7XHJcblx0XHRzZXRfY2FsZW5kYXJfcGFyYW0oIHJlc291cmNlX2lkLCAnZHluYW1pY19fZGF5c19zcGVjaWZpYycsIGR5bmFtaWNfc3BlY2lmaWMgKTtcclxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdkeW5hbWljX193ZWVrX2RheXNfX3N0YXJ0JywgZHluYW1pY193ZWVrX2RheXMubGVuZ3RoID8gZHluYW1pY193ZWVrX2RheXMgOiBbIC0xIF0gKTtcclxuXHRcdHNldF9jYWxlbmRhcl9wYXJhbSggcmVzb3VyY2VfaWQsICdib29raW5nX3JlY3VycmVudF90aW1lJywgZ2V0X2Zvcm0oKS5maW5kKCAnW25hbWU9XCJib29raW5nX3JlY3VycmVudF90aW1lXCJdJyApLnByb3AoICdjaGVja2VkJyApID8gJ09uJyA6ICdPZmYnICk7XHJcblxyXG5cdFx0aWYgKCB3Ll93cGJjICYmIHR5cGVvZiB3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0dy5fd3BiYy5zZXRfb3RoZXJfcGFyYW0oICdpc19lbmFibGVkX2NoYW5nZV9vdmVyJywgcGF5bG9hZC5ib29raW5nX3JhbmdlX3NlbGVjdGlvbl90aW1lX2lzX2FjdGl2ZSA9PT0gJ09uJyApO1xyXG5cdFx0XHR3Ll93cGJjLnNldF9vdGhlcl9wYXJhbSggJ2lzX2FsbG93X3NldmVyYWxfbW9udGhzX29uX21vYmlsZScsIHBheWxvYWQuYm9va2luZ19jYWxlbmRhcl9hbGxvd19zZXZlcmFsX21vbnRoc19vbl9tb2JpbGUgPT09ICdPbicgKTtcclxuXHRcdH1cclxuXHJcblx0XHRzeW5jX2NoYW5nZW92ZXJfcHJldmlld19jbGFzcyggcGF5bG9hZCApO1xyXG5cdFx0c3luY19tb2JpbGVfbW9udGhzX3ByZXZpZXcoIHJlc291cmNlX2lkLCBwYXlsb2FkICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygdy53cGJjX19jb25kaXRpb25zX19TQVZFX0lOSVRJQUxfX2RheXNfc2VsZWN0aW9uX3BhcmFtc19fYm0gPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHcud3BiY19fY29uZGl0aW9uc19fU0FWRV9JTklUSUFMX19kYXlzX3NlbGVjdGlvbl9wYXJhbXNfX2JtKCByZXNvdXJjZV9pZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRjYWxlbmRhciA9ICQoICcjY2FsZW5kYXJfYm9va2luZycgKyByZXNvdXJjZV9pZCApO1xyXG5cdFx0aWYgKCBzaG91bGRfcmVpbml0ICYmICRjYWxlbmRhci5sZW5ndGggJiYgYXBwbHlfc3RhbmRhcmRfZGF5c19zZWxlY3Rpb24oIHJlc291cmNlX2lkLCBkcyApICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBzaG91bGRfcmVpbml0ICYmICRjYWxlbmRhci5sZW5ndGggJiYgdHlwZW9mIHcud3BiY19jYWxfX3JlX2luaXQgPT09ICdmdW5jdGlvbicgKSB7XHJcblx0XHRcdHcud3BiY19jYWxfX3JlX2luaXQoIHJlc291cmNlX2lkICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzY2hlZHVsZV9jYWxlbmRhcl9zZXR0aW5nc19hcHBseSggZGF5c19zZWxlY3Rpb24gKSB7XHJcblx0XHQkLmVhY2goIFsgMCwgMTIwLCA0MjAsIDkwMCwgMTQwMCBdLCBmdW5jdGlvbiAoIGluZGV4LCBkZWxheSApIHtcclxuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGFwcGx5X2NhbGVuZGFyX3NldHRpbmdzX3RvX2NhbGVuZGFyKCBkYXlzX3NlbGVjdGlvbiB8fCBnZXRfZGF5c19zZWxlY3Rpb25fZnJvbV9mb3JtKCksIHRydWUgKTtcclxuXHRcdFx0fSwgZGVsYXkgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdldF9kYXlzX3NlbGVjdGlvbl9mcm9tX2Zvcm0oKSB7XHJcblx0XHR2YXIgZGF0YSA9IGNvbGxlY3RfcGF5bG9hZCgpO1xyXG5cdFx0dmFyIG1vZGUgPSBkYXRhLmJvb2tpbmdfdHlwZV9vZl9kYXlfc2VsZWN0aW9ucyA9PT0gJ3JhbmdlJ1xuXHRcdFx0PyAoIGlzX3JhbmdlX3N1cHBvcnRlZCgpID8gZGF0YS5ib29raW5nX3JhbmdlX3NlbGVjdGlvbl90eXBlIDogJ2R5bmFtaWMnIClcblx0XHRcdDogZGF0YS5ib29raW5nX3R5cGVfb2ZfZGF5X3NlbGVjdGlvbnM7XG5cdFx0dmFyIGZpeGVkX2RheXMgPSBkYXRhLmJvb2tpbmdfcmFuZ2Vfc3RhcnRfZGF5X21vZGUgPT09ICctMScgPyAnLTEnIDogKCBkYXRhLmJvb2tpbmdfcmFuZ2Vfc3RhcnRfZGF5X3dlZWtkYXlzIHx8ICctMScgKTtcclxuXHRcdHZhciBkeW5hbWljX2RheXMgPSBkYXRhLmJvb2tpbmdfcmFuZ2Vfc3RhcnRfZGF5X2R5bmFtaWNfbW9kZSA9PT0gJy0xJyA/ICctMScgOiAoIGRhdGEuYm9va2luZ19yYW5nZV9zdGFydF9kYXlfZHluYW1pY193ZWVrZGF5cyB8fCAnLTEnICk7XHJcblxyXG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCBmaXhlZF9kYXlzICkgKSB7XHJcblx0XHRcdGZpeGVkX2RheXMgPSBmaXhlZF9kYXlzLmpvaW4oICcsJyApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCBkeW5hbWljX2RheXMgKSApIHtcclxuXHRcdFx0ZHluYW1pY19kYXlzID0gZHluYW1pY19kYXlzLmpvaW4oICcsJyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGRheXNfc2VsZWN0X21vZGU6IG1vZGUgfHwgJ211bHRpcGxlJyxcclxuXHRcdFx0Zml4ZWRfX2RheXNfbnVtOiBub3JtYWxpemVfZml4ZWRfcmFuZ2VfZGF5c19jb3VudCggZGF0YS5ib29raW5nX3JhbmdlX3NlbGVjdGlvbl9kYXlzX2NvdW50ICksXG5cdFx0XHRmaXhlZF9fd2Vla19kYXlzX19zdGFydDogZml4ZWRfZGF5cyB8fCAnLTEnLFxyXG5cdFx0XHRkeW5hbWljX19kYXlzX21pbjogcGFyc2VJbnQoIGRhdGEuYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fZGF5c19jb3VudF9keW5hbWljIHx8IDEsIDEwICksXHJcblx0XHRcdGR5bmFtaWNfX2RheXNfbWF4OiBwYXJzZUludCggZGF0YS5ib29raW5nX3JhbmdlX3NlbGVjdGlvbl9kYXlzX21heF9jb3VudF9keW5hbWljIHx8IDEsIDEwICksXHJcblx0XHRcdGR5bmFtaWNfX2RheXNfc3BlY2lmaWM6IGRhdGEuYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fZGF5c19zcGVjaWZpY19udW1fZHluYW1pYyB8fCAnJyxcclxuXHRcdFx0ZHluYW1pY19fd2Vla19kYXlzX19zdGFydDogZHluYW1pY19kYXlzIHx8ICctMSdcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZWZyZXNoX2NvbmRpdGlvbmFsX2NvbnRyb2xzKCkge1xyXG5cdFx0dmFyICRmb3JtID0gZ2V0X2Zvcm0oKTtcclxuXHRcdHZhciBkYXlfbW9kZSA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfdHlwZV9vZl9kYXlfc2VsZWN0aW9uc1wiXTpjaGVja2VkJyApLnZhbCgpIHx8ICdtdWx0aXBsZSc7XHJcblx0XHR2YXIgcmFuZ2VfdHlwZSA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfcmFuZ2Vfc2VsZWN0aW9uX3R5cGVcIl06Y2hlY2tlZCcgKS52YWwoKSB8fCAnZHluYW1pYyc7XHJcblx0XHR2YXIgZml4ZWRfc3RhcnQgPSAkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3JhbmdlX3N0YXJ0X2RheV9tb2RlXCJdOmNoZWNrZWQnICkudmFsKCkgfHwgJy0xJztcclxuXHRcdHZhciBkeW5hbWljX3N0YXJ0ID0gJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19yYW5nZV9zdGFydF9kYXlfZHluYW1pY19tb2RlXCJdOmNoZWNrZWQnICkudmFsKCkgfHwgJy0xJztcclxuXHRcdHZhciBpc19jaGFuZ2VvdmVyID0gJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fdGltZV9pc19hY3RpdmVcIl0nICkucHJvcCggJ2NoZWNrZWQnICk7XHJcblx0XHR2YXIgaXNfbGVnZW5kID0gJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19pc19zaG93X2xlZ2VuZFwiXScgKS5wcm9wKCAnY2hlY2tlZCcgKTtcclxuXHRcdHZhciBpc190aW1lc2xvdF90b29sdGlwID0gJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19zaG93X3RpbWVzbG90c19pbl90b29sdGlwXCJdJyApLnByb3AoICdjaGVja2VkJyApO1xyXG5cdFx0dmFyIGlzX2F2YWlsYWJpbGl0eV90b29sdGlwID0gJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19pc19zaG93X2F2YWlsYWJpbGl0eV9pbl90b29sdGlwc1wiXScgKS5wcm9wKCAnY2hlY2tlZCcgKTtcclxuXHRcdHZhciBpc19hdmFpbGFiaWxpdHlfY2VsbCA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfaXNfc2hvd19hdmFpbGFiaWxpdHlfaW5fZGF0ZV9jZWxsXCJdJyApLnByb3AoICdjaGVja2VkJyApO1xyXG5cdFx0dmFyIGlzX2Nvc3RfdG9vbHRpcCA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfaXNfc2hvd19jb3N0X2luX3Rvb2x0aXBzXCJdJyApLnByb3AoICdjaGVja2VkJyApO1xyXG5cdFx0dmFyIGlzX2Nvc3RfY2VsbCA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfaXNfc2hvd19jb3N0X2luX2RhdGVfY2VsbFwiXScgKS5wcm9wKCAnY2hlY2tlZCcgKTtcclxuXHRcdHZhciBpc19ib29rZWRfdG9vbHRpcCA9ICRmb3JtLmZpbmQoICdbbmFtZT1cImJvb2tpbmdfaXNfc2hvd19ib29rZWRfZGF0YV9pbl90b29sdGlwc1wiXScgKS5wcm9wKCAnY2hlY2tlZCcgKTtcclxuXHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1yYW5nZS1zZXR0aW5ncz1cIjFcIl0nICkudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgZGF5X21vZGUgPT09ICdyYW5nZScgKTtcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1yYW5nZS11cGdyYWRlLW5vdGU9XCIxXCJdJyApLnRvZ2dsZUNsYXNzKCAnaXMtdmlzaWJsZScsIGRheV9tb2RlID09PSAncmFuZ2UnICYmICEgaXNfcmFuZ2Vfc3VwcG9ydGVkKCkgKTtcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1yYW5nZS10eXBlXScgKS5yZW1vdmVDbGFzcyggJ2lzLXZpc2libGUnICk7XHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1yYW5nZS10eXBlPVwiJyArIHJhbmdlX3R5cGUgKyAnXCJdJyApLmFkZENsYXNzKCAnaXMtdmlzaWJsZScgKTtcclxuXHRcdCQoICdbZGF0YS13cGJjLWNhbGVuZGFyLXdlZWtkYXktY2hlY2tzPVwiYm9va2luZ19yYW5nZV9zdGFydF9kYXlfd2Vla2RheXNcIl0nICkudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgZml4ZWRfc3RhcnQgIT09ICctMScgKTtcclxuXHRcdCQoICdbZGF0YS13cGJjLWNhbGVuZGFyLXdlZWtkYXktY2hlY2tzPVwiYm9va2luZ19yYW5nZV9zdGFydF9kYXlfZHluYW1pY193ZWVrZGF5c1wiXScgKS50b2dnbGVDbGFzcyggJ2lzLXZpc2libGUnLCBkeW5hbWljX3N0YXJ0ICE9PSAnLTEnICk7XHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1jaGFuZ2VvdmVyLXNldHRpbmdzPVwiMVwiXScgKS50b2dnbGVDbGFzcyggJ2lzLXZpc2libGUnLCAhISBpc19jaGFuZ2VvdmVyICk7XHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1sZWdlbmQtc2V0dGluZ3M9XCIxXCJdJyApLnRvZ2dsZUNsYXNzKCAnaXMtdmlzaWJsZScsICEhIGlzX2xlZ2VuZCApO1xyXG5cdFx0JCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItdGltZXNsb3QtdG9vbHRpcC1zZXR0aW5ncz1cIjFcIl0nICkudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgISEgaXNfdGltZXNsb3RfdG9vbHRpcCApO1xyXG5cdFx0JCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItYXZhaWxhYmlsaXR5LXRvb2x0aXAtc2V0dGluZ3M9XCIxXCJdJyApLnRvZ2dsZUNsYXNzKCAnaXMtdmlzaWJsZScsICEhIGlzX2F2YWlsYWJpbGl0eV90b29sdGlwICk7XHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1hdmFpbGFiaWxpdHktY2VsbC1zZXR0aW5ncz1cIjFcIl0nICkudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgISEgaXNfYXZhaWxhYmlsaXR5X2NlbGwgKTtcclxuXHRcdCQoICdbZGF0YS13cGJjLWNhbGVuZGFyLWNvc3QtdG9vbHRpcC1zZXR0aW5ncz1cIjFcIl0nICkudG9nZ2xlQ2xhc3MoICdpcy12aXNpYmxlJywgISEgaXNfY29zdF90b29sdGlwICk7XHJcblx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1jb3N0LWNlbGwtc2V0dGluZ3M9XCIxXCJdJyApLnRvZ2dsZUNsYXNzKCAnaXMtdmlzaWJsZScsICEhIGlzX2Nvc3RfY2VsbCApO1xyXG5cdFx0JCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItYm9va2VkLXRvb2x0aXAtc2V0dGluZ3M9XCIxXCJdJyApLnRvZ2dsZUNsYXNzKCAnaXMtdmlzaWJsZScsICEhIGlzX2Jvb2tlZF90b29sdGlwICk7XHJcblxyXG5cdFx0aWYgKCBpc19jaGFuZ2VvdmVyICkge1xyXG5cdFx0XHQkZm9ybS5maW5kKCAnW25hbWU9XCJib29raW5nX3JlY3VycmVudF90aW1lXCJdLCBbbmFtZT1cImJvb2tpbmdfbGFzdF9jaGVja291dF9kYXlfYXZhaWxhYmxlXCJdJyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcclxuXHRcdH1cclxuXHRcdGlmICggJGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19yZWN1cnJlbnRfdGltZVwiXScgKS5wcm9wKCAnY2hlY2tlZCcgKSApIHtcclxuXHRcdFx0JGZvcm0uZmluZCggJ1tuYW1lPVwiYm9va2luZ19yYW5nZV9zZWxlY3Rpb25fdGltZV9pc19hY3RpdmVcIl0nICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xyXG5cdFx0XHQkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1jaGFuZ2VvdmVyLXNldHRpbmdzPVwiMVwiXScgKS5yZW1vdmVDbGFzcyggJ2lzLXZpc2libGUnICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRfY2FsZW5kYXJfbG9hZGluZyggaXNfbG9hZGluZyApIHtcclxuXHRcdHZhciAkcGFuZWwgPSAkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1wYW5lbD1cIjFcIl0nICk7XHJcblxyXG5cdFx0JHBhbmVsLnRvZ2dsZUNsYXNzKCAnaXMtbG9hZGluZycsICEhIGlzX2xvYWRpbmcgKTtcclxuXHRcdCRwYW5lbC5maW5kKCAnLndwYmNfY2FsZW5kYXJfc2V0dGluZ3NfbG9hZGluZycgKS5yZW1vdmUoKTtcclxuXHJcblx0XHRpZiAoIGlzX2xvYWRpbmcgKSB7XHJcblx0XHRcdCRwYW5lbC5hcHBlbmQoXHJcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ3cGJjX2NhbGVuZGFyX2xvYWRpbmcgd3BiY19jYWxlbmRhcl9zZXR0aW5nc19sb2FkaW5nXCI+JyArXHJcblx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJ3cGJjX2ljbl9hdXRvcmVuZXcgd3BiY19hbmltYXRpb25fc3BpblwiPjwvc3Bhbj4mbmJzcDsnICtcclxuXHRcdFx0XHRcdHRyaW1fdGV4dCggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ubG9hZGluZyA/IGNmZy5pMThuLmxvYWRpbmcgOiAnTG9hZGluZycgKSArXHJcblx0XHRcdFx0JzwvZGl2PidcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJlZnJlc2hfcHJldmlldygpIHtcblx0XHR2YXIgZGF0YSA9IGNvbGxlY3RfcGF5bG9hZCgpO1xuXHRcdHZhciBzaWduYXR1cmU7XG5cblx0XHRpZiAoIGlzX3NhdmluZyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkYXRhLmFjdGlvbiA9IGNmZy5wcmV2aWV3X2FjdGlvbjtcblx0XHRkYXRhLm5vbmNlID0gY2ZnLm5vbmNlO1xuXHRcdHNpZ25hdHVyZSA9IEpTT04uc3RyaW5naWZ5KCBkYXRhICk7XHJcblx0XHRpZiAoIHNpZ25hdHVyZSA9PT0gbGFzdF9wcmV2aWV3X3NpZ25hdHVyZSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggcHJldmlld19hamF4ICYmIHByZXZpZXdfYWpheC5yZWFkeVN0YXRlICE9PSA0ICkge1xyXG5cdFx0XHRwcmV2aWV3X2FqYXguYWJvcnQoKTtcclxuXHRcdH1cclxuXHRcdGxhc3RfcHJldmlld19zaWduYXR1cmUgPSBzaWduYXR1cmU7XHJcblxyXG5cdFx0c2V0X2NhbGVuZGFyX2xvYWRpbmcoIHRydWUgKTtcclxuXHRcdHByZXZpZXdfYWpheCA9ICQucG9zdCggY2ZnLmFqYXhfdXJsLCBkYXRhIClcclxuXHRcdFx0LmRvbmUoIGZ1bmN0aW9uICggcmVzcG9uc2UgKSB7XHJcblx0XHRcdFx0aWYgKCByZXNwb25zZSAmJiByZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5odG1sICkge1xyXG5cdFx0XHRcdFx0JCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItcHJldmlldz1cIjFcIl0nICkucmVwbGFjZVdpdGgoIHJlc3BvbnNlLmRhdGEuaHRtbCApO1xyXG5cdFx0XHRcdFx0Y2ZnLmRheXNfc2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5kYXlzX3NlbGVjdGlvbiB8fCBnZXRfZGF5c19zZWxlY3Rpb25fZnJvbV9mb3JtKCk7XHJcblx0XHRcdFx0XHRzY2hlZHVsZV9jYWxlbmRhcl9zZXR0aW5nc19hcHBseSggY2ZnLmRheXNfc2VsZWN0aW9uICk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRzaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubWVzc2FnZSA/IHJlc3BvbnNlLmRhdGEubWVzc2FnZSA6ICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgPyBjZmcuaTE4bi5wcmV2aWV3X2ZhaWxlZCA6ICdVbmFibGUgdG8gcmVmcmVzaCBjYWxlbmRhciBwcmV2aWV3LicgKSxcclxuXHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHQxMDAwMFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gKVxyXG5cdFx0XHQuZmFpbCggZnVuY3Rpb24gKCB4aHIsIHRleHRfc3RhdHVzICkge1xyXG5cdFx0XHRcdGlmICggJ2Fib3J0JyA9PT0gdGV4dF9zdGF0dXMgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxhc3RfcHJldmlld19zaWduYXR1cmUgPSAnJztcclxuXHRcdFx0XHRzaG93X21lc3NhZ2UoIGNmZy5pMThuICYmIGNmZy5pMThuLnByZXZpZXdfZmFpbGVkID8gY2ZnLmkxOG4ucHJldmlld19mYWlsZWQgOiAnVW5hYmxlIHRvIHJlZnJlc2ggY2FsZW5kYXIgcHJldmlldy4nLCAnZXJyb3InLCAxMDAwMCApO1xyXG5cdFx0XHR9IClcclxuXHRcdFx0LmFsd2F5cyggZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHNldF9jYWxlbmRhcl9sb2FkaW5nKCBmYWxzZSApO1xyXG5cdFx0XHR9ICk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goIGRlbGF5ICkge1xuXHRcdGNsZWFyVGltZW91dCggcHJldmlld190aW1lciApO1xuXHRcdGlmICggaXNfc2F2aW5nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwcmV2aWV3X3RpbWVyID0gc2V0VGltZW91dCggcmVmcmVzaF9wcmV2aWV3LCB0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInID8gZGVsYXkgOiAxODAgKTtcblx0fVxuXHJcblx0ZnVuY3Rpb24gaXNfdGV4dF90eXBpbmdfZmllbGQoIGZpZWxkICkge1xyXG5cdFx0dmFyIHRhZ19uYW1lID0gU3RyaW5nKCBmaWVsZCAmJiBmaWVsZC50YWdOYW1lID8gZmllbGQudGFnTmFtZSA6ICcnICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdHZhciBpbnB1dF90eXBlID0gU3RyaW5nKCBmaWVsZCAmJiBmaWVsZC50eXBlID8gZmllbGQudHlwZSA6ICcnICkudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHQndGV4dGFyZWEnID09PSB0YWdfbmFtZSB8fFxyXG5cdFx0XHQoICdpbnB1dCcgPT09IHRhZ19uYW1lICYmIC0xICE9PSAkLmluQXJyYXkoIGlucHV0X3R5cGUsIFsgJ3RleHQnLCAnbnVtYmVyJywgJ3NlYXJjaCcsICdlbWFpbCcsICd1cmwnLCAndGVsJyBdICkgKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGlzX2Z1bGxfcHJldmlld19vbmx5X2ZpZWxkKCBmaWVsZF9uYW1lICkge1xyXG5cdFx0ZmllbGRfbmFtZSA9IFN0cmluZyggZmllbGRfbmFtZSB8fCAnJyApLnJlcGxhY2UoIC9cXFtcXF0kLywgJycgKTtcclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHQnYm9va2luZ19pc19zaG93X2xlZ2VuZCcgPT09IGZpZWxkX25hbWUgfHxcclxuXHRcdFx0MCA9PT0gZmllbGRfbmFtZS5pbmRleE9mKCAnYm9va2luZ19sZWdlbmRfJyApIHx8XHJcblx0XHRcdCdib29raW5nX3Nob3dfdGltZXNsb3RzX2luX3Rvb2x0aXAnID09PSBmaWVsZF9uYW1lIHx8XHJcblx0XHRcdCdib29raW5nX2Rpc2FibGVfdGltZXNsb3RzX2luX3Rvb2x0aXAnID09PSBmaWVsZF9uYW1lIHx8XHJcblx0XHRcdDAgPT09IGZpZWxkX25hbWUuaW5kZXhPZiggJ2Jvb2tpbmdfaGlnaGxpZ2h0XycgKSB8fFxyXG5cdFx0XHQnYm9va2luZ19pc19zaG93X2F2YWlsYWJpbGl0eV9pbl90b29sdGlwcycgPT09IGZpZWxkX25hbWUgfHxcclxuXHRcdFx0J2Jvb2tpbmdfaXNfc2hvd19hdmFpbGFiaWxpdHlfaW5fZGF0ZV9jZWxsJyA9PT0gZmllbGRfbmFtZSB8fFxyXG5cdFx0XHQnYm9va2luZ19pc19zaG93X2Nvc3RfaW5fdG9vbHRpcHMnID09PSBmaWVsZF9uYW1lIHx8XHJcblx0XHRcdCdib29raW5nX2lzX3Nob3dfY29zdF9pbl9kYXRlX2NlbGwnID09PSBmaWVsZF9uYW1lIHx8XHJcblx0XHRcdCdib29raW5nX2Nvc3RfaW5fZGF0ZV9jZWxsX2N1cnJlbmN5JyA9PT0gZmllbGRfbmFtZSB8fFxyXG5cdFx0XHQnYm9va2luZ19pc19zaG93X2Jvb2tlZF9kYXRhX2luX3Rvb2x0aXBzJyA9PT0gZmllbGRfbmFtZSB8fFxyXG5cdFx0XHQnYm9va2luZ19ib29rZWRfZGF0YV9pbl90b29sdGlwcycgPT09IGZpZWxkX25hbWVcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBhcHBseV9jYWxlbmRhcl9zZXR0aW5nc19zYWZlbHkoIGRheXNfc2VsZWN0aW9uICkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0YXBwbHlfY2FsZW5kYXJfc2V0dGluZ3NfdG9fY2FsZW5kYXIoIGRheXNfc2VsZWN0aW9uLCB0cnVlICk7XHJcblx0XHR9IGNhdGNoICggZXJyb3IgKSB7XHJcblx0XHRcdGlmICggdy5jb25zb2xlICYmIHR5cGVvZiB3LmNvbnNvbGUud2FybiA9PT0gJ2Z1bmN0aW9uJyApIHtcclxuXHRcdFx0XHR3LmNvbnNvbGUud2FybiggJ1tXUEJDXSBDYWxlbmRhciBTZXR0aW5ncyBwcmV2aWV3IGFwcGx5IGZhaWxlZDsgZnVsbCBwcmV2aWV3IHJlZnJlc2ggd2lsbCBjb250aW51ZS4nLCBlcnJvciApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzYXZlX3NldHRpbmdzKCkge1xuXHRcdHZhciAkYnV0dG9uID0gJCggJ1tkYXRhLXdwYmMtY2FsZW5kYXItc2F2ZT1cIjFcIl0nICk7XG5cdFx0dmFyIG9yaWdpbmFsX3RleHQgPSAkYnV0dG9uLmRhdGEoICd3cGJjLW9yaWdpbmFsLXRleHQnICk7XG5cdFx0dmFyIGRhdGEgPSBjb2xsZWN0X3BheWxvYWQoKTtcblxuXHRcdGlmICggISBvcmlnaW5hbF90ZXh0ICkge1xyXG5cdFx0XHRvcmlnaW5hbF90ZXh0ID0gJGJ1dHRvbi5odG1sKCk7XHJcblx0XHRcdCRidXR0b24uZGF0YSggJ3dwYmMtb3JpZ2luYWwtdGV4dCcsIG9yaWdpbmFsX3RleHQgKTtcclxuXHRcdH1cclxuXG5cdFx0ZGF0YS5hY3Rpb24gPSBjZmcuYWN0aW9uO1xuXHRcdGRhdGEubm9uY2UgPSBjZmcubm9uY2U7XG5cblx0XHRpc19zYXZpbmcgPSB0cnVlO1xuXHRcdGNsZWFyVGltZW91dCggcHJldmlld190aW1lciApO1xuXHRcdGlmICggcHJldmlld19hamF4ICYmIHByZXZpZXdfYWpheC5yZWFkeVN0YXRlICE9PSA0ICkge1xuXHRcdFx0cHJldmlld19hamF4LmFib3J0KCk7XG5cdFx0fVxuXHRcdHByZXZpZXdfYWpheCA9IG51bGw7XG5cdFx0bGFzdF9wcmV2aWV3X3NpZ25hdHVyZSA9ICcnO1xuXHRcdHNldF9jYWxlbmRhcl9sb2FkaW5nKCBmYWxzZSApO1xuXG5cdFx0JGJ1dHRvbi5hZGRDbGFzcyggJ2Rpc2FibGVkJyApLmF0dHIoICdhcmlhLWRpc2FibGVkJywgJ3RydWUnICk7XG5cdFx0JGJ1dHRvbi5maW5kKCAnLmluLWJ1dHRvbi10ZXh0JyApLmh0bWwoICcmbmJzcDsmbmJzcDsnICsgdHJpbV90ZXh0KCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZpbmcgPyBjZmcuaTE4bi5zYXZpbmcgOiAnU2F2aW5nJyApICsgJy4uLicgKTtcblxuXHRcdCQucG9zdCggY2ZnLmFqYXhfdXJsLCBkYXRhIClcblx0XHRcdC5kb25lKCBmdW5jdGlvbiAoIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHJlc3BvbnNlICYmIHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0c2hvd19tZXNzYWdlKCByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubWVzc2FnZSA/IHJlc3BvbnNlLmRhdGEubWVzc2FnZSA6ICggY2ZnLmkxOG4gJiYgY2ZnLmkxOG4uc2F2ZWQgPyBjZmcuaTE4bi5zYXZlZCA6ICdTYXZlZCcgKSwgJ3N1Y2Nlc3MnLCAzMDAwICk7XG5cdFx0XHRcdFx0Y2ZnLnNldHRpbmdzID0gcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLnNldHRpbmdzID8gcmVzcG9uc2UuZGF0YS5zZXR0aW5ncyA6IGNmZy5zZXR0aW5ncztcblx0XHRcdFx0XHRjZmcuZGF5c19zZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuZGF5c19zZWxlY3Rpb24gPyByZXNwb25zZS5kYXRhLmRheXNfc2VsZWN0aW9uIDogZ2V0X2RheXNfc2VsZWN0aW9uX2Zyb21fZm9ybSgpO1xuXHRcdFx0XHRcdHNjaGVkdWxlX2NhbGVuZGFyX3NldHRpbmdzX2FwcGx5KCBjZmcuZGF5c19zZWxlY3Rpb24gKTtcblx0XHRcdFx0XHQkKCBkb2N1bWVudCApLnRyaWdnZXIoICd3cGJjOnNldHVwLXdpemFyZDpzdGVwLXNhdmVkJywgWyAnZGF0ZV9zZWxlY3Rpb24nIF0gKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxyXG5cdFx0XHRcdHNob3dfbWVzc2FnZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5tZXNzYWdlID8gcmVzcG9uc2UuZGF0YS5tZXNzYWdlIDogKCBjZmcuaTE4biAmJiBjZmcuaTE4bi5zYXZlX2ZhaWxlZCA/IGNmZy5pMThuLnNhdmVfZmFpbGVkIDogJ1VuYWJsZSB0byBzYXZlIGNhbGVuZGFyIHNldHRpbmdzLicgKSxcclxuXHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHQxMDAwMFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApXG5cdFx0XHQuZmFpbCggZnVuY3Rpb24gKCB4aHIsIHRleHRfc3RhdHVzICkge1xuXHRcdFx0XHR2YXIgbWVzc2FnZTtcblxuXHRcdFx0XHRpZiAoICdhYm9ydCcgPT09IHRleHRfc3RhdHVzICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1lc3NhZ2UgPSB4aHIgJiYgeGhyLnJlc3BvbnNlSlNPTiAmJiB4aHIucmVzcG9uc2VKU09OLmRhdGEgJiYgeGhyLnJlc3BvbnNlSlNPTi5kYXRhLm1lc3NhZ2Vcblx0XHRcdFx0XHQ/IHhoci5yZXNwb25zZUpTT04uZGF0YS5tZXNzYWdlXG5cdFx0XHRcdFx0OiAoIGNmZy5pMThuICYmIGNmZy5pMThuLnNhdmVfZmFpbGVkID8gY2ZnLmkxOG4uc2F2ZV9mYWlsZWQgOiAnVW5hYmxlIHRvIHNhdmUgY2FsZW5kYXIgc2V0dGluZ3MuJyApO1xuXG5cdFx0XHRcdHNob3dfbWVzc2FnZSggbWVzc2FnZSwgJ2Vycm9yJywgMTAwMDAgKTtcblx0XHRcdH0gKVxuXHRcdFx0LmFsd2F5cyggZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpc19zYXZpbmcgPSBmYWxzZTtcblx0XHRcdFx0JGJ1dHRvbi5yZW1vdmVDbGFzcyggJ2Rpc2FibGVkJyApLnJlbW92ZUF0dHIoICdhcmlhLWRpc2FibGVkJyApLmh0bWwoIG9yaWdpbmFsX3RleHQgKTtcblx0XHRcdH0gKTtcblx0fVxuXHJcblx0ZnVuY3Rpb24gYmluZF9ldmVudHMoKSB7XHJcblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLndwYmNfY2FsZW5kYXJfcmlnaHRiYXJfdGFicyBbcm9sZT1cInRhYlwiXScsIGZ1bmN0aW9uICggZXZlbnQgKSB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdHN3aXRjaF9wYW5lbCggJCggdGhpcyApICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy53cGJjX2NhbGVuZGFyX3ByZW1pdW1fZGlzbWlzcyBhJywgZnVuY3Rpb24gKCBldmVudCApIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy53cGJjX2NhbGVuZGFyX3JpZ2h0YmFyX3BhbmVscyAud3BiY191aV9fY29sbGFwc2libGVfZ3JvdXAgPiAuZ3JvdXBfX2hlYWRlcicsIGZ1bmN0aW9uICggZXZlbnQgKSB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdHRvZ2dsZV9ncm91cCggJCggdGhpcyApICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtY2FsZW5kYXItc2F2ZT1cIjFcIl0nLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xyXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRpZiAoICEgJCggdGhpcyApLmhhc0NsYXNzKCAnZGlzYWJsZWQnICkgKSB7XHJcblx0XHRcdFx0c2F2ZV9zZXR0aW5ncygpO1xyXG5cdFx0XHR9XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJ1tkYXRhLXdwYmMtY2FsZW5kYXItcHJlbWl1bS1yYW5nZS1pbmZvPVwiMVwiXSwgW2RhdGEtd3BiYy1jYWxlbmRhci1wcmVtaXVtLWNoYW5nZW92ZXItaW5mbz1cIjFcIl0nLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xyXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0aWYgKCAkKCB0aGlzICkuaXMoICdbZGF0YS13cGJjLWNhbGVuZGFyLXByZW1pdW0tY2hhbmdlb3Zlci1pbmZvPVwiMVwiXScgKSApIHtcblx0XHRcdFx0JCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZWZyZXNoX2NvbmRpdGlvbmFsX2NvbnRyb2xzKCk7XHJcblx0XHRcdHNob3dfcHJlbWl1bV9ub3RpY2UoICQoIHRoaXMgKSApO1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UgaW5wdXQnLCAnW2RhdGEtd3BiYy1jYWxlbmRhci1zZXR0aW5ncy1mb3JtPVwiMVwiXSBpbnB1dCwgW2RhdGEtd3BiYy1jYWxlbmRhci1zZXR0aW5ncy1mb3JtPVwiMVwiXSBzZWxlY3QsIFtkYXRhLXdwYmMtY2FsZW5kYXItc2V0dGluZ3MtZm9ybT1cIjFcIl0gdGV4dGFyZWEnLCBmdW5jdGlvbiAoIGV2ZW50ICkge1xyXG5cdFx0XHR2YXIgZmllbGRfbmFtZSA9IHRoaXMubmFtZSB8fCAnJztcclxuXHRcdFx0dmFyIHByZXZpZXdfZGVsYXkgPSAoICdpbnB1dCcgPT09IGV2ZW50LnR5cGUgJiYgaXNfdGV4dF90eXBpbmdfZmllbGQoIHRoaXMgKSApID8gODUwIDogMTgwO1xyXG5cclxuXHRcdFx0aWYgKCBpc19sb2NrZWRfY2hhbmdlb3Zlcl9jb250cm9sKCB0aGlzICkgKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XHJcblx0XHRcdFx0cmVmcmVzaF9jb25kaXRpb25hbF9jb250cm9scygpO1xyXG5cdFx0XHRcdHNob3dfcHJlbWl1bV9ub3RpY2UoICQoIHRoaXMgKSApO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmVmcmVzaF9jb25kaXRpb25hbF9jb250cm9scygpO1xyXG5cdFx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goIHByZXZpZXdfZGVsYXkgKTtcblxyXG5cdFx0XHRpZiAoIGlzX2Z1bGxfcHJldmlld19vbmx5X2ZpZWxkKCBmaWVsZF9uYW1lICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRhcHBseV9jYWxlbmRhcl9zZXR0aW5nc19zYWZlbHkoIGdldF9kYXlzX3NlbGVjdGlvbl9mcm9tX2Zvcm0oKSApO1xyXG5cdFx0fSApO1xyXG5cclxuXHRcdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnW2RhdGEtd3BiYy1jYWxlbmRhci1wcmVtaXVtPVwiMVwiXScsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0c2hvd19wcmVtaXVtX25vdGljZSggJCggdGhpcyApICk7XHJcblx0XHR9ICk7XHJcblxyXG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcjd3BiY19jYWxlbmRhcl9yZXNvdXJjZV9pZCwgI3dwYmNfY2FsZW5kYXJfbW9udGhzX2NvdW50JywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRzY2hlZHVsZV9wcmV2aWV3X3JlZnJlc2goKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cdHBhdGNoX2NhbGVuZGFyX2RhdGFfbG9hZGVyKCk7XHJcblxyXG5cdCQoIGZ1bmN0aW9uICgpIHtcclxuXHRcdGlmICggISAkKCAnW2RhdGEtd3BiYy1jYWxlbmRhci1wYWdlPVwiMVwiXScgKS5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRiaW5kX2V2ZW50cygpO1xyXG5cdFx0cGF0Y2hfY2FsZW5kYXJfZGF0YV9sb2FkZXIoKTtcclxuXHRcdHJlZnJlc2hfY29uZGl0aW9uYWxfY29udHJvbHMoKTtcblx0XHRzeW5jX2xlZnRfbmF2aWdhdGlvbl9hY3RpdmVfc2VjdGlvbigpO1xyXG5cdFx0YXBwbHlfb3Blbl9zZWN0aW9uX2Zyb21fdXJsKCk7XHJcblx0XHRzY2hlZHVsZV9jYWxlbmRhcl9zZXR0aW5nc19hcHBseSggY2ZnLmRheXNfc2VsZWN0aW9uIHx8IGdldF9kYXlzX3NlbGVjdGlvbl9mcm9tX2Zvcm0oKSApO1xyXG5cdH0gKTtcclxufSggalF1ZXJ5LCB3aW5kb3cgKSApO1xyXG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0UsV0FBV0EsQ0FBQyxFQUFFQyxDQUFDLEVBQUc7RUFDbkIsWUFBWTs7RUFFWixJQUFJQyxHQUFHLEdBQUdELENBQUMsQ0FBQ0UsMkJBQTJCLElBQUksQ0FBQyxDQUFDO0VBQzdDLElBQUlDLFlBQVksR0FBRyxJQUFJO0VBQ3ZCLElBQUlDLGFBQWEsR0FBRyxD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
633