/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":72082,"date":"2026-05-22T22:01:23","date_gmt":"2026-05-22T22:01:23","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=72082"},"modified":"2026-05-22T22:01:24","modified_gmt":"2026-05-22T22:01:24","slug":"yobingo-brinda-un-bono-desprovisto-tanque-sobre-cinco%ef%bf%bd-solo-para-nuevos-seres","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/yobingo-brinda-un-bono-desprovisto-tanque-sobre-cinco%ef%bf%bd-solo-para-nuevos-seres\/","title":{"rendered":"YoBingo brinda un bono desprovisto tanque sobre cinco\ufffd solo para nuevos seres"},"content":{"rendered":"

Conocerlas seri\ufffda su conveniente maniobra con el fin de seleccionar unico anuncios convenientes<\/h2>\n

Registrate sobre con el reglamento ABR26 y recibe hasta 50\ufffd sobre bonos sobre casino falto urgencia sobre tanque. Nuestro bono puede demorar inclusive 24 mucho tiempo habiles acerca de reflejarse asi\ufffd como seri\ufffda actual solo de juegos sobre casino, slots y videobingos permitidos. Ebingo brinda cualquier bono carente deposito de cinco\ufffd de cero millas seres que completen nuestro asignacion asi\ufffd como verifiquen su perfil transmitiendo el DNI. Nuestro Casino En internet de Enorme Madrid brinda cualquier Bono Carente Tanque sobre treinta\ufffd vacante lo tanto para juegos de casino como para slots.<\/p>\n

Nuestro transcurso de 777 Casino login seri\ufffda tranquilo asi\ufffd como comodo de usar, cosa que permite cual los destacados numeros en posibilidades sobre esparcimiento de el casino son GoldenPark<\/a> asequibles. Con su noviazgo hacia la decision y nuestro entretenimiento higienico, Casino 777 cuenta con licencias sobre organizaciones reguladores sobre fama, lo que asegura algun escenario de juego fiable desplazandolo hacia el pelo con experiencia. La tarima estaria pensada para ofertar una vivencia simple de usar, proporcionando tanto a las jugadores cero millas como a los con experiencia la interfaz de singladura fluida. 777 Casino es una medio sobre entretenimiento en internet que deberian fascinado a jugadores sobre todo el mundo con manga larga su tematica retro, que recuerda a los clasicos casinos de las Vegas.<\/p>\n

Uno de los e.j de mas afamados en seguida dia es el 777 casino bono sin deposito Mexico, una promocion cual hallan llamado una consideracion para la zapatilla y el pie disposicion de activacion desplazandolo hacia el pelo para los juegos compatibles cual brinda desde el registro. Una de los puntos para los bonos carente deposito con el fin de casino es que tienen algun rollover preferiblemente a otros bonos de casino. El dinero de el bono de casino falto deposito resulta una na? cierta baratos cual se podri? utilizar referente a practicamente todo esparcimiento que ofrezca el casino. Un bono de casino falto tanque no precisa que lleves a cabo cualquier tanque de reclamarlo.<\/p>\n

Estas anuncios suelen ser temporales y resultan la excepcional oportunidad con el fin de obtener de mayor camarilla a hacen de juegos favoritos, ya sea con el pasar del tiempo premios anadida, pruebas o bien apuestas gratuitas. Alla de las ofertas genericos, tenemos bastantes casinos online con manga larga bonos para juegos especificos. Las mas grandes bonos sobre casino en internet obsequian el reembolso como recursos positivo sin rollover, no obstante lo cual dependeri? de los terminos y situaciones de completo operador. Si se trata de un ejercicio como yo que disfrutas sobre sufrir los monstruo quieres casinos que usan depositos minimos empezando desde ningun\ufffd de alcanzar conocer cualquier el abanillo sobre novedosas opciones. Otro de los bonos sobre bienvenida mas profusamente esgrimidas seri\ufffda la persona ofrece giros gratuito.<\/p>\n

La plataforma implementa ciencia de encriptacion SSL de ultima engendramiento, de igual de las que hacen uso las cadenas bancarias, de guarecer las parejas informacion comunicados y no ha transpirado financieros de sus individuos cuanto accesos no autorizados. La decision seri\ufffda algun obelisco importante sobre 777 Casino, cual opera bajo estrictas regulaciones y no ha transpirado licencias internacionales que garantizan la proteccion de los jugadores y tambien en la integridad de todas ellas los operaciones. Una eleccion de algun casino en internet aental de garantizar la practica satisfactoria, desplazandolo hacia el pelo 777 Casino online se va a apoyar sobre el silli\ufffdn diferencia por multiples razones que lo es acerca de una opcion preferente para jugadores en Portugal.<\/p>\n

Si el casino cumple con estos juicio, puedes asegurarnos de que disfrutaras sobre una habilidad segura joviales algun bono carente deposito que ciertamente valga una dolor. Algun gran casino deberia ofrecer la amplia coleccion sobre juegos , nadie pondri\ufffda en duda desde tragaperras incluso las ultimas “slots” , juegos de caja de ahorros desplazandolo hacia el pelo casino en preparado. Sin embargo, es significativo concebir las requisitos desplazandolo hacia el pelo elegir cualquier casino de confianza con el fin de utilizar alrededor extremo la propaganda. Las bonos desprovisto tanque normalmente estar individuos a palabras especializados, igual que algun rollover que establece cuantas veces debes emplazar el bono sin lograr eximir las ganancias. Es posible revisar nuestra relacion de casinos para afirmarte que experimentas en una tarima segura desplazandolo hacia el pelo regulada.<\/p>\n

777 casino es una medio sobre juegos de casualidad en linea que ofrece una amplia disparidad de juegos para sus individuos. Las promociones y no ha transpirado bonificaciones resultan generosas y las graficos para juegos son bastante excelentes. Genial servicio desplazandolo hacia el pelo variacii?n sobre juegos referente a 777 casino, no obstante me gustaria cual anadieran mayormente posibilidades con seccion sobre juegos sobre preparado. Explora acoples 1000 juegos, mesas sobre casino referente a avispado desplazandolo hacia el pelo apuestas zapatillas de tenis en el momento, todo optimizado para un esparcimiento liquido sobre Android, iOS u otra buscador. Sumergete durante vigoroso sociedad sobre 777 casino y no ha transpirado funciona juegos de mesa, ruletas relampago asi\ufffd como shows sobre juegos de moda desde su movil, Para o bien android tablet, todo que usan intimidad integro, seguridad, y algun entretenimiento justamente licenciado.<\/p>\n

Las mayormente importantes son el tanque insignificante, las requisitos de postura y nuestro decada con el fin de cumplirlos<\/h2>\n

Entonces, los bonos de recibimiento resta a ser legales acerca de Portugal desde nuestro 12 de abril sobre 2024. Buscando este tipo de nueva ley, con el fin de conseguir algun bono sobre bienvenida, tenias que verificar su sometimiento. Con el fin de resumirla, quedo completamente prohibida la oferta sobre bonos a las mas seres, estos que daban por tu inicial deposito unicamente registrarte. Pues bien, acerca de 2020 le vino a nuestro ocasion sobre cambio a las esencia de estas promociones y no ha transpirado los bonos sobre recibo.<\/p>\n

Con el fin de que te podri\ufffda llegar a ser simple determinar, te ofrezco una documentacion cual precisas saber, igual que cantidad de juegos acerca de presto y no ha transpirado las bonos sobre recibo cual se puede reclamar. Algunos casinos deben cualquier bono sobre audiencia sin deposito, por eso dese urgencia con el fin de beneficiarse la oferta mas lucrativa de Casino 777.<\/p>\n","protected":false},"excerpt":{"rendered":"

Conocerlas seri\ufffda su conveniente maniobra con el fin de seleccionar unico anuncios convenientes Registrate sobre con el reglamento ABR26 y recibe hasta 50\ufffd sobre bonos sobre casino falto urgencia sobre tanque. Nuestro bono puede demorar inclusive 24 mucho tiempo habiles acerca de reflejarse asi\ufffd como seri\ufffda actual solo de juegos\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-72082","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=72082"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72082\/revisions"}],"predecessor-version":[{"id":72083,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72082\/revisions\/72083"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=72082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=72082"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=72082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}