Skip to main content
[fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” status=”published” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode=”none” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” pattern_bg=”none” pattern_bg_style=”default” pattern_bg_opacity=”100″ pattern_bg_blend_mode=”normal” mask_bg=”none” mask_bg_style=”default” mask_bg_opacity=”100″ mask_bg_transform=”left” mask_bg_blend_mode=”normal” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_transition_offset=”0″ scroll_offset=”0″ animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″ background_color=”#f2dcb3″ padding_top=”50px” padding_bottom=”50px” id=”ee-ac-form” admin_toggled=”no”][fusion_builder_row][fusion_builder_column type=”1_4″ layout=”1_4″ align_self=”auto” content_layout=”column” align_content=”center” valign_content=”flex-start” content_wrap=”wrap” center_content=”no” column_tag=”div” target=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” order_medium=”0″ order_small=”0″ hover_type=”none” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ z_index_subgroup=”regular” background_type=”single” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ lazy_load=”avada” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” absolute=”off” filter_type=”regular” filter_hover_element=”self” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″ transform_type=”regular” transform_hover_element=”self” transform_scale_x=”1″ transform_scale_y=”1″ transform_translate_x=”0″ transform_translate_y=”0″ transform_rotate=”0″ transform_skew_x=”0″ transform_skew_y=”0″ transform_scale_x_hover=”1″ transform_scale_y_hover=”1″ transform_translate_x_hover=”0″ transform_translate_y_hover=”0″ transform_rotate_hover=”0″ transform_skew_x_hover=”0″ transform_skew_y_hover=”0″ transition_duration=”300″ transition_easing=”ease” animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ last=”false” border_position=”all” first=”true” type_medium=”1_1″ min_height=”” link=””][fusion_imageframe image_id=”7300|full” aspect_ratio=”custom” custom_aspect_ratio=”170″ aspect_ratio_position=”53% 43%” skip_lazy_load=”” lightbox=”no” gallery_id=”” lightbox_image=”” lightbox_image_id=”” alt=”” link=”” linktarget=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” max_width=”” sticky_max_width=”” align_medium=”none” align_small=”none” align=”center” mask=”” custom_mask=”” mask_size=”” mask_custom_size=”” mask_position=”” mask_custom_position=”” mask_repeat=”” style_type=”” blur=”2″ stylecolor=”” hue=”” saturation=”” lightness=”” alpha=”” hover_type=”none” magnify_full_img=”” magnify_duration=”120″ scroll_height=”100″ scroll_speed=”1″ margin_top_medium=”10px” margin_right_medium=”10px” margin_bottom_medium=”10px” margin_left_medium=”10px” margin_top_small=”” margin_right_small=”” margin_bottom_small=”” margin_left_small=”” margin_top=”” margin_right=”” margin_bottom=”” margin_left=”” bordersize=”0″ bordercolor=”” borderradius=”10px” z_index=”” caption_style=”off” caption_align_medium=”none” caption_align_small=”none” caption_align=”none” caption_title=”” caption_text=”” caption_title_tag=”2″ fusion_font_family_caption_title_font=”” fusion_font_variant_caption_title_font=”” caption_title_size=”” caption_title_line_height=”” caption_title_letter_spacing=”” caption_title_transform=”” caption_title_color=”” caption_background_color=”” fusion_font_family_caption_text_font=”” fusion_font_variant_caption_text_font=”” caption_text_size=”” caption_text_line_height=”” caption_text_letter_spacing=”” caption_text_transform=”” caption_text_color=”” caption_border_color=”” caption_overlay_color=”” caption_margin_top=”” caption_margin_right=”” caption_margin_bottom=”” caption_margin_left=”” animation_type=”” animation_direction=”left” animation_color=”” animation_speed=”0.3″ animation_delay=”0″ animation_offset=”” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″ class=”” id=””]https://www.expoluce.it/wp-content/uploads/2024/03/Expo-Luce-Sito.jpg[/fusion_imageframe][/fusion_builder_column][fusion_builder_column type=”3_4″ layout=”3_4″ align_self=”stretch” content_layout=”column” align_content=”center” valign_content=”flex-start” content_wrap=”wrap” center_content=”no” column_tag=”div” target=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” order_medium=”0″ order_small=”0″ hover_type=”none” border_style=”solid” box_shadow=”no” box_shadow_blur=”0″ box_shadow_spread=”0″ z_index_subgroup=”regular” background_type=”single” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ lazy_load=”avada” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” absolute=”off” filter_type=”regular” filter_hover_element=”self” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″ transform_type=”regular” transform_hover_element=”self” transform_scale_x=”1″ transform_scale_y=”1″ transform_translate_x=”0″ transform_translate_y=”0″ transform_rotate=”0″ transform_skew_x=”0″ transform_skew_y=”0″ transform_scale_x_hover=”1″ transform_scale_y_hover=”1″ transform_translate_x_hover=”0″ transform_translate_y_hover=”0″ transform_rotate_hover=”0″ transform_skew_x_hover=”0″ transform_skew_y_hover=”0″ transition_duration=”300″ transition_easing=”ease” animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ last=”true” border_position=”all” first=”false” padding_top_medium=”20px” padding_right_medium=”10px” padding_bottom_medium=”20px” padding_left_medium=”10px” type_medium=”1_1″ min_height=”” link=””][fusion_title title_type=”text” rotation_effect=”bounceIn” display_time=”1200″ highlight_effect=”circle” loop_animation=”off” highlight_width=”9″ highlight_top_margin=”0″ rotation_text=”” highlight_text=”” after_text=”” title_link=”off” link_url=”” link_target=”_self” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” before_text=”” content_align_medium=”” content_align_small=”center” content_align=”left” size=”3″ animated_font_size=”” fusion_font_family_title_font=”” fusion_font_variant_title_font=”” font_size=”” line_height=”” letter_spacing=”” text_transform=”” text_color=”var(–awb-custom_color_3)” hue=”” saturation=”” lightness=”” alpha=”” animated_text_color=”” text_shadow=”no” text_shadow_vertical=”” text_shadow_horizontal=”” text_shadow_blur=”0″ text_shadow_color=”” text_stroke=”no” text_stroke_size=”1″ text_stroke_color=”” text_overflow=”none” margin_top_medium=”” margin_right_medium=”” margin_bottom_medium=”” margin_left_medium=”” margin_top_small=”” margin_right_small=”” margin_bottom_small=”” margin_left_small=”” margin_top=”” margin_right=”” margin_bottom=”” margin_left=”” margin_top_mobile=”” margin_bottom_mobile=”” gradient_font=”no” gradient_start_color=”” gradient_end_color=”” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ highlight_color=”” style_type=”default” sep_color=”” link_color=”” link_hover_color=”” animation_type=”” animation_direction=”left” animation_color=”” animation_speed=”0.3″ animation_delay=”0″ animation_offset=””]

Iscriviti alla nostra Newsletter!

[/fusion_title][fusion_text animation_direction=”left” animation_speed=”0.3″ animation_delay=”0″ hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” text_color=”var(–awb-custom_color_3)” content_alignment_small=”center”]

Non perdere le novità e le promozioni. Riceverai GRATIS il catalogo Expo Luce con le migliori soluzioni d’illuminazione scelte dal nostro team e amate dai nostri clienti. In più per te un Buono Sconto del 10% valido solo sui prossimi acquisti.

[/fusion_text][fusion_code]PHN0eWxlPkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuYnVubnkubmV0L2Nzcz9mYW1pbHk9bGF0bzo0MDAsNzAwfElCTStQbGV4K1NhbnM6NDAwKTs8L3N0eWxlPgo8c3R5bGU+CiAjX2Zvcm1fNV8geyBmb250LXNpemU6MTRweDsgbGluZS1oZWlnaHQ6MS42OyBmb250LWZhbWlseTphcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBtYXJnaW46MDsgfQogI19mb3JtXzVfICogeyBvdXRsaW5lOjA7IH0KIC5fZm9ybV9oaWRlIHsgZGlzcGxheTpub25lOyB2aXNpYmlsaXR5OmhpZGRlbjsgfQogLl9mb3JtX3Nob3cgeyBkaXNwbGF5OmJsb2NrOyB2aXNpYmlsaXR5OnZpc2libGU7IH0KICNfZm9ybV81Xy5fZm9ybS10b3AgeyB0b3A6MDsgfQogI19mb3JtXzVfLl9mb3JtLWJvdHRvbSB7IGJvdHRvbTowOyB9CiAjX2Zvcm1fNV8uX2Zvcm0tbGVmdCB7IGxlZnQ6MDsgfQogI19mb3JtXzVfLl9mb3JtLXJpZ2h0IHsgcmlnaHQ6MDsgfQogI19mb3JtXzVfIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fNV8gaW5wdXRbdHlwZT0idGVsIl0sI19mb3JtXzVfIGlucHV0W3R5cGU9ImRhdGUiXSwjX2Zvcm1fNV8gdGV4dGFyZWEgeyBwYWRkaW5nOjZweDsgaGVpZ2h0OmF1dG87IGJvcmRlcjojOTc5Nzk3IDFweCBzb2xpZDsgYm9yZGVyLXJhZGl1czo0cHg7IGNvbG9yOiMwMDAgIWltcG9ydGFudDsgZm9udC1zaXplOjE0cHg7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAjX2Zvcm1fNV8gdGV4dGFyZWEgeyByZXNpemU6bm9uZTsgfQogI19mb3JtXzVfIC5fc3VibWl0IHsgLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7IGN1cnNvcjpwb2ludGVyOyBmb250LWZhbWlseTphcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE0cHg7IHRleHQtYWxpZ246Y2VudGVyOyBiYWNrZ3JvdW5kOiNiYzRiMjAgIWltcG9ydGFudDsgYm9yZGVyOjAgIWltcG9ydGFudDsgLW1vei1ib3JkZXItcmFkaXVzOjExcHggIWltcG9ydGFudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjExcHggIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czoxMXB4ICFpbXBvcnRhbnQ7IGNvbG9yOiNmZmYgIWltcG9ydGFudDsgcGFkZGluZzoxMnB4ICFpbXBvcnRhbnQ7IH0KICNfZm9ybV81XyAuX3N1Ym1pdDpkaXNhYmxlZCB7IGN1cnNvcjpub3QtYWxsb3dlZDsgb3BhY2l0eTowLjQ7IH0KICNfZm9ybV81XyAuX3N1Ym1pdC5wcm9jZXNzaW5nIHsgcG9zaXRpb246cmVsYXRpdmU7IH0KICNfZm9ybV81XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjpiZWZvcmUgeyBjb250ZW50OicnOyB3aWR0aDoxZW07IGhlaWdodDoxZW07IHBvc2l0aW9uOmFic29sdXRlOyB6LWluZGV4OjE7IHRvcDo1MCU7IGxlZnQ6NTAlOyBib3JkZXI6ZG91YmxlIDNweCB0cmFuc3BhcmVudDsgYm9yZGVyLXJhZGl1czo1MCU7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCNiYzRiMjAsICNiYzRiMjApLCBjb25pYy1ncmFkaWVudCgjYmM0YjIwLCAjZmZmKTsgYmFja2dyb3VuZC1vcmlnaW46Ym9yZGVyLWJveDsgYmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94LCBib3JkZXItYm94OyBhbmltYXRpb246MTIwMG1zIGVhc2UgMHMgaW5maW5pdGUgbm9ybWFsIG5vbmUgcnVubmluZyBfc3BpbjsgfQogI19mb3JtXzVfIC5fc3VibWl0LnByb2Nlc3Npbmc6OmFmdGVyIHsgY29udGVudDonJzsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyBib3R0b206MDsgbGVmdDowOyByaWdodDowOyBiYWNrZ3JvdW5kOiNiYzRiMjAgIWltcG9ydGFudDsgYm9yZGVyOjAgIWltcG9ydGFudDsgLW1vei1ib3JkZXItcmFkaXVzOjExcHggIWltcG9ydGFudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjExcHggIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czoxMXB4ICFpbXBvcnRhbnQ7IGNvbG9yOiNmZmYgIWltcG9ydGFudDsgcGFkZGluZzoxMnB4ICFpbXBvcnRhbnQ7IH0KIEBrZXlmcmFtZXMgX3NwaW4geyAwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDkwZGVnKTsgfQogMTAwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1MGRlZyk7IH0KIH0KICNfZm9ybV81XyAuX2Nsb3NlLWljb24geyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2h0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nJyk7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsgYmFja2dyb3VuZC1zaXplOjE0LjJweCAxNC4ycHg7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OmJsb2NrOyB0b3A6MTFweDsgcmlnaHQ6OXB4OyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjE2LjJweDsgaGVpZ2h0OjE2LjJweDsgfQogI19mb3JtXzVfIC5fY2xvc2UtaWNvbjpiZWZvcmUgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogI19mb3JtXzVfIC5fZm9ybS1ib2R5IHsgbWFyZ2luLWJvdHRvbTozMHB4OyB9CiAjX2Zvcm1fNV8gLl9mb3JtLWltYWdlLWxlZnQgeyB3aWR0aDoxNTBweDsgZmxvYXQ6bGVmdDsgfQogI19mb3JtXzVfIC5fZm9ybS1jb250ZW50LXJpZ2h0IHsgbWFyZ2luLWxlZnQ6MTY0cHg7IH0KICNfZm9ybV81XyAuX2Zvcm0tYnJhbmRpbmcgeyBjb2xvcjojZmZmOyBmb250LXNpemU6MTBweDsgY2xlYXI6Ym90aDsgdGV4dC1hbGlnbjpsZWZ0OyBtYXJnaW4tdG9wOjMwcHg7IGZvbnQtd2VpZ2h0OjEwMDsgfQogI19mb3JtXzVfIC5fZm9ybS1icmFuZGluZyAuX2xvZ28geyBkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMzBweDsgaGVpZ2h0OjE0cHg7IG1hcmdpbi10b3A6NnB4OyBiYWNrZ3JvdW5kLWltYWdlOnVybCgnaHR0cHM6Ly9kMjI2YWo0YW8xdDYxcS5jbG91ZGZyb250Lm5ldC9oaDl1anFndjVfYWNsb2dvX2xpLnBuZycpOyBiYWNrZ3JvdW5kLXNpemU6MTMwcHggYXV0bzsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyB9CiAjX2Zvcm1fNV8gLmZvcm0tc3Itb25seSB7IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IHBhZGRpbmc6MDsgbWFyZ2luOi0xcHg7IG92ZXJmbG93OmhpZGRlbjsgY2xpcDpyZWN0KDAsIDAsIDAsIDApOyBib3JkZXI6MDsgfQogI19mb3JtXzVfIC5fZm9ybS1sYWJlbCwjX2Zvcm1fNV8gLl9mb3JtX2VsZW1lbnQgLl9mb3JtLWxhYmVsIHsgZm9udC13ZWlnaHQ6Ym9sZDsgbWFyZ2luLWJvdHRvbTo1cHg7IGRpc3BsYXk6YmxvY2s7IH0KICNfZm9ybV81Xy5fZGFyayAuX2Zvcm0tYnJhbmRpbmcgeyBjb2xvcjojMzMzOyB9CiAjX2Zvcm1fNV8uX2RhcmsgLl9mb3JtLWJyYW5kaW5nIC5fbG9nbyB7IGJhY2tncm91bmQtaW1hZ2U6dXJsKCdodHRwczovL2QyMjZhajRhbzF0NjFxLmNsb3VkZnJvbnQubmV0L2pmdHEyYzhzX2FjbG9nb19kay5wbmcnKTsgfQogI19mb3JtXzVfIC5fZm9ybV9lbGVtZW50IHsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MTBweDsgZm9udC1zaXplOjA7IG1heC13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fNV8gLl9mb3JtX2VsZW1lbnQgKiB7IGZvbnQtc2l6ZToxNHB4OyB9CiAjX2Zvcm1fNV8gLl9mb3JtX2VsZW1lbnQuX2NsZWFyIHsgY2xlYXI6Ym90aDsgd2lkdGg6MTAwJTsgZmxvYXQ6bm9uZTsgfQogI19mb3JtXzVfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcjphZnRlciB7IGNsZWFyOmxlZnQ7IH0KICNfZm9ybV81XyAuX2Zvcm1fZWxlbWVudCBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzVfIC5fZm9ybV9lbGVtZW50IGlucHV0W3R5cGU9ImRhdGUiXSwjX2Zvcm1fNV8gLl9mb3JtX2VsZW1lbnQgc2VsZWN0LCNfZm9ybV81XyAuX2Zvcm1fZWxlbWVudCB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKSB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyBmb250LWZhbWlseTppbmhlcml0OyB9CiAjX2Zvcm1fNV8gLl9maWVsZC13cmFwcGVyIHsgcG9zaXRpb246cmVsYXRpdmU7IH0KICNfZm9ybV81XyAuX2lubGluZS1zdHlsZSB7IGZsb2F0OmxlZnQ7IH0KICNfZm9ybV81XyAuX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0geyB3aWR0aDoxNTBweDsgfQogI19mb3JtXzVfIC5faW5saW5lLXN0eWxlOm5vdCguX2NsZWFyKSArIC5faW5saW5lLXN0eWxlOm5vdCguX2NsZWFyKSB7IG1hcmdpbi1sZWZ0OjIwcHg7IH0KICNfZm9ybV81XyAuX2Zvcm1fZWxlbWVudCBpbWcuX2Zvcm0taW1hZ2UgeyBtYXgtd2lkdGg6MTAwJTsgfQogI19mb3JtXzVfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1maWVsZHNldCB7IGJvcmRlcjowOyBwYWRkaW5nOjAuMDFlbSAwIDAgMDsgbWFyZ2luOjA7IG1pbi13aWR0aDowOyB9CiAjX2Zvcm1fNV8gLl9jbGVhci1lbGVtZW50IHsgY2xlYXI6bGVmdDsgfQogI19mb3JtXzVfIC5fZnVsbF93aWR0aCB7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV81XyAuX2Zvcm1fZnVsbF9maWVsZCB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IG1hcmdpbi1ib3R0b206MTBweDsgfQogI19mb3JtXzVfIGlucHV0W3R5cGU9InRleHQiXS5faGFzX2Vycm9yLCNfZm9ybV81XyB0ZXh0YXJlYS5faGFzX2Vycm9yIHsgYm9yZGVyOiNmMzdjN2IgMXB4IHNvbGlkOyB9CiAjX2Zvcm1fNV8gaW5wdXRbdHlwZT0iY2hlY2tib3giXS5faGFzX2Vycm9yIHsgb3V0bGluZTojZjM3YzdiIDFweCBzb2xpZDsgfQogI19mb3JtXzVfIC5fZXJyb3IgeyBkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgZm9udC1zaXplOjE0cHg7IHotaW5kZXg6MTAwMDAwMDE7IH0KICNfZm9ybV81XyAuX2Vycm9yLl9hYm92ZSB7IHBhZGRpbmctYm90dG9tOjRweDsgYm90dG9tOjM5cHg7IHJpZ2h0OjA7IH0KICNfZm9ybV81XyAuX2Vycm9yLl9iZWxvdyB7IHBhZGRpbmctdG9wOjhweDsgdG9wOjEwMCU7IHJpZ2h0OjA7IH0KICNfZm9ybV81XyAuX2Vycm9yLl9hYm92ZSAuX2Vycm9yLWFycm93IHsgYm90dG9tOi00cHg7IHJpZ2h0OjE1cHg7IGJvcmRlci1sZWZ0OjhweCBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLXJpZ2h0OjhweCBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLXRvcDo4cHggc29saWQgI2ZkZDsgfQogI19mb3JtXzVfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3cgeyB0b3A6MDsgcmlnaHQ6MTVweDsgYm9yZGVyLWxlZnQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItcmlnaHQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItYm90dG9tOjhweCBzb2xpZCAjZmRkOyB9CiAjX2Zvcm1fNV8gLl9lcnJvci1pbm5lciB7IHBhZGRpbmc6MTJweCAxMnB4IDEycHggMzZweDsgYmFja2dyb3VuZC1jb2xvcjojZmRkOyBiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA4QzE2IDEyLjQxODMgMTIuNDE4MyAxNiA4IDE2QzMuNTgxNzIgMTYgMCAxMi40MTgzIDAgOEMwIDMuNTgxNzIgMy41ODE3MiAwIDggMEMxMi40MTgzIDAgMTYgMy41ODE3MiAxNiA4Wk05IDNWOUg3VjNIOVpNOSAxM1YxMUg3VjEzSDlaJyBmaWxsPSclMjNDQTAwMDAnLyUzRSUzQy9zdmclM0UiKTsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOjEycHggY2VudGVyOyBmb250LXNpemU6MTRweDsgZm9udC1mYW1pbHk6YXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OjYwMDsgbGluZS1oZWlnaHQ6MTZweDsgY29sb3I6IzAwMDsgdGV4dC1hbGlnbjpjZW50ZXI7IHRleHQtZGVjb3JhdGlvbjpub25lOyAtd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4OyAtbW96LWJvcmRlci1yYWRpdXM6NHB4OyBib3JkZXItcmFkaXVzOjRweDsgYm94LXNoYWRvdzowcHggMXB4IDRweCByZ2JhKDMxLCAzMywgNDEsIDAuMjk4Mjk1KTsgfQogI19mb3JtXzVfIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3IgeyBtYXJnaW4tYm90dG9tOjVweDsgdGV4dC1hbGlnbjpsZWZ0OyB9CiAjX2Zvcm1fNV8gLl9idXR0b24td3JhcHBlciAuX2Vycm9yLWlubmVyLl9mb3JtX2Vycm9yIHsgcG9zaXRpb246c3RhdGljOyB9CiAjX2Zvcm1fNV8gLl9lcnJvci1pbm5lci5fbm9fYXJyb3cgeyBtYXJnaW4tYm90dG9tOjEwcHg7IH0KICNfZm9ybV81XyAuX2Vycm9yLWFycm93IHsgcG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjA7IGhlaWdodDowOyB9CiAjX2Zvcm1fNV8gLl9lcnJvci1odG1sIHsgbWFyZ2luLWJvdHRvbToxMHB4OyB9CiAucGlrYS1zaW5nbGUgeyB6LWluZGV4OjEwMDAwMDAxICFpbXBvcnRhbnQ7IH0KICNfZm9ybV81XyBpbnB1dFt0eXBlPSJ0ZXh0Il0uZGF0ZXRpbWVfZGF0ZSB7IHdpZHRoOjY5JTsgZGlzcGxheTppbmxpbmU7IH0KICNfZm9ybV81XyBzZWxlY3QuZGF0ZXRpbWVfdGltZSB7IHdpZHRoOjI5JTsgZGlzcGxheTppbmxpbmU7IGhlaWdodDozMnB4OyB9CiAjX2Zvcm1fNV8gaW5wdXRbdHlwZT0iZGF0ZSJdLmRhdGV0aW1lX2RhdGUgeyB3aWR0aDo2OSU7IGRpc3BsYXk6aW5saW5lLWZsZXg7IH0KICNfZm9ybV81XyBpbnB1dFt0eXBlPSJ0aW1lIl0uZGF0ZXRpbWVfdGltZSB7IHdpZHRoOjI5JTsgZGlzcGxheTppbmxpbmUtZmxleDsgfQogQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpIHsgOjotd2Via2l0LXNjcm9sbGJhciB7IGRpc3BsYXk6bm9uZTsgfQogI19mb3JtXzVfIHsgbWFyZ2luOjA7IHdpZHRoOjEwMCU7IG1pbi13aWR0aDoxMDAlOyBtYXgtd2lkdGg6MTAwJTsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAjX2Zvcm1fNV8gKiB7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyBmb250LXNpemU6MWVtOyB9CiAjX2Zvcm1fNV8gLl9mb3JtLWNvbnRlbnQgeyBtYXJnaW46MDsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzVfIC5fZm9ybS1pbm5lciB7IGRpc3BsYXk6YmxvY2s7IG1pbi13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fNV8gLl9mb3JtLXRpdGxlLCNfZm9ybV81XyAuX2lubGluZS1zdHlsZSB7IG1hcmdpbi10b3A6MDsgbWFyZ2luLXJpZ2h0OjA7IG1hcmdpbi1sZWZ0OjA7IH0KICNfZm9ybV81XyAuX2Zvcm0tdGl0bGUgeyBmb250LXNpemU6MS4yZW07IH0KICNfZm9ybV81XyAuX2Zvcm1fZWxlbWVudCB7IG1hcmdpbjowIDAgMjBweDsgcGFkZGluZzowOyB3aWR0aDoxMDAlOyB9CiAjX2Zvcm1fNV8gLl9mb3JtLWVsZW1lbnQsI19mb3JtXzVfIC5faW5saW5lLXN0eWxlLCNfZm9ybV81XyBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzVfIGxhYmVsLCNfZm9ybV81XyBwLCNfZm9ybV81XyB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKSB7IGZsb2F0Om5vbmU7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV81XyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWwgeyBkaXNwbGF5OmlubGluZTsgfQogI19mb3JtXzVfIC5fcm93LCNfZm9ybV81XyBwLCNfZm9ybV81XyBsYWJlbCB7IG1hcmdpbi1ib3R0b206MC43ZW07IHdpZHRoOjEwMCU7IH0KICNfZm9ybV81XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV81XyAuX3JvdyBpbnB1dFt0eXBlPSJyYWRpbyJdIHsgbWFyZ2luOjAgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxlICFpbXBvcnRhbnQ7IH0KICNfZm9ybV81XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdICsgc3BhbiBsYWJlbCB7IGRpc3BsYXk6aW5saW5lOyB9CiAjX2Zvcm1fNV8gLl9yb3cgc3BhbiBsYWJlbCB7IG1hcmdpbjowICFpbXBvcnRhbnQ7IHdpZHRoOmluaXRpYWwgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxlICFpbXBvcnRhbnQ7IH0KICNfZm9ybV81XyAuX2Zvcm0taW1hZ2UgeyBtYXgtd2lkdGg6MTAwJTsgaGVpZ2h0OmF1dG8gIWltcG9ydGFudDsgfQogI19mb3JtXzVfIGlucHV0W3R5cGU9InRleHQiXSB7IHBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHg7IGZvbnQtc2l6ZToxNnB4OyBsaW5lLWhlaWdodDoxLjNlbTsgLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7IH0KICNfZm9ybV81XyBpbnB1dFt0eXBlPSJyYWRpbyJdLCNfZm9ybV81XyBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHdpZHRoOjEuM2VtOyBoZWlnaHQ6MS4zZW07IGZvbnQtc2l6ZToxZW07IG1hcmdpbjowIDAuM2VtIDAgMDsgdmVydGljYWwtYWxpZ246YmFzZWxpbmU7IH0KICNfZm9ybV81XyBidXR0b25bdHlwZT0ic3VibWl0Il0geyBwYWRkaW5nOjIwcHg7IGZvbnQtc2l6ZToxLjVlbTsgfQogI19mb3JtXzVfIC5faW5saW5lLXN0eWxlIHsgbWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnQ7IH0KIH0KICNfZm9ybV81XyB7IHBvc2l0aW9uOnJlbGF0aXZlOyB0ZXh0LWFsaWduOmxlZnQ7IG1hcmdpbjoyNXB4IGF1dG8gMDsgcGFkZGluZy10b3A6NDVweDsgcGFkZGluZy1yaWdodDo0NXB4OyBwYWRkaW5nLWJvdHRvbTo0NXB4OyBwYWRkaW5nLWxlZnQ6NDVweDsgLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IC1tb3otYm94LXNpemluZzpib3JkZXItYm94OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7ICp6b29tOjE7IGJhY2tncm91bmQ6cmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAhaW1wb3J0YW50OyBib3JkZXItdG9wOjJweCBkYXNoZWQgcmdiYSgxODgsIDc1LCAzMiwgMSkgIWltcG9ydGFudDsgYm9yZGVyLXJpZ2h0OjJweCBkYXNoZWQgcmdiYSgxODgsIDc1LCAzMiwgMSkgIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbToycHggZGFzaGVkIHJnYmEoMTg4LCA3NSwgMzIsIDEpICFpbXBvcnRhbnQ7IGJvcmRlci1sZWZ0OjJweCBkYXNoZWQgcmdiYSgxODgsIDc1LCAzMiwgMSkgIWltcG9ydGFudDsgbWF4LXdpZHRoOjgwMHB4OyAtbW96LWJvcmRlci1yYWRpdXM6MThweCAhaW1wb3J0YW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6MThweCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOjE4cHggIWltcG9ydGFudDsgY29sb3I6IzAwMDsgfQogI19mb3JtXzVfLl9pbmxpbmUtZm9ybSwjX2Zvcm1fNV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IHsgZm9udC1mYW1pbHk6TGF0bzsgZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OjQwMDsgfQogI19mb3JtXzVfLl9pbmxpbmUtZm9ybSAuX3JvdyBzcGFuLCNfZm9ybV81Xy5faW5saW5lLWZvcm0gLl9yb3cgbGFiZWwgeyBmb250LWZhbWlseTpMYXRvOyBmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6NDAwOyBsaW5lLWhlaWdodDoxLjZlbTsgY29sb3I6cmdiYSgwLCAwLCAwLCAxKSAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fNV9faW5saW5lZm9ybSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzVfX2lubGluZWZvcm0gaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV81X19pbmxpbmVmb3JtIGlucHV0W3R5cGU9InRlbCJdLCNfZm9ybV81X19pbmxpbmVmb3JtIHNlbGVjdCwjX2Zvcm1fNV9faW5saW5lZm9ybSB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKSB7IGZvbnQtZmFtaWx5OkxhdG87IGZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo0MDA7IGZvbnQtY29sb3I6IzAwMDsgbGluZS1oZWlnaHQ6MS42ZW07IH0KICNfZm9ybV81Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgKiB7IGZvbnQtZmFtaWx5OkxhdG87IGZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo0MDA7IGNvbG9yOnJnYmEoMCwgMCwgMCwgMSkgIWltcG9ydGFudDsgfQogI19mb3JtXzVfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tbGFiZWwgeyBmb250LWZhbWlseTpMYXRvOyBmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6NzAwOyBsaW5lLWhlaWdodDoxLjZlbTsgY29sb3I6cmdiYSgwLCAwLCAwLCAxKSAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fNV8uX2lubGluZS1mb3JtIC5fc3VibWl0IHsgZm9udC1mYW1pbHk6TGF0bzsgZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OjQwMDsgY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAxKSAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fNV8uX2lubGluZS1mb3JtIC5fZm9ybS10aXRsZSB7IGZvbnQtZmFtaWx5OkxhdG87IGZvbnQtc2l6ZToyMnB4OyBsaW5lLWhlaWdodDpub3JtYWw7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6cmdiYSgwLCAwLCAwLCAxKTsgbWFyZ2luLWJvdHRvbTowOyB9CiAjX2Zvcm1fNV8uX2lubGluZS1mb3JtIC5fZm9ybS1icmFuZGluZyB7IGZvbnQtZmFtaWx5OiJJQk0gUGxleCBTYW5zIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTNweDsgZm9udC13ZWlnaHQ6MTAwOyBmb250LXN0eWxlOm5vcm1hbDsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KICNfZm9ybV81XzpiZWZvcmUsI19mb3JtXzVfOmFmdGVyIHsgY29udGVudDoiICI7IGRpc3BsYXk6dGFibGU7IH0KICNfZm9ybV81XzphZnRlciB7IGNsZWFyOmJvdGg7IH0KICNfZm9ybV81Xy5faW5saW5lLXN0eWxlIHsgd2lkdGg6YXV0bzsgZGlzcGxheTppbmxpbmUtYmxvY2s7IH0KICNfZm9ybV81Xy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fNV8uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJkYXRlIl0geyBwYWRkaW5nOjEwcHggMTJweDsgfQogI19mb3JtXzVfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGUgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjI3cHg7IH0KICNfZm9ybV81Xy5faW5saW5lLXN0eWxlIHAgeyBtYXJnaW46MDsgfQogI19mb3JtXzVfLl9pbmxpbmUtc3R5bGUgLl9idXR0b24td3JhcHBlciB7IHBvc2l0aW9uOnJlbGF0aXZlOyBtYXJnaW46MjdweCAxMi41cHggMCAyMHB4OyB9CiAjX2Zvcm1fNV8gLl9mb3JtLXRoYW5rLXlvdSB7IHBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0OjA7IHJpZ2h0OjA7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6MThweDsgfQogQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpIHsgI19mb3JtXzVfLl9pbmxpbmUtZm9ybS5faW5saW5lLXN0eWxlIC5faW5saW5lLXN0eWxlLl9idXR0b24td3JhcHBlciB7IG1hcmdpbi10b3A6MjBweCAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDowICFpbXBvcnRhbnQ7IH0KIH0KICNfZm9ybV81XyAuaXRpLml0aS0tYWxsb3ctZHJvcGRvd24uaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgeyB3aWR0aDoxMDAlOyB9CiAjX2Zvcm1fNV8gLml0aSBpbnB1dCB7IHdpZHRoOjEwMCU7IGhlaWdodDozMnB4OyBib3JkZXI6Izk3OTc5NyAxcHggc29saWQ7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAjX2Zvcm1fNV8gLml0aS0tc2VwYXJhdGUtZGlhbC1jb2RlIC5pdGlfX3NlbGVjdGVkLWZsYWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAjX2Zvcm1fNV8gLml0aS0tc2VwYXJhdGUtZGlhbC1jb2RlIC5pdGlfX3NlbGVjdGVkLWZsYWc6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNSk7IH0KICNfZm9ybV81XyAuaXRpX19jb3VudHJ5LWxpc3QgeyBib3JkZXItcmFkaXVzOjRweDsgbWFyZ2luLXRvcDo0cHg7IG1pbi13aWR0aDo0NjBweDsgfQogI19mb3JtXzVfIC5pdGlfX2NvdW50cnktbGlzdC0tZHJvcHVwIHsgbWFyZ2luLWJvdHRvbTo0cHg7IH0KICNfZm9ybV81XyAucGhvbmUtZXJyb3ItaGlkZGVuIHsgZGlzcGxheTpub25lOyB9CiAjX2Zvcm1fNV8gLnBob25lLWVycm9yIHsgY29sb3I6I2U0MGU0OTsgfQogI19mb3JtXzVfIC5waG9uZS1pbnB1dC1lcnJvciB7IGJvcmRlcjoxcHggc29saWQgI2U0MGU0OSAhaW1wb3J0YW50OyB9Cjwvc3R5bGU+Cjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJodHRwczovL2V4cG9sdWNlLmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV81XyIgY2xhc3M9Il9mb3JtIF9mb3JtXzUgX2lubGluZS1mb3JtICBfZGFyayIgbm92YWxpZGF0ZSBkYXRhLXN0eWxlcy12ZXJzaW9uPSI1Ij4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1IiB2YWx1ZT0iNSIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmIiB2YWx1ZT0iNSIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzIiAvPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSIwIiAvPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im0iIHZhbHVlPSIwIiAvPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InN1YiIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2IiB2YWx1ZT0iMiIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvciIgdmFsdWU9ImQ3Yzk3YjJmYjY5MTZiN2M5MjViM2Y4NGYzNGJkNDljIiAvPgogIDxkaXYgY2xhc3M9Il9mb3JtLWNvbnRlbnQiPgogICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDA5MTk1MTA5IF9mdWxsX3dpZHRoICIgPgogICAgICA8bGFiZWwgZm9yPSJlbWFpbCIgY2xhc3M9Il9mb3JtLWxhYmVsIj4KICAgICAgICBFbWFpbCoKICAgICAgPC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0iX2ZpZWxkLXdyYXBwZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZW1haWwiIG5hbWU9ImVtYWlsIiBwbGFjZWhvbGRlcj0iRGlnaXRhIGwmIzAzOTtlbWFpbCIgcmVxdWlyZWQvPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDU1OTAxMDE1IF9mdWxsX3dpZHRoICIgPgogICAgICA8ZmllbGRzZXQgY2xhc3M9Il9mb3JtLWZpZWxkc2V0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJfcm93Ij4KICAgICAgICAgIDxsZWdlbmQgZm9yPSJmaWVsZFsxXVtdIiBjbGFzcz0iX2Zvcm0tbGFiZWwiPgogICAgICAgICAgICBQcml2YWN5CiAgICAgICAgICA8L2xlZ2VuZD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aW5wdXQgZGF0YS1hdXRvZmlsbD0iZmFsc2UiIHR5cGU9ImhpZGRlbiIgaWQ9ImZpZWxkWzFdW10iIG5hbWU9ImZpZWxkWzFdW10iIHZhbHVlPSJ+fCI+CiAgICAgICAgPGRpdiBjbGFzcz0iX3JvdyBfY2hlY2tib3gtcmFkaW8iPgogICAgICAgICAgPGlucHV0IGlkPSJmaWVsZF8xQWNjb25zZW50byBhbCB0cmF0dGFtZW50byBkZWkgbWllaSBkYXRpIHBlcnNvbmFsaSBhaSBzZW5zaSBkZWxsJiMwMzk7YXJ0aWNvbG8gMTMgZGVsIFJlZ29sYW1lbnRvIChVRSkgMjAxNi82NzkgKiIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpZWxkWzFdW10iIHZhbHVlPSJBY2NvbnNlbnRvIGFsIHRyYXR0YW1lbnRvIGRlaSBtaWVpIGRhdGkgcGVyc29uYWxpIGFpIHNlbnNpIGRlbGwmIzAzOTthcnRpY29sbyAxMyBkZWwgUmVnb2xhbWVudG8gKFVFKSAyMDE2LzY3OSAqIiAgID4KICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF8xQWNjb25zZW50byBhbCB0cmF0dGFtZW50byBkZWkgbWllaSBkYXRpIHBlcnNvbmFsaSBhaSBzZW5zaSBkZWxsJiMwMzk7YXJ0aWNvbG8gMTMgZGVsIFJlZ29sYW1lbnRvIChVRSkgMjAxNi82NzkgKiI+CiAgICAgICAgICAgICAgQWNjb25zZW50byBhbCB0cmF0dGFtZW50byBkZWkgbWllaSBkYXRpIHBlcnNvbmFsaSBhaSBzZW5zaSBkZWxsJiMwMzk7YXJ0aWNvbG8gMTMgZGVsIFJlZ29sYW1lbnRvIChVRSkgMjAxNi82NzkgKgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJfZm9ybV9lbGVtZW50IF94NTg4OTkyNDQgX2Z1bGxfd2lkdGggIiA+CiAgICAgIDxmaWVsZHNldCBjbGFzcz0iX2Zvcm0tZmllbGRzZXQiPgogICAgICAgIDxkaXYgY2xhc3M9Il9yb3ciPgogICAgICAgICAgPGxlZ2VuZCBmb3I9ImZpZWxkWzJdW10iIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgICAgIENvbW1lcmNpYWxlCiAgICAgICAgICA8L2xlZ2VuZD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aW5wdXQgZGF0YS1hdXRvZmlsbD0iZmFsc2UiIHR5cGU9ImhpZGRlbiIgaWQ9ImZpZWxkWzJdW10iIG5hbWU9ImZpZWxkWzJdW10iIHZhbHVlPSJ+fCI+CiAgICAgICAgPGRpdiBjbGFzcz0iX3JvdyBfY2hlY2tib3gtcmFkaW8iPgogICAgICAgICAgPGlucHV0IGlkPSJmaWVsZF8yQWNjb25zZW50byBhbCB0cmF0dGFtZW50byBkZWkgZGF0aSBwZXIgY29tdW5pY2F6aW9uaSBjb21tZXJjaWFsaSBlIGluZm9ybWF0aXZlIHN1IHByb2RvdHRpLCBzZXJ2aXppIGVkIGV2ZW50aSBkaSBFeHBvIEx1Y2UiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmaWVsZFsyXVtdIiB2YWx1ZT0iQWNjb25zZW50byBhbCB0cmF0dGFtZW50byBkZWkgZGF0aSBwZXIgY29tdW5pY2F6aW9uaSBjb21tZXJjaWFsaSBlIGluZm9ybWF0aXZlIHN1IHByb2RvdHRpLCBzZXJ2aXppIGVkIGV2ZW50aSBkaSBFeHBvIEx1Y2UiICBjaGVja2VkID4KICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF8yQWNjb25zZW50byBhbCB0cmF0dGFtZW50byBkZWkgZGF0aSBwZXIgY29tdW5pY2F6aW9uaSBjb21tZXJjaWFsaSBlIGluZm9ybWF0aXZlIHN1IHByb2RvdHRpLCBzZXJ2aXppIGVkIGV2ZW50aSBkaSBFeHBvIEx1Y2UiPgogICAgICAgICAgICAgIEFjY29uc2VudG8gYWwgdHJhdHRhbWVudG8gZGVpIGRhdGkgcGVyIGNvbXVuaWNhemlvbmkgY29tbWVyY2lhbGkgZSBpbmZvcm1hdGl2ZSBzdSBwcm9kb3R0aSwgc2Vydml6aSBlZCBldmVudGkgZGkgRXhwbyBMdWNlCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZmllbGRzZXQ+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g4NTcyMzk1OCBfZnVsbF93aWR0aCAiID4KICAgICAgPGxhYmVsIGZvcj0ibHMiIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgVmVyaWZpY2EgbGEgcmljaGllc3RhLioKICAgICAgPC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0iZy1yZWNhcHRjaGEiIGRhdGEtc2l0ZWtleT0iNkxjd0l3OFRBQUFBQUNQMXlzTTA4RWhDZ3pkNnE1SkFPVVIxYTBHbyI+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJfYnV0dG9uLXdyYXBwZXIgX2Z1bGxfd2lkdGgiPgogICAgICA8YnV0dG9uIGlkPSJfZm9ybV81X3N1Ym1pdCIgY2xhc3M9Il9zdWJtaXQiIHR5cGU9InN1Ym1pdCI+CiAgICAgICAgSW52aWEKICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9jbGVhci1lbGVtZW50Ij4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9mb3JtLXRoYW5rLXlvdSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9mb3JtLWJyYW5kaW5nIj4KICAgIDxkaXYgY2xhc3M9Il9tYXJrZXRpbmctYnkiPgogICAgICBNYXJrZXRpbmcgYSBjdXJhIGRpCiAgICA8L2Rpdj4KICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFjdGl2ZWNhbXBhaWduLmNvbS8/dXRtX21lZGl1bT1yZWZlcnJhbCZ1dG1fY2FtcGFpZ249YWNmb3JtcyIgY2xhc3M9Il9sb2dvIj4KICAgICAgPHNwYW4gY2xhc3M9ImZvcm0tc3Itb25seSI+CiAgICAgICAgQWN0aXZlQ2FtcGFpZ24KICAgICAgPC9zcGFuPgogICAgPC9hPgogIDwvZGl2Pgo8L2Zvcm0+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp3aW5kb3cuY2ZpZWxkcyA9IHsiMSI6InByaXZhY3kiLCIyIjoiY29tbWVyY2lhbGUifTsKd2luZG93Ll9zaG93X3RoYW5rX3lvdSA9IGZ1bmN0aW9uKGlkLCBtZXNzYWdlLCB0cmFja2NtcF91cmwsIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCB0aGFua195b3UgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgdGhhbmtfeW91LmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICB0aGFua195b3Uuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwp9Owp3aW5kb3cuX3Nob3dfZXJyb3IgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgaHRtbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwKICAgICAgICBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICBidXR0b24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLAogICAgICAgIG9sZF9lcnJvciA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogICAgZXJyLmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICBlcnIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfZm9ybV9lcnJvciBfbm9fYXJyb3cnOwogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ19mb3JtLWlubmVyJzsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyKTsKICAgIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2lkXj0iX2Zvcm0iXVtpZCQ9Il9zdWJtaXQiXScpOwogICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgaWYgKGh0bWwpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICdfZXJyb3ItaHRtbCc7CiAgICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn07CndpbmRvdy5fbG9hZF9zY3JpcHQgPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrLCBpc1N1Ym1pdCkgewogICAgdmFyIGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJyksIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCByID0gZmFsc2U7CiAgICB2YXIgc3VibWl0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI19mb3JtXzVfc3VibWl0Jyk7CiAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgc2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnOwogICAgc2NyaXB0LnNyYyA9IHVybDsKICAgIGlmIChjYWxsYmFjaykgewogICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghciAmJiAoIXRoaXMucmVhZHlTdGF0ZSB8fCB0aGlzLnJlYWR5U3RhdGUgPT0gJ2NvbXBsZXRlJykpIHsKICAgICAgICAgICAgICAgIHIgPSB0cnVlOwogICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CiAgICBzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChpc1N1Ym1pdCkgewogICAgICAgICAgICBpZiAoc2NyaXB0LnNyYy5sZW5ndGggPiAxMDAwMCkgewogICAgICAgICAgICAgICAgX3Nob3dfZXJyb3IoIjUiLCAiSW52aW8gbm9uIHJpdXNjaXRvLiBBY2NvcmNpYSBsZSByaXNwb3N0ZSBlIHJpcHJvdmEuIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiNSIsICJJbnZpbyBub24gcml1c2NpdG8uIFJpcHJvdmEuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgfQogICAgfQoKICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKfTsKKGZ1bmN0aW9uKCkgewogICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc2VhcmNoKCJleGNsdWRlZm9ybSIpICE9PSAtMSkgcmV0dXJuIGZhbHNlOwogICAgdmFyIGdldENvb2tpZSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58OyApJyArIG5hbWUgKyAnPShbXjtdKyknKSk7CiAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMl0gOiBudWxsOwogICAgfQogICAgdmFyIHNldENvb2tpZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgdmFyIHRpbWUgPSBub3cuZ2V0VGltZSgpOwogICAgICAgIHZhciBleHBpcmVUaW1lID0gdGltZSArIDEwMDAgKiA2MCAqIDYwICogMjQgKiAzNjU7CiAgICAgICAgbm93LnNldFRpbWUoZXhwaXJlVGltZSk7CiAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICc9JyArIHZhbHVlICsgJzsgZXhwaXJlcz0nICsgbm93ICsgJztwYXRoPS87IFNlY3VyZTsgU2FtZVNpdGU9TGF4Oyc7CiAgICB9CiAgICAgICAgICAgIHZhciBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBmdW5jKSB7CiAgICAgICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBvbGRGdW5jID0gZWxlbWVudFsnb24nICsgZXZlbnRdOwogICAgICAgICAgICBlbGVtZW50WydvbicgKyBldmVudF0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG9sZEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICB2YXIgX3JlbW92ZWQgPSBmYWxzZTsKICAgICAgICB2YXIgZm9ybV90b19zdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fNV8nKTsKICAgIHZhciBhbGxJbnB1dHMgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLCB0b29sdGlwcyA9IFtdLCBzdWJtaXR0ZWQgPSBmYWxzZTsKCiAgICB2YXIgZ2V0VXJsUGFyYW0gPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2VtYWlsJykgewogICAgICAgICAgICB2YXIgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy5nZXQobmFtZSkgfHwgZmFsc2U7CiAgICAgICAgfQogICAgICAgIC8vIGVtYWlsIGlzIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2UgYSBwbHVzIGlzIHZhbGlkIGluIHRoZSBlbWFpbCBhZGRyZXNzCiAgICAgICAgdmFyIHFTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOwogICAgICAgIGlmICghcVN0cmluZykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBwYXJhbWV0ZXJzID0gcVN0cmluZy5zdWJzdHIoMSkuc3BsaXQoJyYnKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgaWYgKHBhcmFtZXRlclswXS50b0xvd2VyQ2FzZSgpID09PSAnZW1haWwnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyWzFdID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclsxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB2YXIgYWNjdERhdGVGb3JtYXQgPSAiJW0vJWQvJVkiOwogICAgdmFyIGdldE5vcm1hbGl6ZWREYXRlID0gZnVuY3Rpb24oZGF0ZSwgYWNjdEZvcm1hdCkgewogICAgICAgIHZhciBkZWNvZGVkRGF0ZSA9IGRlY29kZVVSSUNvbXBvbmVudChkYXRlKTsKICAgICAgICBpZiAoYWNjdEZvcm1hdCAmJiBhY2N0Rm9ybWF0Lm1hdGNoKC8oJWR8JWUpLiolbS9naSkgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGRlY29kZWREYXRlLnJlcGxhY2UoLyhcZHsyfSkuKihcZHsyfSkuKihcZHs0fSkvZywgJyQzLSQyLSQxJyk7CiAgICAgICAgfSBlbHNlIGlmIChEYXRlLnBhcnNlKGRlY29kZWREYXRlKSkgewogICAgICAgICAgICB2YXIgZGF0ZU9iaiA9IG5ldyBEYXRlKGRlY29kZWREYXRlKTsKICAgICAgICAgICAgdmFyIHllYXIgPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGVPYmouZ2V0TW9udGgoKSArIDE7CiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlT2JqLmdldERhdGUoKTsKICAgICAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGggPCAxMCA/IGAwJHttb250aH1gIDogbW9udGh9LSR7ZGF5IDwgMTAgPyBgMCR7ZGF5fWAgOiBkYXl9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB2YXIgZ2V0Tm9ybWFsaXplZFRpbWUgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgdmFyIGhvdXIsIG1pbnV0ZXM7CiAgICAgICAgdmFyIGRlY29kZWRUaW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHRpbWUpOwogICAgICAgIHZhciB0aW1lUGFydHMgPSBBcnJheS5mcm9tKGRlY29kZWRUaW1lLm1hdGNoQWxsKC8oXGR7MSwyfSk6KFxkezEsMn0pXFcqKFtBYVBwXVtNbV0pPy9nbSkpWzBdOwogICAgICAgIGlmICh0aW1lUGFydHNbM10pIHsgLy8gMTIgaG91ciBmb3JtYXQKICAgICAgICAgICAgdmFyIGlzUE0gPSB0aW1lUGFydHNbM10udG9Mb3dlckNhc2UoKSA9PT0gJ3BtJzsKICAgICAgICAgICAgaWYgKGlzUE0pIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA/ICcxMicgOiBgJHtwYXJzZUludCh0aW1lUGFydHNbMV0pICsgMTJ9YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA/ICcwJyA6IHRpbWVQYXJ0c1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIDI0IGhvdXIgZm9ybWF0CiAgICAgICAgICAgIGhvdXIgPSB0aW1lUGFydHNbMV07CiAgICAgICAgfQogICAgICAgIHZhciBub3JtYWxpemVkSG91ciA9IHBhcnNlSW50KGhvdXIpIDwgMTAgPyBgMCR7cGFyc2VJbnQoaG91cil9YCA6IGhvdXI7CiAgICAgICAgdmFyIG1pbnV0ZXMgPSB0aW1lUGFydHNbMl07CiAgICAgICAgcmV0dXJuIGAke25vcm1hbGl6ZWRIb3VyfToke21pbnV0ZXN9YDsKICAgIH07CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcmVnZXhTdHIgPSAiZmllbGRcXFsoXFxkKylcXF0iOwogICAgICAgIHZhciByZXN1bHRzID0gbmV3IFJlZ0V4cChyZWdleFN0cikuZXhlYyhhbGxJbnB1dHNbaV0ubmFtZSk7CiAgICAgICAgaWYgKHJlc3VsdHMgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUgPSBhbGxJbnB1dHNbaV0ubmFtZS5tYXRjaCgvXFt0aW1lXF0kLykKICAgICAgICAgICAgICAgID8gYCR7d2luZG93LmNmaWVsZHNbcmVzdWx0c1sxXV19X3RpbWVgCiAgICAgICAgICAgICAgICA6IHdpbmRvdy5jZmllbGRzW3Jlc3VsdHNbMV1dOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUgPSBhbGxJbnB1dHNbaV0ubmFtZTsKICAgICAgICB9CiAgICAgICAgdmFyIGZpZWxkVmFsID0gZ2V0VXJsUGFyYW0oYWxsSW5wdXRzW2ldLmRhdGFzZXQubmFtZSk7CgogICAgICAgIGlmIChmaWVsZFZhbCkgewogICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLmRhdGFzZXQuYXV0b2ZpbGwgPT09ICJmYWxzZSIpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhbGxJbnB1dHNbaV0udHlwZSA9PSAicmFkaW8iIHx8IGFsbElucHV0c1tpXS50eXBlID09ICJjaGVja2JveCIpIHsKICAgICAgICAgICAgICAgIGlmIChhbGxJbnB1dHNbaV0udmFsdWUgPT0gZmllbGRWYWwpIHsKICAgICAgICAgICAgICAgICAgICBhbGxJbnB1dHNbaV0uY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxsSW5wdXRzW2ldLnR5cGUgPT0gImRhdGUiKSB7CiAgICAgICAgICAgICAgICBhbGxJbnB1dHNbaV0udmFsdWUgPSBnZXROb3JtYWxpemVkRGF0ZShmaWVsZFZhbCwgYWNjdERhdGVGb3JtYXQpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGFsbElucHV0c1tpXS50eXBlID09ICJ0aW1lIikgewogICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZ2V0Tm9ybWFsaXplZFRpbWUoZmllbGRWYWwpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZmllbGRWYWw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgdmFyIHJlbW92ZV90b29sdGlwcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgICAgICB9CiAgICAgICAgdG9vbHRpcHMgPSBbXTsKICAgIH07CiAgICB2YXIgcmVtb3ZlX3Rvb2x0aXAgPSBmdW5jdGlvbihlbGVtKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b29sdGlwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAodG9vbHRpcHNbaV0uZWxlbSA9PT0gZWxlbSkgewogICAgICAgICAgICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgICAgICAgICAgICAgIHRvb2x0aXBzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB2YXIgY3JlYXRlX3Rvb2x0aXAgPSBmdW5jdGlvbihlbGVtLCB0ZXh0KSB7CiAgICAgICAgdmFyIHRvb2x0aXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICAgICAgYXJyb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICAgICAgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgbmV3X3Rvb2x0aXAgPSB7fTsKICAgICAgICBpZiAoZWxlbS50eXBlICE9ICdyYWRpbycgJiYgZWxlbS50eXBlICE9ICdjaGVja2JveCcpIHsKICAgICAgICAgICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnX2Vycm9yJzsKICAgICAgICAgICAgYXJyb3cuY2xhc3NOYW1lID0gJ19lcnJvci1hcnJvdyc7CiAgICAgICAgICAgIGlubmVyLmNsYXNzTmFtZSA9ICdfZXJyb3ItaW5uZXInOwogICAgICAgICAgICBpbm5lci5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGFycm93KTsKICAgICAgICAgICAgdG9vbHRpcC5hcHBlbmRDaGlsZChpbm5lcik7CiAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0b29sdGlwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdfZXJyb3ItaW5uZXIgX25vX2Fycm93JzsKICAgICAgICAgICAgdG9vbHRpcC5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRvb2x0aXAsIGVsZW0pOwogICAgICAgICAgICBuZXdfdG9vbHRpcC5ub19hcnJvdyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIG5ld190b29sdGlwLnRpcCA9IHRvb2x0aXA7CiAgICAgICAgbmV3X3Rvb2x0aXAuZWxlbSA9IGVsZW07CiAgICAgICAgdG9vbHRpcHMucHVzaChuZXdfdG9vbHRpcCk7CiAgICAgICAgcmV0dXJuIG5ld190b29sdGlwOwogICAgfTsKICAgIHZhciByZXNpemVfdG9vbHRpcCA9IGZ1bmN0aW9uKHRvb2x0aXApIHsKICAgICAgICB2YXIgcmVjdCA9IHRvb2x0aXAuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IHJlY3QudG9wIC0gKCh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcCkgIC0gKGRvYy5jbGllbnRUb3AgfHwgMCkpOwogICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA8IDQwKSB7CiAgICAgICAgICAgIHRvb2x0aXAudGlwLmNsYXNzTmFtZSA9IHRvb2x0aXAudGlwLmNsYXNzTmFtZS5yZXBsYWNlKC8gPyhfYWJvdmV8X2JlbG93KSA/L2csICcnKSArICcgX2JlbG93JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9hYm92ZSc7CiAgICAgICAgfQogICAgfTsKICAgIHZhciByZXNpemVfdG9vbHRpcHMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoX3JlbW92ZWQpIHJldHVybjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdmFyIHZhbGlkYXRlX2ZpZWxkID0gZnVuY3Rpb24oZWxlbSwgcmVtb3ZlKSB7CiAgICAgICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICByZW1vdmUgPyByZW1vdmVfdG9vbHRpcChlbGVtKSA6IGZhbHNlOwogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKCEoZWxlbXMgaW5zdGFuY2VvZiBOb2RlTGlzdCB8fCBlbGVtcyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uKSB8fCBlbGVtcy5sZW5ndGggPD0gMSkgewogICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZWxlbS5jaGVja2VkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtc1tpXS5jaGVja2VkKSBub19lcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFub19lcnJvcikgewogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiU2VsZXppb25hIHVuXCdvcHppb25lLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udHlwZSA9PSdjaGVja2JveCcpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtc1tpXS5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgPT09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgZWxlbXNbaV0gIT09IGVsZW0pIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtc1tpXS5jbGFzc05hbWUgPSBlbGVtc1tpXS5jbGFzc05hbWUucmVwbGFjZSgvID9faGFzX2Vycm9yID8vZywgJycpOwogICAgICAgICAgICAgICAgICAgIGlmICghZWxlbXNbaV0uY2hlY2tlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBlbGVtc1tpXS5jbGFzc05hbWUgPSBlbGVtc1tpXS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICBlcnIucHVzaCgiw4ggbmVjZXNzYXJpbyB2ZXJpZmljYXJlICVzIi5yZXBsYWNlKCIlcyIsIGVsZW1zW2ldLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFub19lcnJvcikgewogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCBlcnIuam9pbignPGJyLz4nKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbS50YWdOYW1lID09ICdTRUxFQ1QnKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKGVsZW0ubXVsdGlwbGUpIHsKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5vcHRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtLm9wdGlvbnNbaV0uc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIWVsZW0ub3B0aW9uc1tpXS52YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVsZW0ub3B0aW9uc1tpXS52YWx1ZS5tYXRjaCgvXG4vZykpKQogICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlNlbGV6aW9uYSB1blwnb3B6aW9uZS4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJRdWVzdG8gY2FtcG8gw6ggb2JibGlnYXRvcmlvLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChub19lcnJvciAmJiAoZWxlbS5pZCA9PSAnZmllbGRbXScgfHwgZWxlbS5pZCA9PSAnY2FbMTFdW3ZdJykpIHsKICAgICAgICAgICAgaWYgKGVsZW0uY2xhc3NOYW1lLmluY2x1ZGVzKCdwaG9uZS1pbnB1dC1lcnJvcicpKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5vX2Vycm9yICYmIGVsZW0ubmFtZSA9PSAnZW1haWwnKSB7CiAgICAgICAgICAgIGlmICghdmFsdWUubWF0Y2goL15bXCtfYS16MC05LScmPV0rKFwuW1wrX2EtejAtOS0nXSspKkBbYS16MC05LV0rKFwuW2EtejAtOS1dKykqKFwuW2Etel17Mix9KSQvaSkpIHsKICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiSW5zZXJpc2NpIHVuIGluZGlyaXp6byBlbWFpbCB2YWxpZG8uIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkluc2VyaXNjaSB1bmEgZGF0YSB2YWxpZGEuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9vbHRpcCA/IHJlc2l6ZV90b29sdGlwKHRvb2x0aXApIDogZmFsc2U7CiAgICAgICAgcmV0dXJuIG5vX2Vycm9yOwogICAgfTsKICAgIHZhciBuZWVkc192YWxpZGF0ZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgaWYoZWwuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKXsKICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICB9CiAgICAgICAgaWYoZWwubmFtZSA9PT0gJ2VtYWlsJyAmJiBlbC52YWx1ZSAhPT0gIiIpewogICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAgIH0KCiAgICAgICAgaWYoKGVsLmlkID09ICdmaWVsZFtdJyB8fCBlbC5pZCA9PSAnY2FbMTFdW3ZdJykgJiYgZWwuY2xhc3NOYW1lLmluY2x1ZGVzKCdwaG9uZS1pbnB1dC1lcnJvcicpKXsKICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZQogICAgfTsKICAgIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKSwgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgIGlmICghc3VibWl0dGVkKSB7CiAgICAgICAgICAgIHN1Ym1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PSAndGVsJykgewogICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2JsdXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHQnIHx8IGlucHV0LnR5cGUgPT0gJ251bWJlcicgfHwgaW5wdXQudHlwZSA9PSAndGltZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdibHVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3JhZGlvJyB8fCBpbnB1dC50eXBlID09ICdjaGVja2JveCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaW9zID0gZm9ybV90b19zdWJtaXQuZWxlbWVudHNbZWwubmFtZV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHJhZGlvc1tpXSwgJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKGVsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSkoaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudHlwZSA9PSAndGV4dGFyZWEnKXsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZW1vdmVfdG9vbHRpcHMoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYWxsSW5wdXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIHZhciBlbGVtID0gYWxsSW5wdXRzW2ldOwogICAgICAgICAgICBpZiAobmVlZHNfdmFsaWRhdGUoZWxlbSkpIHsKICAgICAgICAgICAgICAgIGlmIChlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gInNlbGVjdCIpIHsKICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gZWxlbS52YWx1ZS50cmltKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbGVtKSA/IHRydWUgOiBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghbm9fZXJyb3IgJiYgZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICAgIHJlc2l6ZV90b29sdGlwcygpOwogICAgICAgIHJldHVybiBub19lcnJvcjsKICAgIH07CiAgICBhZGRFdmVudCh3aW5kb3csICdyZXNpemUnLCByZXNpemVfdG9vbHRpcHMpOwogICAgYWRkRXZlbnQod2luZG93LCAnc2Nyb2xsJywgcmVzaXplX3Rvb2x0aXBzKTsKCiAgICB2YXIgaGlkZVBob25lSW5wdXRFcnJvciA9IGZ1bmN0aW9uKGlucHV0SWQpIHsKICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvci1tc2ctIiArIGlucHV0SWQpOwogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogICAgICAgIGVycm9yTWVzc2FnZS5jbGFzc0xpc3QucmVtb3ZlKCJwaG9uZS1lcnJvciIpOwogICAgICAgIGVycm9yTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCJwaG9uZS1lcnJvci1oaWRkZW4iKTsKICAgICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCJwaG9uZS1pbnB1dC1lcnJvciIpOwogICAgfTsKCiAgICB2YXIgaW5pdGlhbGl6ZVBob25lSW5wdXQgPSBmdW5jdGlvbihpbnB1dCwgZGVmYXVsdENvdW50cnkpIHsKICAgICAgICByZXR1cm4gd2luZG93LmludGxUZWxJbnB1dChpbnB1dCwgewogICAgICAgICAgICB1dGlsc1NjcmlwdDogImh0dHBzOi8vdW5wa2cuY29tL2ludGwtdGVsLWlucHV0QDE3LjAuMTgvYnVpbGQvanMvdXRpbHMuanMiLAogICAgICAgICAgICBhdXRvSGlkZURpYWxDb2RlOiBmYWxzZSwKICAgICAgICAgICAgc2VwYXJhdGVEaWFsQ29kZTogdHJ1ZSwKICAgICAgICAgICAgaW5pdGlhbENvdW50cnk6IGRlZmF1bHRDb3VudHJ5LAogICAgICAgICAgICBwcmVmZXJyZWRDb3VudHJpZXM6IFtdCiAgICAgICAgfSk7CiAgICB9CgogICAgdmFyIHNldFBob25lSW5wdXRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKGlucHV0SWQsIGlucHV0LCBpdGkpIHsKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXJyb3ItbXNnLSIgKyBpbnB1dElkKTsKICAgICAgICAgICAgaWYgKGlucHV0LnZhbHVlLnRyaW0oKSkgewogICAgICAgICAgICAgICAgaWYgKGl0aS5pc1ZhbGlkTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgICAgICBpdGkuc2V0TnVtYmVyKGl0aS5nZXROdW1iZXIoKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5jbGFzc0xpc3QuY29udGFpbnMoInBob25lLWVycm9yIikpewogICAgICAgICAgICAgICAgICAgICAgICBoaWRlUGhvbmVJbnB1dEVycm9yKGlucHV0SWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2hvd1Bob25lSW5wdXRFcnJvcihpbnB1dElkKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5jbGFzc0xpc3QuY29udGFpbnMoInBob25lLWVycm9yIikpewogICAgICAgICAgICAgICAgICAgIGhpZGVQaG9uZUlucHV0RXJyb3IoaW5wdXRJZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY291bnRyeWNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpdGkuc2V0TnVtYmVyKCcnKTsKICAgICAgICB9KTsKCiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGNoYXJDb2RlID0gKGUud2hpY2gpID8gZS53aGljaCA6IGUua2V5Q29kZTsKICAgICAgICAgICAgaWYgKGNoYXJDb2RlID4gMzEgJiYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgY2hhckNvZGUgIT09IDgpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICB2YXIgc2hvd1Bob25lSW5wdXRFcnJvciA9IGZ1bmN0aW9uKGlucHV0SWQpIHsKICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvci1tc2ctIiArIGlucHV0SWQpOwogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogICAgICAgIGVycm9yTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCJwaG9uZS1lcnJvciIpOwogICAgICAgIGVycm9yTWVzc2FnZS5jbGFzc0xpc3QucmVtb3ZlKCJwaG9uZS1lcnJvci1oaWRkZW4iKTsKICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCJwaG9uZS1pbnB1dC1lcnJvciIpOwogICAgfTsKCgogICAgd2luZG93WydyZWNhcHRjaGFfY2FsbGJhY2snXSA9IGZ1bmN0aW9uKCkgewogIC8vIEdldCBhbGwgcmVjYXB0Y2hhcyBpbiB0aGUgRE9NICh0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBmb3JtIG9uIHRoZSBwYWdlKS4KICB2YXIgcmVjYXB0Y2hhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImctcmVjYXB0Y2hhIik7CiAgZm9yICh2YXIgaSBpbiByZWNhcHRjaGFzKSB7CiAgICAvLyBTZXQgdGhlIHJlY2FwdGNoYSBlbGVtZW50IElELCBzbyB0aGUgcmVjYXB0Y2hhIGNhbiBiZSBhcHBsaWVkIHRvIGVhY2ggZWxlbWVudC4KICAgIHZhciByZWNhcHRjaGFfaWQgPSAicmVjYXB0Y2hhXyIgKyBpOwogICAgcmVjYXB0Y2hhc1tpXS5pZCA9IHJlY2FwdGNoYV9pZDsKICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJlY2FwdGNoYV9pZCk7CiAgICBpZiAoZWwgIT0gbnVsbCkgewogICAgICB2YXIgc2l0ZWtleSA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1zaXRla2V5Iik7CiAgICAgIHZhciBzdG9rZW4gPSBlbC5nZXRBdHRyaWJ1dGUoImRhdGEtc3Rva2VuIik7CiAgICAgIGdyZWNhcHRjaGEucmVuZGVyKHJlY2FwdGNoYV9pZCwgeyJzaXRla2V5IjpzaXRla2V5LCJzdG9rZW4iOnN0b2tlbn0pOwogICAgfQogIH0KfTsgICAgX2xvYWRfc2NyaXB0KAogICAgICAgICJodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanM/b25sb2FkPXJlY2FwdGNoYV9jYWxsYmFjayZyZW5kZXI9ZXhwbGljaXQiCiAgICApOwogICAgdmFyIF9mb3JtX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uKGZvcm0pe2lmKCFmb3JtfHxmb3JtLm5vZGVOYW1lIT09IkZPUk0iKXtyZXR1cm4gfXZhciBpLGoscT1bXTtmb3IoaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PT0iIil7Y29udGludWV9c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0ubm9kZU5hbWUpe2Nhc2UiSU5QVVQiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UidGVsIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS5wcmV2aW91c1NpYmxpbmcucXVlcnlTZWxlY3RvcignZGl2Lml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlJykuaW5uZXJUZXh0KStlbmNvZGVVUklDb21wb25lbnQoIiAiKStlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UidGV4dCI6Y2FzZSJudW1iZXIiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImhpZGRlbiI6Y2FzZSJwYXNzd29yZCI6Y2FzZSJidXR0b24iOmNhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UiY2hlY2tib3giOmNhc2UicmFkaW8iOmlmKGZvcm0uZWxlbWVudHNbaV0uY2hlY2tlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKX1icmVhaztjYXNlImZpbGUiOmJyZWFrfWJyZWFrO2Nhc2UiVEVYVEFSRUEiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJTRUxFQ1QiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2Uic2VsZWN0LW9uZSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlInNlbGVjdC1tdWx0aXBsZSI6Zm9yKGo9MDtqPGZvcm0uZWxlbWVudHNbaV0ub3B0aW9ucy5sZW5ndGg7aisrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0uc2VsZWN0ZWQpe3EucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0udmFsdWUpKX19YnJlYWt9YnJlYWs7Y2FzZSJCVVRUT04iOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpjYXNlImJ1dHRvbiI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVha31icmVha319cmV0dXJuIHEuam9pbigiJiIpfTsKCiAgICBjb25zdCBmb3JtU3VwcG9ydHNQb3N0ID0gZmFsc2U7CiAgICB2YXIgZm9ybV9zdWJtaXQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICh2YWxpZGF0ZV9mb3JtKCkpIHsKICAgICAgICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgICAgICAgIHZhciBzdWJtaXRCdXR0b24gPSBlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fNV9zdWJtaXQnKTsKICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgc3VibWl0QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3Byb2Nlc3NpbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBfZm9ybV9zZXJpYWxpemUoCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fNV8nKQogICAgICAgICAgICApLnJlcGxhY2UoLyUwQS9nLCAnXFxuJyk7CiAgICAgICAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKTsKICAgICAgICAgICAgZXJyID8gZXJyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXJyKSA6IGZhbHNlOwogICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBzdWJtaXRGb3JtKCkgewogICAgICAgICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VyaWFsaXplZCk7CiAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHsKICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9leHBvbHVjZS5hY3RpdmVob3N0ZWQuY29tL3Byb2MucGhwP2pzb25wPXRydWUnLCB7CiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBib2R5OiBmb3JtRGF0YSwKICAgICAgICAgICAgICAgIG1ldGhvZDogIlBPU1QiCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGZvcm1TdXBwb3J0c1Bvc3QpIHsKICAgICAgICAgICAgICBzdWJtaXRGb3JtKCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgICAgZXZhbChkYXRhLmpzKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfbG9hZF9zY3JpcHQoJ2h0dHBzOi8vZXhwb2x1Y2UuYWN0aXZlaG9zdGVkLmNvbS9wcm9jLnBocD8nICsgc2VyaWFsaXplZCArICcmanNvbnA9dHJ1ZScsIG51bGwsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICBhZGRFdmVudChmb3JtX3RvX3N1Ym1pdCwgJ3N1Ym1pdCcsIGZvcm1fc3VibWl0KTsKfSkoKTsKCjwvc2NyaXB0Pg==[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]
chiudi

EXPO LUCE DAYS 2024

Sconti IMPERDIBILI Fino al 50%

Sei di Roma e dintorni?

Scarica l’invito fino al 27 alle 19:00

Ricevi il tuo invito ora
whatsapp chat