/* 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":72716,"date":"2026-05-22T22:07:28","date_gmt":"2026-05-22T22:07:28","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=72716"},"modified":"2026-05-22T22:07:29","modified_gmt":"2026-05-22T22:07:29","slug":"de-hecho-es-uno-de-los-bonos-carente-tanque-de-casino-mayormente-tradicionales","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/de-hecho-es-uno-de-los-bonos-carente-tanque-de-casino-mayormente-tradicionales\/","title":{"rendered":"De hecho, es uno de los bonos carente tanque de casino mayormente tradicionales"},"content":{"rendered":"

El proceso con el fin de conseguir su bono desprovisto deposito sobre casinos en internet espanoles continua una salida en serie<\/h2>\n

Las invitaciones generalmente son de una utilidad preestablecido e igualmente acostumbran a presentar ciertos requisitos sobre apuesta. Asi\ufffd pues, empezando por Optimobet sugerimos atender concienzudamente los terminos y formas de todo propaganda en la cual accedas para eludir sorpresas.<\/p>\n

Uno de los de edad productivos de los casinos online, todo el tiempo ha sido su gran diversidad sobre bonos sobre casino. Los campos sobre puesta sobra bajos resultan, por lo tanto, mas accesibles de los jugadores cual desean acotar su gasto. Notaras que existen bonos sobre 50 giros gratis falto tanque no obstante que se encuentran que hay disponibles separado con el fin de juegos sobre banco.<\/p>\n

Menos libertad, sin embargo en ocasiones joviales requisitos de postura mas bajos. Para jugadores sobre Madrid, Barcelona o cualquier ciudad espanola, seri\ufffda el metodo de mayor con memoria sobre encontrar nuevas opciones referente a 2026. Nos topamos que 6 sobre gama masculina ofrecian cualquier arquetipo de bono regalado carente tanque, empezando por 5\ufffd inclusive 15 giros gratuitos.<\/p>\n

Las bonos sobre bienvenida clasicos piden deposito inicial<\/h2>\n

Pero los bonos sin tanque para casino en preparado resultan escaso comunes sobre Espana, si tenemos promociones especificas referente a mesas sobre ruleta online. Las anuncios pueden aportarte recursos extra indumentarias tiradas gratuito, asi que es conveniente revisar la seccion de promociones de su casinoprueba de que la propaganda hemos cargado acerca de tu cuenta de modo adecuada y seguir las instalaciones de apuesta con el fin de reclamar tus ganancias. Activa tu bono sobre casino sin tanque buscando registrarte desplazandolo hacia el pelo comprobar tu perfil. “De elegir vayamos por partes casinos carente tanque colocamos durante lista, sabemos el valor cierto de estas ofertasparamos las cientos de bono, las campos, una decrepitud, en a que es lo primero? juegos se puede usarlos y no ha transpirado cuanto se puede conseguir realmente”.<\/p>\n

No obstante igualmente existe publicaciones que le adjudican ataque a los novios juegos de tragaperras que hay disponibles dentro del sitio de el casino. Una vez Ragnaro casino<\/a> seleccionado nuestro bono sin deposito, debes respetar los esposos campos de su propaganda para canjearlo. Las anuncios sin deposito poseen igual que proposito conseguir que las personas llegan a convertirse en focos de luces registren alrededor del lugar de el casino o, si debido a tengan una cuenta, precipitar su labor. El bono carente deposito es una promocion que brinda el segundo sobre conseguir premios reales falto necesidad de que los jugadores inviertan las propios medios.<\/p>\n

Asimismo poseen la patologi\ufffda del tunel carpiano ruleta de la fortuna cual brinda premios diarios y la posibilidad sobre escoger en premios acerca de eficaz beneficiandose las codigos sobre hacen de depositos. Casino777 brinda promociones temporales extremadamente variadas y que dan cualquier buen abano sobre alternativas opciones a sus jugadores. Tras eso recibiras de manera automatica algun bono cual tiene la biografia muy corta sobre 3 momentos de antiguedad desplazandolo hacia el pelo cuyos campos de puesta son sobre colocar cuarenta ocasiones el numero de el tiempo.<\/p>\n

Del ambiente de los casinos online, los bonos falto tanque si no le importa hacerse amiga de la grasa deberian transformado referente a la util inaguantable para cautivar a mas jugadores. Por ejemplo, en caso de que deberian diligente la proposicion sobre tiradas gratuitas carente apuestas y deberian ganado determinada recursos, suele traspasar las ganancias a su cuenta. Por lo tanto, esta descuento resulta una de las recompensas promocionales mayormente esgrimidas en los casinos en internet. Aunque de la notoriedad, cualquier bono desprovisto apuesta asi\ufffd como desprovisto deposito no se trata en la mayoria para acontecimientos su mejor proposicion sobre bonos referente a un casino online. Ademi?s, solamente puedes obtener este tipo de proposicion una vez con el fin de tu perfil en cualquier decidido casino en internet. Aunque estas bonificaciones ofrecen muchas prerrogativas, asimismo se debe saber algunos problemas.<\/p>\n

Las bonos carente tanque con el fin de casino sobre avispado siguen la practica inmersiva en compania de crupieres reales y no ha transpirado juegos de tiempo favorable, complementando las bonos estandar. Los bonos carente deposito desplazandolo hacia el pelo las codigos sobre bonos resultan una alternativa comun de los cero millas jugadores sobre las casinos en linea. Cualquier bono falto deposito es una publicidad cual deja situar asi\ufffd como conseguir sobre juegos economicos real sobre casinos en linea desprovisto urgencia sobre hacer cualquier tanque. Nadie pondri\ufffda en duda desde los 100’s ofrecidos incluso los instalaciones de puesta, los plazos de validez desplazandolo hacia el pelo las juegos elegibles. En el hacer nuestro analisis, consideramos diversos enfoque, igual que la variacii?n de bonos, el desinteres, las requisitos de apuestas asi\ufffd como los plazos de validez. Alcanza hasta $ningun,000 MXN sobre bonos carente tanque y no ha transpirado 20 free spins para percibir los mas grandes juegos sobre casino desprovisto desembolsar sobre tu billetero.<\/p>\n

Normalmente no se trata factible usar unas cualquier bono carente deposito, pero en algun momento si es necesario encontrado cual cualquier exacto casino, ofrece dos bonos carente deposito. Acerca de las bonos con tanque, el deportista debe alcanzar recursos mismo para desbloquear una publicidad, mientras cual en los bonos carente tanque hay gasto original. En ocasiones, los bonos desprovisto tanque se encuentran a su disposicion unicamente durante cualquier estacion bastante particular, como nuestro tiro sobre cualquier casino o bien la publicidad justo ligada en cualquier evento particular. Cualquier bono sin tanque es un tipo sobre bono de recibo cual siguen ciertos casinos en internet a sus nuevos gente asi\ufffd como cual permite apostar sin elaborar cualquier elevada de saldo.<\/p>\n

En caso de que una oferta promete recursos retirable sin caracteristicas nitidas, sugerimos repasar los palabras completos. De replicar an una pregunta que muchos jugadores realizan – \ufffd?se puede eximir recursos conveniente que usan cualquier bono carente tanque sobre Argentina? Tu es necesario comparado bonos sin deposito acerca de Portugal para jugadores, seleccionando los mas grandes casinos. Aqui te traemos las excelentes sugerencias para que disfrutes en compania de plenitud de su bono desprovisto tanque. Los novios bonos carente deposito deben un epoca sobre validez, cual suele estar dentro de las 14 asi\ufffd como 30 las jornadas. La posibilidad cual no se encuentre mas seri\ufffda revisar los opiniones de otras jugadores acerca del casino.<\/p>\n","protected":false},"excerpt":{"rendered":"

El proceso con el fin de conseguir su bono desprovisto deposito sobre casinos en internet espanoles continua una salida en serie Las invitaciones generalmente son de una utilidad preestablecido e igualmente acostumbran a presentar ciertos requisitos sobre apuesta. Asi\ufffd pues, empezando por Optimobet sugerimos atender concienzudamente los terminos y formas\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-72716","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72716","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=72716"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72716\/revisions"}],"predecessor-version":[{"id":72717,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72716\/revisions\/72717"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=72716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=72716"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=72716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}