text:
#include "ir_print_glsl_visitor.h"
#include "ir_visitor.h"
#include "glsl_types.h"
#include "glsl_parser_extras.h"
#include "ir_unused_structs.h"
#include "program/hash_table.h"
#include <math.h>

static char* print_type(char* buffer, const glsl_type *t, bool arraySize);
static char* print_type_post(char* buffer, const glsl_type *t, bool arraySize);

static inline const char* get_precision_string (glsl_precision p)
{
	switch (p) {
	case glsl_precision_high:		return "highp ";
	case glsl_precision_medium:		return "mediump ";
	case glsl_precision_low:		return "lowp ";
	case glsl_precision_undefined:	return "";
	}
	assert(!"Should not get here.");
	return "";
}

struct ga_entry : public exec_node
{
	ga_entry(ir_instruction* ir)
	{
		assert(ir);
		this->ir = ir;
	}
	ir_instruction* ir;
};

struct global_print_tracker {
	global_print_tracker () {
		mem_ctx = ralloc_context(0);
		var_counter = 0;
		var_hash = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare);
		main_function_done = false;
	}

	~global_print_tracker() {
		hash_table_dtor (var_hash);
		ralloc_free(mem_ctx);
	}

	unsigned	var_counter;
	hash_table*	var_hash;
	exec_list	global_assignements;
	void* mem_ctx;
	bool	main_function_done;
};

class ir_print_glsl_visitor : public ir_visitor {
public:
	ir_print_glsl_visitor(char* buf, global_print_tracker* globals_, PrintGlslMode mode_, bool use_precision_, const _mesa_glsl_parse_state* state_)
	{
		indentation = 0;
		buffer = buf;
		globals = globals_;
		mode = mode_;
		use_precision = use_precision_;
		state = state_;
	}

	virtual ~ir_print_glsl_visitor()
	{
	}

	void indent(void);
	void print_var_name (ir_variable* v);
	void print_precision (ir_instruction* ir, const glsl_type* type);

	virtual void visit(ir_variable *);
	virtual void visit(ir_function_signature *);
	virtual void visit(ir_function *);
	virtual void visit(ir_expression *);
	virtual void visit(ir_texture *);
	virtual void visit(ir_swizzle *);
	virtual void visit(ir_dereference_variable *);
	virtual void visit(ir_dereference_array *);
	virtual void visit(ir_dereference_record *);
	virtual void visit(ir_assignment *);
	virtual void visit(ir_constant *);
	virtual void visit(ir_call *);
	virtual void visit(ir_return *);
	virtual void visit(ir_discard *);
	virtual void visit(ir_if *);
	virtual void visit(ir_loop *);
	virtual void visit(ir_loop_jump *);
	virtual void visit(ir_precision_statement *);
	virtual void visit(ir_typedecl_statement *);

	int indentation;
	char* buffer;
	global_print_tracker* globals;
	const _mesa_glsl_parse_state* state;
	PrintGlslMode mode;
	bool	use_precision;
};

char*
_mesa_print_ir_glsl(exec_list *instructions,
	    struct _mesa_glsl_parse_state *state,
		char* buffer, PrintGlslMode mode)
{
	// print version & extensions
	if (state) {
		if (state->had_version_string)
			ralloc_asprintf_append (&buffer, "#version %i\n", state->language_version);
		if (state->ARB_shader_texture_lod_enable)
			ralloc_strcat (&buffer, "#extension GL_ARB_shader_texture_lod : enable\n");
		if (state->EXT_shader_texture_lod_enable)
			ralloc_strcat (&buffer, "#extension GL_EXT_shader_texture_lod : enable\n");
		if (state->OES_standard_derivatives_enable)
			ralloc_strcat (&buffer, "#extension GL_OES_standard_derivatives : enable\n");
		if (state->EXT_shadow_samplers_enable)
			ralloc_strcat (&buffer, "#extension GL_EXT_shadow_samplers : enable\n");
		if (state->EXT_frag_depth_enable)
			ralloc_strcat (&buffer, "#extension GL_EXT_frag_depth : enable\n");
	}

	// remove unused struct declarations
	do_remove_unused_typedecls(instructions);

	global_print_tracker gtracker;

   foreach_iter(exec_list_iterator, iter, *instructions) {
      ir_instruction *ir = (ir_instruction *)iter.get();
	  if (ir->ir_type == ir_type_variable) {
		ir_variable *var = static_cast<ir_variable*>(ir);
		if ((strstr(var->name, "gl_") == var->name)
			  && !var->invariant)
			continue;
	  }

	  ir_print_glsl_visitor v (buffer, &gtracker, mode, state->es_shader, state);
	  ir->accept(&v);
	  buffer = v.buffer;
      if (ir->ir_type != ir_type_function)
		ralloc_asprintf_append (&buffer, ";\n");
   }

   return buffer;
}

void ir_print_glsl_visitor::indent(void)
{
   for (int i = 0; i < indentation; i++)
      ralloc_asprintf_append (&buffer, "  ");
}

void ir_print_glsl_visitor::print_var_name (ir_variable* v)
{
    long id = (long)hash_table_find (globals->var_hash, v);
	if (!id && v->mode == ir_var_temporary)
	{
        id = ++globals->var_counter;
        hash_table_insert (globals->var_hash, (void*)id, v);
	}
    if (id)
    {
        if (v->mode == ir_var_temporary)
            ralloc_asprintf_append (&buffer, "tmpvar_%d", (int)id);
        else
            ralloc_asprintf_append (&buffer, "%s_%d", v->name, (int)id);
    }
	else
	{
		ralloc_asprintf_append (&buffer, "%s", v->name);
	}
}

void ir_print_glsl_visitor::print_precision (ir_instruction* ir, const glsl_type* type)
{
	if (!this->use_precision)
		return;
	if (type &&
		!type->is_float() &&
		!type->is_sampler() &&
		(!type->is_array() || !type->element_type()->is_float())
	)
	{
		return;
	}
	glsl_precision prec = precision_from_ir(ir);

	// skip precision for samplers that end up being lowp (default anyway) or undefined
	if (type && type->is_sampler())
	{
		if (prec == glsl_precision_low || prec == glsl_precision_undefined)
			return;
	}

	if (prec == glsl_precision_high || prec == glsl_precision_undefined)
	{
		if (ir->ir_type == ir_type_function_signature)
			return;
	}
	ralloc_asprintf_append (&buffer, "%s", get_precision_string(prec));
}

static char*
print_type(char* buffer, const glsl_type *t, bool arraySize)
{
   if (t->base_type == GLSL_TYPE_ARRAY) {
      buffer = print_type(buffer, t->fields.array, true);
      if (arraySize)
         ralloc_asprintf_append (&buffer, "[%u]", t->length);
   } else if ((t->base_type == GLSL_TYPE_STRUCT)
	      && (strncmp("gl_", t->name, 3) != 0)) {
      ralloc_asprintf_append (&buffer, "%s", t->name);
   } else {
      ralloc_asprintf_append (&buffer, "%s", t->name);
   }
   return buffer;
}

static char*
print_type_post(char* buffer, const glsl_type *t, bool arraySize)
{
	if (t->base_type == GLSL_TYPE_ARRAY) {
		if (!arraySize)
			ralloc_asprintf_append (&buffer, "[%u]", t->length);
	}
	return buffer;
}

void ir_print_glsl_visitor::visit(ir_variable *ir)
{
   const char *const cent = (ir->centroid) ? "centroid " : "";
   const char *const inv = (ir->invariant) ? "invariant " : "";
   const char *const mode[3][ir_var_mode_count] =
   {
	{ "", "uniform ", "in ",        "out ",     "in ", "out ", "inout ", "", "", "" },
	{ "", "uniform ", "attribute ", "varying ", "in ", "out ", "inout ", "", "", "" },
	{ "", "uniform ", "varying ",   "out ",     "in ", "out ", "inout ", "", "", "" },
   };

   const char *const interp[] = { "", "smooth ", "flat ", "noperspective " };

	int decormode = this->mode;
	// GLSL 1.30 and up use "in" and "out" for everything
	if (this->state->language_version >= 130)
	{
		decormode = 0;
	}

   // give an id to any variable defined in a function that is not an uniform
   if ((this->mode == kPrintGlslNone && ir->mode != ir_var_uniform))
   {
     long id = (long)hash_table_find (globals->var_hash, ir);
     if (id == 0)
     {
       id = ++globals->var_counter;
       hash_table_insert (globals->var_hash, (void*)id, ir);
     }
   }

   // keep invariant declaration for builtin variables
   if (strstr(ir->name, "gl_") == ir->name) {
      ralloc_asprintf_append (&buffer, "%s", inv);
      print_var_name (ir);
      return;
   }

   ralloc_asprintf_append (&buffer, "%s%s%s%s",
	  cent, inv, interp[ir->interpolation], mode[decormode][ir->mode]);
   print_precision (ir, ir->type);
   buffer = print_type(buffer, ir->type, false);
   ralloc_asprintf_append (&buffer, " ");
   print_var_name (ir);
   buffer = print_type_post(buffer, ir->type, false);

	if (ir->constant_value &&
		ir->mode != ir_var_shader_in &&
		ir->mode != ir_var_shader_out &&
		ir->mode != ir_var_function_in &&
		ir->mode != ir_var_function_out &&
		ir->mode != ir_var_function_inout)
	{
		ralloc_asprintf_append (&buffer, " = ");
		visit (ir->constant_value);
	}
}

void ir_print_glsl_visitor::visit(ir_function_signature *ir)
{
   print_precision (ir, ir->return_type);
   buffer = print_type(buffer, ir->return_type, true);
   ralloc_asprintf_append (&buffer, " %s (", ir->function_name());

   if (!ir->parameters.is_empty())
   {
	   ralloc_asprintf_append (&buffer, "\n");

	   indentation++;
	   bool first = true;
	   foreach_iter(exec_list_iterator, iter, ir->parameters) {
		  ir_variable *const inst = (ir_variable *) iter.get();

		  if (!first)
			  ralloc_asprintf_append (&buffer, ",\n");
		  indent();
		  inst->accept(this);
		  first = false;
	   }
	   indentation--;

	   ralloc_asprintf_append (&buffer, "\n");
	   indent();
   }

   if (ir->body.is_empty())
   {
	   ralloc_asprintf_append (&buffer, ");\n");
	   return;
   }

   ralloc_asprintf_append (&buffer, ")\n");

   indent();
   ralloc_asprintf_append (&buffer, "{\n");
   indentation++;

	// insert postponed global assigments
	if (strcmp(ir->function()->name, "main") == 0)
	{
		assert (!globals->main_function_done);
		globals->main_function_done = true;
		foreach_iter(exec_list_iterator, it, globals->global_assignements)
		{
			ir_instruction* as = ((ga_entry *)it.get())->ir;
			as->accept(this);
			ralloc_asprintf_append(&buffer, ";\n");
		}
	}

   foreach_iter(exec_list_iterator, iter, ir->body) {
      ir_instruction *const inst = (ir_instruction *) iter.get();

      indent();
      inst->accept(this);
	  ralloc_asprintf_append (&buffer, ";\n");
   }
   indentation--;
   indent();
   ralloc_asprintf_append (&buffer, "}\n");
}

void ir_print_glsl_visitor::visit(ir_function *ir)
{
   bool found_non_builtin_proto = false;

   foreach_iter(exec_list_iterator, iter, *ir) {
      ir_function_signature *const sig = (ir_function_signature *) iter.get();
      if (!sig->is_builtin)
	 found_non_builtin_proto = true;
   }
   if (!found_non_builtin_proto)
      return;

   PrintGlslMode oldMode = this->mode;
   this->mode = kPrintGlslNone;

   foreach_iter(exec_list_iterator, iter, *ir) {
      ir_function_signature *const sig = (ir_function_signature *) iter.get();

      indent();
      sig->accept(this);
      ralloc_asprintf_append (&buffer, "\n");
   }

   this->mode = oldMode;

   indent();
}

static const char *const operator_glsl_strs[] = {
	"~",
	"!",
	"-",
	"abs",
	"sign",
	"1.0/",
	"inversesqrt",
	"sqrt",
	"normalize",
	"exp",
	"log",
	"exp2",
	"log2",
	"int",		// f2i
	"int",		// f2u
	"float",	// i2f
	"bool",		// f2b
	"float",	// b2f
	"bool",		// i2b
	"int",		// b2i
	"float",	// u2f
	"int",		// i2u
	"int",		// u2i
	"float",	// bit i2f
	"int",		// bit f2i
	"float",	// bit u2f
	"int",		// bit f2u
	"any",
	"trunc",
	"ceil",
	"floor",
	"fract",
	"roundEven",
	"sin",
	"cos",
	"sin", // reduced
	"cos", // reduced
	"dFdx",
	"dFdy",
	"packSnorm2x16",
	"packSnorm4x8",
	"packUnorm2x16",
	"packUnorm4x8",
	"packHalf2x16",
	"unpackSnorm2x16",
	"unpackSnorm4x8",
	"unpackUnorm2x16",
	"unpackUnorm4x8",
	"unpackHalf2x16",
	"unpackHalf2x16_splitX_TODO",
	"unpackHalf2x16_splitY_TODO",
	"noise",
	"+",
	"-",
	"*",
	"/",
	"mod",
	"<",
	">",
	"<=",
	">=",
	"equal",
	"notEqual",
	"==",
	"!=",
	"<<",
	">>",
	"&",
	"^",
	"|",
	"&&",
	"^^",
	"||",
	"dot",
	"min",
	"max",
	"pow",
	"packHalf2x16_split_TODO",
	"uboloadTODO",
	"clamp",
	"mix",
	"vectorTODO",
};

static const char *const operator_vec_glsl_strs[] = {
	"lessThan",
	"greaterThan",
	"lessThanEqual",
	"greaterThanEqual",
	"equal",
	"notEqual",
};

static bool is_binop_func_like(ir_expression_operation op, const glsl_type* type)
{
	if (op == ir_binop_equal ||
		op == ir_binop_nequal ||
		op == ir_binop_mod ||
		(op >= ir_binop_dot && op <= ir_binop_pow))
		return true;
	if (type->is_vector() && (op >= ir_binop_less && op <= ir_binop_nequal))
	{
		return true;
	}
	return false;
}

void ir_print_glsl_visitor::visit(ir_expression *ir)
{
	if (ir->get_num_operands() == 1) {
		if (ir->operation >= ir_unop_f2i && ir->operation < ir_unop_any) {
			buffer = print_type(buffer, ir->type, true);
			ralloc_asprintf_append(&buffer, "(");
		} else if (ir->operation == ir_unop_rcp) {
			ralloc_asprintf_append (&buffer, "(1.0/(");
		} else {
			ralloc_asprintf_append (&buffer, "%s(", operator_glsl_strs[ir->operation]);
		}
		if (ir->operands[0])
			ir->operands[0]->accept(this);
		ralloc_asprintf_append (&buffer, ")");
		if (ir->operation == ir_unop_rcp) {
			ralloc_asprintf_append (&buffer, ")");
		}
	}
	else if (is_binop_func_like(ir->operation, ir->type))
	{
		if (ir->operation == ir_binop_mod)
		{
			ralloc_asprintf_append (&buffer, "(");
			buffer = print_type(buffer, ir->type, true);
			ralloc_asprintf_append (&buffer, "(");
		}
		if (ir->type->is_vector() && (ir->operation >= ir_binop_less && ir->operation <= ir_binop_nequal))
			ralloc_asprintf_append (&buffer, "%s (", operator_vec_glsl_strs[ir->operation-ir_binop_less]);
		else
			ralloc_asprintf_append (&buffer, "%s (", operator_glsl_strs[ir->operation]);

		if (ir->operands[0])
			ir->operands[0]->accept(this);
		ralloc_asprintf_append (&buffer, ", ");
		if (ir->operands[1])
			ir->operands[1]->accept(this);
		ralloc_asprintf_append (&buffer, ")");
		if (ir->operation == ir_binop_mod)
            ralloc_asprintf_append (&buffer, "))");
	}
	else if (ir->get_num_operands() == 2)
	{
		ralloc_asprintf_append (&buffer, "(");
		if (ir->operands[0])
			ir->operands[0]->accept(this);

		ralloc_asprintf_append (&buffer, " %s ", operator_glsl_strs[ir->operation]);

		if (ir->operands[1])
			ir->operands[1]->accept(this);
		ralloc_asprintf_append (&buffer, ")");
	}
	else
	{
		// ternary op
		ralloc_asprintf_append (&buffer, "%s (", operator_glsl_strs[ir->operation]);
		if (ir->operands[0])
			ir->operands[0]->accept(this);
		ralloc_asprintf_append (&buffer, ", ");
		if (ir->operands[1])
			ir->operands[1]->accept(this);
		ralloc_asprintf_append (&buffer, ", ");
		if (ir->operands[2])
			ir->operands[2]->accept(this);
		ralloc_asprintf_append (&buffer, ")");
	}
}

// [glsl_sampler_dim]
static const char* tex_sampler_dim_name[] = {
	"1D", "2D", "3D", "Cube", "Rect", "Buf", "External",
};
static int tex_sampler_dim_size[] = {
	1, 2, 3, 3, 2, 2, 2,
};

void ir_print_glsl_visitor::visit(ir_texture *ir)
{
	glsl_sampler_dim sampler_dim = (glsl_sampler_dim)ir->sampler->type->sampler_dimensionality;
	const bool is_shadow = ir->sampler->type->sampler_shadow;
	const glsl_type* uv_type = ir->coordinate->type;
	const int uv_dim = uv_type->vector_elements;
	int sampler_uv_dim = tex_sampler_dim_size[sampler_dim];
	if (is_shadow)
		sampler_uv_dim = 3;
	const bool is_proj = (uv_dim > sampler_uv_dim);

    // texture function name
    //ACS: shadow lookups and lookups with dimensionality included in the name were deprecated in 130
    if(state->language_version<130)
    {
        ralloc_asprintf_append (&buffer, "%s", is_shadow ? "shadow" : "texture");
        ralloc_asprintf_append (&buffer, "%s", tex_sampler_dim_name[sampler_dim]);
    }
    else
    {
        ralloc_asprintf_append (&buffer, "texture");
    }

	if (is_proj)
		ralloc_asprintf_append (&buffer, "Proj");
	if (ir->op == ir_txl)
		ralloc_asprintf_append (&buffer, "Lod");
	if (ir->op == ir_txd)
		ralloc_asprintf_append (&buffer, "Grad");

	if (state->es_shader)
	{
		if ( (is_shadow && state->EXT_shadow_samplers_enable) ||
			(ir->op == ir_txl && state->EXT_shader_texture_lod_enable) )
		{
			ralloc_asprintf_append (&buffer, "EXT");
		}
	}

	if(ir->op == ir_txd)
	{
		if(state->es_shader && state->EXT_shader_texture_lod_enable)
			ralloc_asprintf_append (&buffer, "EXT");
		else if(!state->es_shader && state->ARB_shader_texture_lod_enable)
			ralloc_asprintf_append (&buffer, "ARB");
	}

	ralloc_asprintf_append (&buffer, " (");

	// sampler
	ir->sampler->accept(this);
	ralloc_asprintf_append (&buffer, ", ");

	// texture coordinate
	ir->coordinate->accept(this);

	// lod bias
	if (ir->op == ir_txb)
	{
		ralloc_asprintf_append (&buffer, ", ");
		ir->lod_info.bias->accept(this);
	}

	// lod
	if (ir->op == ir_txl)
	{
		ralloc_asprintf_append (&buffer, ", ");
		ir->lod_info.lod->accept(this);
	}

	// grad
	if (ir->op == ir_txd)
	{
		ralloc_asprintf_append (&buffer, ", ");
		ir->lod_info.grad.dPdx->accept(this);
		ralloc_asprintf_append (&buffer, ", ");
		ir->lod_info.grad.dPdy->accept(this);
	}

	/*

   if (ir->offset != NULL) {
      ir->offset->accept(this);
   }

   if (ir->op != ir_txf) {
      if (ir->projector)
	 ir->projector->accept(this);
      else
	 ralloc_asprintf_append (&buffer, "1");

      if (ir->shadow_comparitor) {
	 ralloc_asprintf_append (&buffer, " ");
	 ir->shadow_comparitor->accept(this);
      } else {
	 ralloc_asprintf_append (&buffer, " ()");
      }
   }

   ralloc_asprintf_append (&buffer, " ");
   switch (ir->op)
   {
   case ir_tex:
      break;
   case ir_txb:
      ir->lod_info.bias->accept(this);
      break;
   case ir_txl:
   case ir_txf:
      ir->lod_info.lod->accept(this);
      break;
   case ir_txd:
      ralloc_asprintf_append (&buffer, "(");
      ir->lod_info.grad.dPdx->accept(this);
      ralloc_asprintf_append (&buffer, " ");
      ir->lod_info.grad.dPdy->accept(this);
      ralloc_asprintf_append (&buffer, ")");
      break;
   };
	 */
   ralloc_asprintf_append (&buffer, ")");
}

void ir_print_glsl_visitor::visit(ir_swizzle *ir)
{
   const unsigned swiz[4] = {
      ir->mask.x,
      ir->mask.y,
      ir->mask.z,
      ir->mask.w,
   };

	if (ir->val->type == glsl_type::float_type || ir->val->type == glsl_type::int_type)
	{
		if (ir->mask.num_components != 1)
		{
			buffer = print_type(buffer, ir->type, true);
			ralloc_asprintf_append (&buffer, "(");
		}
	}

	ir->val->accept(this);

	if (ir->val->type == glsl_type::float_type || ir->val->type == glsl_type::int_type)
	{
		if (ir->mask.num_components != 1)
		{
			ralloc_asprintf_append (&buffer, ")");
		}
		return;
	}

   ralloc_asprintf_append (&buffer, ".");
   for (unsigned i = 0; i < ir->mask.num_components; i++) {
		ralloc_asprintf_append (&buffer, "%c", "xyzw"[swiz[i]]);
   }
}

void ir_print_glsl_visitor::visit(ir_dereference_variable *ir)
{
   ir_variable *var = ir->variable_referenced();
   print_var_name (var);
}

void ir_print_glsl_visitor::visit(ir_dereference_array *ir)
{
   ir->array->accept(this);
   ralloc_asprintf_append (&buffer, "[");
   ir->array_index->accept(this);
   ralloc_asprintf_append (&buffer, "]");
}

void ir_print_glsl_visitor::visit(ir_dereference_record *ir)
{
   ir->record->accept(this);
   ralloc_asprintf_append (&buffer, ".%s", ir->field);
}

void ir_print_glsl_visitor::visit(ir_assignment *ir)
{
	// assignments in global scope are postponed to main function
	if (this->mode != kPrintGlslNone)
	{
		assert (!this->globals->main_function_done);
		this->globals->global_assignements.push_tail (new(this->globals->mem_ctx) ga_entry(ir));
		ralloc_asprintf_append(&buffer, "//"); // for the ; that will follow (ugly, I know)
		return;
	}

   if (ir->condition)
   {
      ir->condition->accept(this);
	  ralloc_asprintf_append (&buffer, " ");
   }

   ir->lhs->accept(this);

   char mask[5];
   unsigned j = 0;
   const glsl_type* lhsType = ir->lhs->type;
   const glsl_type* rhsType = ir->rhs->type;
   if (ir->lhs->type->vector_elements > 1 && ir->write_mask != (1<<ir->lhs->type->vector_elements)-1)
   {
	   for (unsigned i = 0; i < 4; i++) {
		   if ((ir->write_mask & (1 << i)) != 0) {
			   mask[j] = "xyzw"[i];
			   j++;
		   }
	   }
	   lhsType = glsl_type::get_instance(lhsType->base_type, j, 1);
   }
   mask[j] = '\0';
   bool hasWriteMask = false;
   if (mask[0])
   {
	   ralloc_asprintf_append (&buffer, ".%s", mask);
	   hasWriteMask = true;
   }

   ralloc_asprintf_append (&buffer, " = ");

   bool typeMismatch = (lhsType != rhsType);
   const bool addSwizzle = hasWriteMask && typeMismatch;
   if (typeMismatch)
   {
	   if (!addSwizzle)
		buffer = print_type(buffer, lhsType, true);
	   ralloc_asprintf_append (&buffer, "(");
   }

   ir->rhs->accept(this);

   if (typeMismatch)
   {
	   ralloc_asprintf_append (&buffer, ")");
	   if (addSwizzle)
		   ralloc_asprintf_append (&buffer, ".%s", mask);
   }

}

static char* print_float (char* buffer, float f)
{
	// Kind of roundabout way, but this is to satisfy two things:
	// * MSVC and gcc-based compilers differ a bit in how they treat float
	//   widht/precision specifiers. Want to match for tests.
	// * GLSL (early version at least) require floats to have ".0" or
	//   exponential notation.
	char tmp[64];
	snprintf(tmp, 64, "%.6g", f);

	char* posE = NULL;
	posE = strchr(tmp, 'e');
	if (!posE)
		posE = strchr(tmp, 'E');

	#if _MSC_VER
	// While gcc would print something like 1.0e+07, MSVC will print 1.0e+007 -
	// only for exponential notation, it seems, will add one extra useless zero. Let's try to remove
	// that so compiler output matches.
	if (posE != NULL)
	{
		if((posE[1] == '+' || posE[1] == '-') && posE[2] == '0')
		{
			char* p = posE+2;
			while (p[0])
			{
				p[0] = p[1];
				++p;
			}
		}
	}
	#endif

	ralloc_strcat (&buffer, tmp);

	// need to append ".0"?
	if (!strchr(tmp,'.') && (posE == NULL))
		ralloc_strcat(&buffer, ".0");
	return buffer;
}

void ir_print_glsl_visitor::visit(ir_constant *ir)
{
	const glsl_type* type = ir->type;

	if (type == glsl_type::float_type)
	{
		buffer = print_float (buffer, ir->value.f[0]);
		return;
	}
	else if (type == glsl_type::int_type)
	{
		ralloc_asprintf_append (&buffer, "%d", ir->value.i[0]);
		return;
	}
	else if (type == glsl_type::uint_type)
	{
		ralloc_asprintf_append (&buffer, "%u", ir->value.u[0]);
		return;
	}

   const glsl_type *const base_type = ir->type->get_base_type();

   buffer = print_type(buffer, type, true);
   ralloc_asprintf_append (&buffer, "(");

   if (ir->type->is_array()) {
      for (unsigned i = 0; i < ir->type->length; i++)
      {
	 if (i != 0)
	    ralloc_asprintf_append (&buffer, ", ");
	 ir->get_array_element(i)->accept(this);
      }
   } else {
      bool first = true;
      for (unsigned i = 0; i < ir->type->components(); i++) {
	 if (!first)
	    ralloc_asprintf_append (&buffer, ", ");
	 first = false;
	 switch (base_type->base_type) {
	 case GLSL_TYPE_UINT:  ralloc_asprintf_append (&buffer, "%u", ir->value.u[i]); break;
	 case GLSL_TYPE_INT:   ralloc_asprintf_append (&buffer, "%d", ir->value.i[i]); break;
	 case GLSL_TYPE_FLOAT: buffer = print_float(buffer, ir->value.f[i]); break;
	 case GLSL_TYPE_BOOL:  ralloc_asprintf_append (&buffer, "%d", ir->value.b[i]); break;
	 default: assert(0);
	 }
      }
   }
   ralloc_asprintf_append (&buffer, ")");
}

void
ir_print_glsl_visitor::visit(ir_call *ir)
{
	// calls in global scope are postponed to main function
	if (this->mode != kPrintGlslNone)
	{
		assert (!this->globals->main_function_done);
		this->globals->global_assignements.push_tail (new(this->globals->mem_ctx) ga_entry(ir));
		ralloc_asprintf_append(&buffer, "//"); // for the ; that will follow (ugly, I know)
		return;
	}

	if (ir->return_deref)
	{
		visit(ir->return_deref);
		ralloc_asprintf_append (&buffer, " = ");
	}

   ralloc_asprintf_append (&buffer, "%s (", ir->callee_name());
   bool first = true;
   foreach_iter(exec_list_iterator, iter, *ir) {
      ir_instruction *const inst = (ir_instruction *) iter.get();
	  if (!first)
		  ralloc_asprintf_append (&buffer, ", ");
      inst->accept(this);
	  first = false;
   }
   ralloc_asprintf_append (&buffer, ")");
}

void
ir_print_glsl_visitor::visit(ir_return *ir)
{
   ralloc_asprintf_append (&buffer, "return");

   ir_rvalue *const value = ir->get_value();
   if (value) {
      ralloc_asprintf_append (&buffer, " ");
      value->accept(this);
   }
}

void
ir_print_glsl_visitor::visit(ir_discard *ir)
{
   ralloc_asprintf_append (&buffer, "discard");

   if (ir->condition != NULL) {
      ralloc_asprintf_append (&buffer, " TODO ");
      ir->condition->accept(this);
   }
}

void
ir_print_glsl_visitor::visit(ir_if *ir)
{
   ralloc_asprintf_append (&buffer, "if (");
   ir->condition->accept(this);

   ralloc_asprintf_append (&buffer, ") {\n");
   indentation++;

   foreach_iter(exec_list_iterator, iter, ir->then_instructions) {
      ir_instruction *const inst = (ir_instruction *) iter.get();

      indent();
      inst->accept(this);
      ralloc_asprintf_append (&buffer, ";\n");
   }

   indentation--;
   indent();
   ralloc_asprintf_append (&buffer, "}");

   if (!ir->else_instructions.is_empty())
   {
	   ralloc_asprintf_append (&buffer, " else {\n");
	   indentation++;

	   foreach_iter(exec_list_iterator, iter, ir->else_instructions) {
		  ir_instruction *const inst = (ir_instruction *) iter.get();

		  indent();
		  inst->accept(this);
		  ralloc_asprintf_append (&buffer, ";\n");
	   }
	   indentation--;
	   indent();
	   ralloc_asprintf_append (&buffer, "}");
   }
}

void
ir_print_glsl_visitor::visit(ir_loop *ir)
{
	bool noData = (ir->counter == NULL && ir->from == NULL && ir->to == NULL && ir->increment == NULL);
	if (noData) {
		ralloc_asprintf_append (&buffer, "while (true) {\n");
		indentation++;
		foreach_iter(exec_list_iterator, iter, ir->body_instructions) {
			ir_instruction *const inst = (ir_instruction *) iter.get();
			indent();
			inst->accept(this);
			ralloc_asprintf_append (&buffer, ";\n");
		}
		indentation--;
		indent();
		ralloc_asprintf_append (&buffer, "}");
		return;
	}

	bool canonicalFor = (ir->counter && ir->from && ir->to && ir->increment);
	if (canonicalFor)
	{
		ralloc_asprintf_append (&buffer, "for (");
		ir->counter->accept (this);
		ralloc_asprintf_append (&buffer, " = ");
		ir->from->accept (this);
		ralloc_asprintf_append (&buffer, "; ");
		print_var_name (ir->counter);

		// IR cmp operator is when to terminate loop; whereas GLSL for loop syntax
		// is while to continue the loop. Invert the meaning of operator when outputting.
		const char* termOp = NULL;
		switch (ir->cmp) {
		case ir_binop_less: termOp = ">="; break;
		case ir_binop_greater: termOp = "<="; break;
		case ir_binop_lequal: termOp = ">"; break;
		case ir_binop_gequal: termOp = "<"; break;
		case ir_binop_equal: termOp = "!="; break;
		case ir_binop_nequal: termOp = "=="; break;
		default: assert(false);
		}
		ralloc_asprintf_append (&buffer, " %s ", termOp);
		ir->to->accept (this);
		ralloc_asprintf_append (&buffer, "; ");
		// IR already has instructions that modify the loop counter in the body
		//print_var_name (ir->counter);
		//ralloc_asprintf_append (&buffer, " = ");
		//print_var_name (ir->counter);
		//ralloc_asprintf_append (&buffer, "+(");
		//ir->increment->accept (this);
		//ralloc_asprintf_append (&buffer, ")");
		ralloc_asprintf_append (&buffer, ") {\n");
		indentation++;
		foreach_iter(exec_list_iterator, iter, ir->body_instructions) {
			ir_instruction *const inst = (ir_instruction *) iter.get();
			indent();
			inst->accept(this);
			ralloc_asprintf_append (&buffer, ";\n");
		}
		indentation--;
		indent();
		ralloc_asprintf_append (&buffer, "}");
		return;
	}

   ralloc_asprintf_append (&buffer, "( TODO loop (");
   if (ir->counter != NULL)
      ir->counter->accept(this);
   ralloc_asprintf_append (&buffer, ") (");
   if (ir->from != NULL)
      ir->from->accept(this);
   ralloc_asprintf_append (&buffer, ") (");
   if (ir->to != NULL)
      ir->to->accept(this);
   ralloc_asprintf_append (&buffer, ") (");
   if (ir->increment != NULL)
      ir->increment->accept(this);
   ralloc_asprintf_append (&buffer, ") (\n");
   indentation++;

   foreach_iter(exec_list_iterator, iter, ir->body_instructions) {
      ir_instruction *const inst = (ir_instruction *) iter.get();

      indent();
      inst->accept(this);
      ralloc_asprintf_append (&buffer, ";\n");
   }
   indentation--;
   indent();
   ralloc_asprintf_append (&buffer, "))\n");
}

void
ir_print_glsl_visitor::visit(ir_loop_jump *ir)
{
   ralloc_asprintf_append (&buffer, "%s", ir->is_break() ? "break" : "continue");
}

void
ir_print_glsl_visitor::visit(ir_precision_statement *ir)
{
	ralloc_asprintf_append (&buffer, "%s", ir->precision_statement);
}

void
ir_print_glsl_visitor::visit(ir_typedecl_statement *ir)
{
	const glsl_type *const s = ir->type_decl;
	ralloc_asprintf_append (&buffer, "struct %s {\n", s->name);

	for (unsigned j = 0; j < s->length; j++) {
		ralloc_asprintf_append (&buffer, "  ");
		if (state->es_shader)
			ralloc_asprintf_append (&buffer, "%s", get_precision_string(s->fields.structure[j].precision));
		buffer = print_type(buffer, s->fields.structure[j].type, false);
		ralloc_asprintf_append (&buffer, " %s", s->fields.structure[j].name);
		buffer = print_type_post(buffer, s->fields.structure[j].type, false);
		ralloc_asprintf_append (&buffer, ";\n");
	}
	ralloc_asprintf_append (&buffer, "}");
}

redpajama_set_name: RedPajamaGithub


text:
Amitabh Bachchan to face police probe over Barabanki land
By IANS-CT / June 1, 2010
Lucknow, May 31 (Calcutta Tube) Bollywood actor Amitabh Bachchan is likely to face a probe after an Uttar Pradesh court Monday directed police to look into an allegation of cheating a villager by not building a women's college in his actress daughter-in-law Aishwarya Rai's name.
The complaint was filed May 29 by Raj Kumari, the village head of Daulatpur village, about 40 km from here in Barabanki district, before the chief judicial magistrate, who had fixed May 31 for hearing.
The court directed police to carry out preliminary investigation and submit a report June 10.
The court is also expected to take a final decision on the complaint to get a criminal case registered against Bachchan for failing to keep his promise to the people of the village, where he had acquired land, that he would build there a college for women.
Bachchan's proximity to former Samajwadi Party general secretary Amar Singh allegedly helped him to get agricultural land allotted to him through fraudulent means, the complaint said.
The actor purchased private land. He visited Daulatpur in 2006 along with Singh, wife Jaya, son Abhishek and Aishwarya to declare amidst much fanfare that he would build a women's college.
The complainant has also alleged that she was intimidated and threatened by Bachchan's men because she had questioned the mega star's 'false' declaration.
Tags: Aishwarya Rai, Amitabh Bachchan, Bollywood, Indian actor
Richa, Nikhil play thieves in Tamanchey
By Calcutta Tube Team / June 28, 2012
Arjun Kapoor bags '2 States'
'Slap Bonanza' on Pavitra Rishta sets
Sheeba Chaddha enters Hitler Didi
Ajay Devgan, Kajol in female foeticide film
Maruti sales top 100,000 a month for first time
R Madhavan says making novel into movie is difficult, writing screenplay is challenging

redpajama_set_name: RedPajamaCommonCrawl


text:
from __future__ import absolute_import
import sys
import os
import netlib.utils
from . import flow, filt, utils
from .protocol import http

class DumpError(Exception):
    pass

class Options(object):
    attributes = [
        "app",
        "app_host",
        "app_port",
        "anticache",
        "anticomp",
        "client_replay",
        "filtstr",
        "flow_detail",
        "keepserving",
        "kill",
        "no_server",
        "nopop",
        "refresh_server_playback",
        "replacements",
        "rfile",
        "rheaders",
        "setheaders",
        "server_replay",
        "scripts",
        "showhost",
        "stickycookie",
        "stickyauth",
        "stream_large_bodies",
        "verbosity",
        "outfile",
        "replay_ignore_content",
        "replay_ignore_params",
    ]

    def __init__(self, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)
        for i in self.attributes:
            if not hasattr(self, i):
                setattr(self, i, None)

def str_response(resp):
    r = "%s %s"%(resp.code, resp.msg)
    if resp.is_replay:
        r = "[replay] " + r
    return r

def str_request(f, showhost):
    if f.client_conn:
        c = f.client_conn.address.host
    else:
        c = "[replay]"
    r = "%s %s %s"%(c, f.request.method, f.request.pretty_url(showhost))
    if f.request.stickycookie:
        r = "[stickycookie] " + r
    return r

class DumpMaster(flow.FlowMaster):
    def __init__(self, server, options, outfile=sys.stdout):
        flow.FlowMaster.__init__(self, server, flow.State())
        self.outfile = outfile
        self.o = options
        self.anticache = options.anticache
        self.anticomp = options.anticomp
        self.showhost = options.showhost
        self.replay_ignore_params = options.replay_ignore_params
        self.replay_ignore_content = options.replay_ignore_content
        self.refresh_server_playback = options.refresh_server_playback

        self.set_stream_large_bodies(options.stream_large_bodies)

        if options.filtstr:
            self.filt = filt.parse(options.filtstr)
        else:
            self.filt = None

        if options.stickycookie:
            self.set_stickycookie(options.stickycookie)

        if options.stickyauth:
            self.set_stickyauth(options.stickyauth)

        if options.outfile:
            path = os.path.expanduser(options.outfile[0])
            try:
                f = file(path, options.outfile[1])
                self.start_stream(f, self.filt)
            except IOError, v:
                raise DumpError(v.strerror)

        if options.replacements:
            for i in options.replacements:
                self.replacehooks.add(*i)

        if options.setheaders:
            for i in options.setheaders:
                self.setheaders.add(*i)

        if options.server_replay:
            self.start_server_playback(
                self._readflow(options.server_replay),
                options.kill, options.rheaders,
                not options.keepserving,
                options.nopop,
                options.replay_ignore_params,
                options.replay_ignore_content
            )

        if options.client_replay:
            self.start_client_playback(
                self._readflow(options.client_replay),
                not options.keepserving
            )

        scripts = options.scripts or []
        for command in scripts:
            err = self.load_script(command)
            if err:
                raise DumpError(err)

        if options.rfile:
            path = os.path.expanduser(options.rfile)
            try:
                f = file(path, "rb")
                freader = flow.FlowReader(f)
            except IOError, v:
                raise DumpError(v.strerror)
            try:
                self.load_flows(freader)
            except flow.FlowReadError, v:
                self.add_event("Flow file corrupted. Stopped loading.", "error")

        if self.o.app:
            self.start_app(self.o.app_host, self.o.app_port)

    def _readflow(self, path):
        path = os.path.expanduser(path)
        try:
            f = file(path, "rb")
            flows = list(flow.FlowReader(f).stream())
        except (IOError, flow.FlowReadError), v:
            raise DumpError(v.strerror)
        return flows

    def add_event(self, e, level="info"):
        needed = dict(error=0, info=1, debug=2).get(level, 1)
        if self.o.verbosity >= needed:
            print >> self.outfile, e
            self.outfile.flush()

    def indent(self, n, t):
        l = str(t).strip().split("\n")
        return "\n".join(" "*n + i for i in l)

    def _process_flow(self, f):
        self.state.delete_flow(f)
        if self.filt and not f.match(self.filt):
            return

        if f.response:
            if self.o.flow_detail > 0:
                if f.response.content == http.CONTENT_MISSING:
                    sz = "(content missing)"
                else:
                    sz = utils.pretty_size(len(f.response.content))
                result = " << %s %s"%(str_response(f.response), sz)
            if self.o.flow_detail > 1:
                result = result + "\n\n" + self.indent(4, f.response.headers)
            if self.o.flow_detail > 2:
                if f.response.content == http.CONTENT_MISSING:
                    cont = self.indent(4, "(content missing)")
                elif utils.isBin(f.response.content):
                    d = netlib.utils.hexdump(f.response.content)
                    d = "\n".join("%s\t%s %s"%i for i in d)
                    cont = self.indent(4, d)
                elif f.response.content:
                    cont = self.indent(4, f.response.content)
                else:
                    cont = ""
                result = result + "\n\n" + cont
        elif f.error:
            result = " << %s"%f.error.msg

        if self.o.flow_detail == 1:
            print >> self.outfile, str_request(f, self.showhost)
            print >> self.outfile, result
        elif self.o.flow_detail == 2:
            print >> self.outfile, str_request(f, self.showhost)
            print >> self.outfile, self.indent(4, f.request.headers)
            print >> self.outfile
            print >> self.outfile, result
            print >> self.outfile, "\n"
        elif self.o.flow_detail >= 3:
            print >> self.outfile, str_request(f, self.showhost)
            print >> self.outfile, self.indent(4, f.request.headers)
            if f.request.content != http.CONTENT_MISSING and utils.isBin(f.request.content):
                d = netlib.utils.hexdump(f.request.content)
                d = "\n".join("%s\t%s %s"%i for i in d)
                print >> self.outfile, self.indent(4, d)
            elif f.request.content:
                print >> self.outfile, self.indent(4, f.request.content)
            print >> self.outfile
            print >> self.outfile, result
            print >> self.outfile, "\n"
        if self.o.flow_detail:
            self.outfile.flush()

    def handle_request(self, f):
        flow.FlowMaster.handle_request(self, f)
        if f:
            f.reply()
        return f

    def handle_response(self, f):
        flow.FlowMaster.handle_response(self, f)
        if f:
            f.reply()
            self._process_flow(f)
        return f

    def handle_error(self, f):
        flow.FlowMaster.handle_error(self, f)
        if f:
            self._process_flow(f)
        return f

    def shutdown(self):  # pragma: no cover
        return flow.FlowMaster.shutdown(self)

    def run(self):  # pragma: no cover
        if self.o.rfile and not self.o.keepserving:
            self.shutdown()
            return
        try:
            return flow.FlowMaster.run(self)
        except BaseException:
            self.shutdown()
            raise


text:
Q: How do I add image to drawable in android studio? I want to add Button icon in the drawable resource folder.
To do this I tried to add the png icon as Image Asset but when I choose Action Bar and Tab Icon from the Asset Type dropdown list I find the image is not clear and if I returned to the Luncher Icon option the image becomes clear.
Is there anyone has a solution?
Action Bar and Tab Icon (Option)
Luncher Icon (Option)

A: Your png image is converted to white color since you choose "Holo Dark" theme.
This link explains more details how Assets Studio works as well as how the image is converted when you choose "Action bar and tab icon" option.

A:
but when I choose Action Bar and Tab Icon from the Asset Type dropdown
  list I find the image is not clear and if I returned to the Luncher
  Icon option the image becomes clear.

As it is clear, You can use Launcher Icon for choosing the application Launcher.which means, you can use it with default color i mean, that is available for Launcher Icon only.
And since you are using Action Bar and Tab Icon this options can be used for two colors.like dark theme and white.
The best option to use for that Button is, Goto ImageAsset -> Launcher Icon -> check the ClipArt to enabled and then you can use that image with any colors you want.
Or you can simply use: Android Drawable Importer

A: The way I have typically seen this achieved is by dragging the image resource into the drawable folder, and specifying which pixel density folder you wish it to be placed into. Then, you can point to the specific drawable in code by using either it's int value:
R.drawable.icon_luncher

or by retrieving a drawable object directly:
Actionbar actionBar = getActionBar();

//requires valid context

if (actionBar!=null){

Drawable tabIcon = ContextCompat.getDrawable(context, R.drawable.icon_lunch)

actionBar.addTab(actionBar.newTab().setText("my tab")
                     .setIcon(tabIcon)
                     .setTabListener(this));
}

I would say to try using Toolbar instead of actionbar. It's much more functional than it's Actionbar predecessor, and can work similarly like so:
Toolbar toolBar = (ToolBar) findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
ActionBar actionBar = getSupportActionBar();
//check if null
if(actionBar!=null){
//add actionbar functionality here
}

redpajama_set_name: RedPajamaStackExchange


text:
Biografia
Nato in una famiglia di quaccheri nella contea di Loudoun, Henry S. Taylor studiò all'Università della Virginia, laureandosi nel 1965, e alla Hollins University, dove conseguì la laurea magistrale nel 1966. Dal 1971 al 2003 insegnò literratura inglese all'American University.

Autore di una quindicina di raccolte poetiche tra il 1965 e il 2006, Taylor vinse il Premio Pulitzer per la poesia nel 1986 per The Flying Change. All'attività poetica, Taylor affiancò quella di traduttore, rendendo in inglese il Curculio di Plauto e l'Elettra di Sofocle.

Opere (parziale)
 The Horse Show at Midnight and An Afternoon of Pocket Billiards, Louisiana State University Press, 1965. ISBN 978-0-8071-1763-7
 Poetry: Points of Departure, Winthrop, 1974. ISBN 978-0-87626-678-6
 An Afternoon of Pocket Billiards, University of Utah Press, 1975. ISBN 0-87480-098-6
 The Water of Light: A Miscellany in Honor of Brewster Ghiselin, University of Utah Press, 1976. ISBN 0-87480-105-2
 The Children of Herakles, Oxford University Press, 1982. ISBN 978-0-19-507288-4
 The Flying Change, Louisiana State University Press, 1986. ISBN 978-0-8071-1263-2
 Compulsory Figures: Essays on Recent American Poets, Louisiana State University Press, 1992. ISBN 978-0-8071-1755-2
 Understanding Fiction: Poems, 1986–1996, Louisiana State University Press, 1996. ISBN 978-0-8071-2111-5
 Brief Candles: 101 Clerihews, Louisiana State University Press, 2000. ISBN 978-0-8071-2564-9
 Crooked Run, Louisiana State University Press, 2006. ISBN 978-0-8071-3125-1

Note

Collegamenti esterni

Studenti dell'Università della Virginia Occidentale
Professori dell'American University
Vincitori del Premio Pulitzer
Traduttori dal greco all'inglese
Traduttori dal latino

redpajama_set_name: RedPajamaWikipedia


text:
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.7.6.1">
  <compounddef id="structboost_1_1geometry_1_1resolve__variant_1_1simplify" kind="struct" prot="public">
    <compoundname>boost::geometry::resolve_variant::simplify</compoundname>
    <includes local="no">simplify.hpp</includes>
    <templateparamlist>
      <param>
        <type>typename Geometry</type>
      </param>
    </templateparamlist>
      <sectiondef kind="public-static-func">
      <memberdef kind="function" id="structboost_1_1geometry_1_1resolve__variant_1_1simplify_1a2b98a9a1ebba7331b2ea555838091e2f" prot="public" static="yes" const="no" explicit="no" inline="yes" virt="non-virtual">
        <templateparamlist>
          <param>
            <type>typename Distance</type>
          </param>
          <param>
            <type>typename Strategy</type>
          </param>
        </templateparamlist>
        <type>void</type>
        <definition>static void boost::geometry::resolve_variant::simplify< Geometry >::apply</definition>
        <argsstring>(Geometry const &geometry, Geometry &out, Distance const &max_distance, Strategy const &strategy)</argsstring>
        <name>apply</name>
        <param>
          <type>Geometry const &</type>
          <declname>geometry</declname>
        </param>
        <param>
          <type>Geometry &</type>
          <declname>out</declname>
        </param>
        <param>
          <type>Distance const &</type>
          <declname>max_distance</declname>
        </param>
        <param>
          <type>Strategy const &</type>
          <declname>strategy</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/travis/build/boostorg/boost/boost/geometry/algorithms/simplify.hpp" line="399" bodyfile="/home/travis/build/boostorg/boost/boost/geometry/algorithms/simplify.hpp" bodystart="395" bodyend="401"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <location file="/home/travis/build/boostorg/boost/boost/geometry/algorithms/simplify.hpp" line="393" bodyfile="/home/travis/build/boostorg/boost/boost/geometry/algorithms/simplify.hpp" bodystart="392" bodyend="402"/>
    <listofallmembers>
      <member refid="structboost_1_1geometry_1_1resolve__variant_1_1simplify_1a2b98a9a1ebba7331b2ea555838091e2f" prot="public" virt="non-virtual"><scope>boost::geometry::resolve_variant::simplify</scope><name>apply</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>


Whenever I look at my camera sitting alone on my table, an urge to pick it up and get outside to a new place overcomes me often. And then something incredible happens. I end up exploring a new place; a new perspective. On our way to the Big Basin Redwood State Park in California, we visited a Buddhist temple, the Taungpulu Kaba- Aye Monastery – a hidden gem. It is situated amidst redwood trees. This place is a stark contrast to the otherwise high paced silicon valley of California.
The Valley in Silicon Valley, California!
Information crisscrosses across the globe every quarter of a second; we crisscross real and virtual worlds with the tip of our fingers; the age of no unknown and the age where cloud is no longer limited to those visible collections of particles of water in the air. And we all owe these to the beautiful, bright and the best minds of the Silicon Valley, which is located in the northern part of the U.S. State of California.
A bouquet of beautiful sunsets!
I have a very simple prescription for an idyllic life; fill your life with some spectacular sunrises and serene sunsets. I have been following this for long. Sunsets never cease to amaze me. A resplendent sunset can put a sparkling end, even to a dull and chaotic day, and promise a new dawn. Nights no matter how long and dark, slowly melt away with the rising sun, and we all live anew. I feel that the past is accumulating more and future is receding fast. Let me look back to the bouquet of beautiful sunsets that are etched in my heart forever.
A sea cave, a canoe and a thrill in Phang Nga Bay, Phuket, Thailand!
When I explore different facets of nature I find myself exude nothing other than unalloyed joy. These experiences are unparalleled to any. Today I will write about one such experience in Phang Nga Bay which is a Ramasar site, located in the Andaman sea between the island of Phuket and the mainland of the Malay peninsula of southern Thailand. An extensive section of the bay has been protected as the Ao Phang Nga National Park, famous for its classic karst (landscape underlain by limestone) scenery and is a network of 42 islands and islets.
hushhhhhhhh!! Don't speak, forget all uncertainties, keep aside all your problems for the moment. Come, I will take you to a place where peace is the only comfort amidst the silence that breaks occasionally when the soft breeze flows in between the green leaves. Perhaps, appreciation and mesmerizing glance are the only things that we can give back to this beautiful land. It claims nothing though! It only gives unconditionally.
An unusual love story between the sky and the cloud!
Sun drenched mornings that bask in the golden sunshine, walking with the tweeting and chirping birds, adorned with a shimmering blue sky above, filled with fragrances from rose, jasmine, violet and that of lily and the soothing breeze caressing it with tender touch, are indeed invigorating and exquisite. But did you ever feel the loneliness of the sky in such mornings? It shimmers yet remains quiescent, it is charming yet motionless. I feel the sky wait for her beloved in those mornings. But whom does the sky love?


King Ranch Colony continues to stress its disdain for education.
The King Ranch Colony, featured in National Geographic's reality television show, Meet the Hutterites, continues to depict education as something to be thrown away and feared, viewed by many colony members as a threat to the Hutterite way of life.
On the latest episode, Tammy, a 17-year-old Hutterite girl, was forced by her family to choose between living in the Hutterite colony and finishing her high school education. Pressured by her family, she chose to drop out of school. Her mother, Marie, was elated.
Great to see as a parent? Made Mom's day? Seriously?
Many people have commented on Huliq that the Hutterites do not try to limit their children's education, and perhaps that is true of a lot of Hutterite colonies. But, the King Ranch Colony, as depicted in Meet the Hutterites, not only does not encourage their children to get their educations, many members actively discourage it. How a mother can be "proud" of her daughter for quitting high school is simply incredible.
The interesting thing is, Tammy has been very clear that she wants to stay on the colony. She wants to be a Hutterite woman and, someday, a Hutterite wife and mom. She has no desire to leave the colony. But, still, Tammy's parents have not encouraged her at all to attend school, and have been actively encouraging her to quit. "I love school, Dad," Tammy said, in tears, as her father rolled his eyes. "I want an education. I want to go to school, and I want to graduate." Her father, unsympathetic, continued his Hutterite-life-or-school tirade. "Like I said, one of the two's gotta go," he demanded to her. Under that pressure, it is no wonder that the 17-year-old decided that her education was as worthless as her parents viewed it to be.
In Mary-Ann Kirkby's book, I Am Hutterite, she indicates that kids are able to finish school via correspondence. Today, there are on-line homeschooling programs available. Why quitting school is the only option available in this Hutterite colony is simply unfathomable, except for the view that has been expressed time and time again since this program began to air: Gaining an education may give young adults the tools to leave the colony. And, this type of portrayal on Meet the Hutterites may be why the Hutterite Bishops felt moved to release a statement saying that they felt betrayed by National Geographic. But, if members of this colony honestly believe that this is true—that young people will leave in droves if they have the skills and knowledge necessary to function in the "English" world—then maybe the Hutterite way of life on King Ranch Colony is not as perfect as they want to believe it to be.
Meet the Hutterites airs on the National Geographic Channel on Tuesdays at 10 p.m E/P.
This show, whether the scenes are staged or not, reinforces what we already know but need to see: people are people, wherever you go. The teenagers curse, brag, and belittle each other; they want things they cannot have. The adults get angry and sometimes resentful, just like the rest of us. I like Bertha the best - she is a fine mother, a good friend and has her fair share of flaws that we women can all relate to. What sets her apart, not because she is Hutterite, is that she is completely at peace with herself and brutally honest about her feelings. This is refreshing and fun to watch. I am a little jealous about the community aspect of their lives. Despite all the sacrifices to their individuality, it must be nice -- at the end of the day -- to be surrounded by hoards of friends and family, who care for each other despite their flaws. Their dedication and hard work for the greater good is not really anti-intellectual at all, but a tribute to the safety and security of colony life. What manages to come through in this series is that our "modern" education ethic is quite useful in our society, but wouldn't mean much on a Hutterite colony. For this reason, we shouldn't be too judgmental about Tammy's decision to quit school. After all, we all want the same things: a secure future and good family and friends. Tammy's future has all of these things!
Uh Um. May I say something.
I watch this show since it started, I do enjoy seeing how they all work together, cook, clean, and enjoy activities within the colony. It does puzzle me though, when they say religious sec and how they have church; I hear alot of prophanity coming out their mouths, they are suppose to show us how they live, but at the same time being rebellious. Also, I watched the episode where they were in the wood shop and nobody could give an accurate measurement on the picture frame he needed to cut. That goes to show you need more than an 8 grade education they provide to the children in the colony. I promote education!
This show, whether the scenes are staged or not, reinforces what we already know but need to see: people are people, wherever you go. The teenagers curse, brag, and belittle each other; they want things they cannot have. The adults get angry and sometimes resentful, just like the rest of us. I like Bertha the best - she is a fine mother, a good friend and has her fair share of flaws that we women can all relate to. What sets her apart, not because she is Hutterite, is that she is completely at peace with herself and brutally honest about her feelings. This is refreshing and fun to watch. I am a little jealous about the community aspect of their lives. Despite all the sacrifices to their individuality, it must be nice -- at the end of the day -- to be surrounded by hoards of friends and family, who care for each other despite their flaws. Their dedication and hard work for the greater good is not really anti-intellectual at all, but a tribute to the safety and security of colony life. Colony life does require hard work and every member must pull his weight. What manages to come through in this series is that our "modern" education ethic is arguably useful in our society, but wouldn't mean much on a Hutterite colony. For this reason, we shouldn't be too judgmental about Tammy's decision to quit school. After all, we "English" and Hutterites alike basically want the same things: a secure future with good family and friends to share it with. Tammy's future has all of these things; no college degree can possibly guarantee that!
Find it sad that Tammy's parents gave her no support at all and find her mothers comments wrong - her father (like most of the men I see portrayed) would not listen to much she had to say. Believe Mary-Ann's comment is probably close to the truth that they are afraid if the children are educated it might lead them to seek life outside the colony. The colony manages to run a large business and support the 59 living there so would think that in this modern age education might be a help to them. Do see a couple of the men using computers - one being Wesley - but not others.
Both My Girlfriend and I were quite shocked at the utter disdain that these Adults have for High School and Education in General. We could understand that a certain amount of the fear (for lack of a better word) that is expressed over attending High School comes mainly from the fact that there will be other kids there that will become friends with their Children and perhaps influence them in ways other than Hutterite tradition..as well as the dress code when it comes to sports activities... But...To shun Education itself is just unbelievable..unfathomable..leaving the burning question--WHY? Wesley is the only one there with a college education as I understand it, and yet He is excluded from all decision making within the Colony...not even being allowed to attend the meetings... We were absolutely horrified to hear a Mother telling everyone how proud She was that Her Daughter decided to drop out of School..Makes Me wonder if they would even allow them to complete their education online, since they obviously have no problem with modern electronics.. The complete education of their Children would do wonders for their Colony...The kids would be happier, their business aspect of their Colony would profit as well... One day these kids are going to be in charge, then There will be some changes made I'm sure..
I could not agree with you more, Cajun, on every point you made. I believe the reason Wesley is not allowed to participate in decision making is because he has not yet been baptized, and that, I suppose, is their way, but it still seems that they would be inclined to utilize his skills and knowledge more than they do; often they seem to actually resent what he could bring to the table more than anything.


text:
Kershaw Looks Good in First Rehab Start
The lefty's bid for a fifth straight season with over 200 strikeouts took a hit after injury
Clayton Kershaw got through his first test in his eventual return to the Dodgers rotation.
The left-hander allowed one run, on a home run, two hits, he struck out six, and walked one, in five innings of work for the Dodgers high-A affiliate Rancho Cucamonga Quakes.
Kershaw threw 56 pitches, which is one more than the 55 he was projected to throw.
Local news from across Southern California
Burbank 1 hour ago
Judge Dismisses Allegations By Lifeguards Against City of Burbank
White Suiters Wanted 3 hours ago
Join the Rosiest Volunteer Group Around
The Dodgers have not said how many rehab starts the 26-year-old would need before he rejoins the big league club. He's been throwing bullpen sessions, and tossed a simulated game last Sunday at Dodger Stadium.
Kershaw reportedly pulled a muscle in his upper back while playing catch just days after his opening day start March 22 against the Arizona Diamondbacks in Australia. Kershaw is a two-time Cy Young Award winner, and has led the National League in ERA each of the last three seasons.


Please select SOTA in the brand list above to see a list of available models. Number of wheels We pit the American Hustle true story vs the movie. Meet the real Irving Rosenfeld, Mel Weinberg, the real Richie DiMaso and discover the truth sansk Abscam. NUVEX toilet partitions, privacy screens and shower partitions. NUVEX174; toilet partitions are the most cost effective toilet partition on the market.
Reasons include; initial product costs, graffiti resistance, water and chemical locens and impact strength. Oaks modern hotels Southbank Melbourne with luxury skat poker dansk licens and fine amenities make Oaks Southbank scjp certification slots ideal danssk Melbourne business and leisure travellers Ovation Of The Seas cruise ship itinerary schedule, 2018-2019-2020 itineraries (ports, dates, prices), cruise tracker (ship locationcurrent position tracking), review, news Sydney Harbour (landmarks danek Sydney Opera House and Sydney Harbour Bridge) Please remember you have up to 2 days prior to your sail date to purchase skat poker dansk licens Royal Opker International Shore Excursions online.
If you are within the 2 days, you will then need to purchase your Shore Excursions on skat poker dansk licens. Early life. Budge was born in Oakland, California, the son of Scottish immigrant and former soccer player John quot;Jackquot; Budge, his father had played several matches for the Rangers reserve skat poker dansk licens before emigrating to the United States, and 888 casino spam whatsapp Kincaid Budge.
Growing up, he played a variety of sports before taking up tennis. He was tall and slim and his height … Last updated: October 2016. Suggested citation: Grace, C. 7 Legislation to pooer smoking in public spaces. In Scollo, Gambling policies australia and Winstanley, MH [editors]. Tobacco in. Royal Caribbean news, history, review, itineraries information, ships in the current fleet Residential.
Grocon develops and builds residential projects in Melbourne, Sydney, Brisbane and the Gold Coast. Experience an amazing grand portage lodge casino minnesota interaction in their natural habitat at Cozumels only certified dolphin park- the best dolphin program for non-swimmers and children alike. Catch fully skat poker dansk licens archive of Australia vs England, 1st Test, Nov 23, Kicens Ashes, 2017-18 on Cricbuzz Discover the best in Best Sellers.
Find the top 100 most popular items in Amazon Best Sellers. Fish farming is very lucrative and capable of making you millions of naira. This detailed report explains how to start a profitable custom casino chips wedding skat poker dansk licens in Nigeria. 136 thoughts on What you need to know when breeding African Gray Parrots Idrees Chaudhry 24.
December 2013 at 11:04. I have a pair of African Grey Parrot, already DNA, but i cant able to ensure they are come to breed now or not. skat poker dansk licens is (Islamabad Pakistan) winter season, their behavior is licenns spend lot of time during every. Keep your friends close--and your essentials even closer. Travel around with this dznsk nylon crossbody and keep peace of mind intact.
Telephone. General Information: 1 … ARY Digital Live ARY Dramas Live Online Streaming free from Pakistan in Urdu Networking Interview questions and answers for freshers and experienced, networking interview pdf, networking online test, networking jobs - Here are all possible Networking interview questions with answers that might be asked during interview. UHF SATCOM Satellite Downlinks Receivable in North America Matt Blaze. 1 October 2012, updated 20 February 2017 I've found a number of excellent web resources (such as uhf-satcom. com and satelliteenwel. de) that list UHF military satellite downlinks, but most of them, for whatever reason, are focused on signals that can be received in … How to setup a LG Smart TV Blu-ray Player for our Smart DNS Proxy service. Easy to understand instructions here. Whether you're in the UK and tired of government and ISP snooping, or abroad wanting to watch British TV, these VPNs are the solutions to your problem. Satellite TV News for the Asia Pacific Region 1. SV Number lices to space vehicle number. PRN Texas holdem poker university refers to the satellites unique how to win at blackjack reddit noise ljcens. Clock: Rb rubidium; Cs cesium. Launched and Usable dates are based on Universal Time. The current active GPS skat poker dansk licens consists of 12 Skar skat poker dansk licens. Global Navigation Satellite System genting casino bournemouth restaurant Global Positioning Satellite (GPS) System Navigation Save up to 2,228 on one of 55 used Cadillac Skat poker dansk licens Hybrids near you. Find your perfect car with Edmunds expert and skat poker dansk licens car reviews, dealer reviews, car comparisons slot kleverkamp deventer openingstijden pricing tools. Shop; Join; Donate; Jason Davis Samba brazil slot review 17, 2014. How to get a satellite to geostationary orbit. Ive been writing a lot about geostationary satellites lately. In December, SpaceXs upgraded Skat poker dansk licens 9 rocket placed the Poker live pokernews communications ddansk into geostationary transfer orbit, and on Jan. 5, Indias Skay Satellite. Since we skat poker dansk licens learned of its existence, weve been asking for the complete record of the communications data between MH370 and Inmarsats satellite network. The holiday package includes: apartment, roulette attack free download consumption, linen towels (1 set bed and 1 bath towels per person), final cleaning and the following services: Discover the Grand Palladium Palace Resort in beautiful Punta Cana. Learn more about this and other Caribbean hotels at AppleVacations. com. quot;The Congress shall have Power. To regulate Commerce with foreign Nations, and among the several States. quot; - U. Constitution, Section 8 Use the map above to locate the airport closest to your location Discover the Hard Rock Hotel amp; Casino Punta Cana in beautiful Punta Cana. Learn more about this and other Caribbean hotels at AppleVacations. com. Check out real student reviews about University of Wyoming on Cappex. 7-Day Yellowstone, Grand Teton, Mt. Rushmore and Arches National Park Bus Tour Tour Code: 285-1117 JoAnn Adams. JoAnn Adams, 77, of Pryor, passed away on Tuesday, September 24, 2013 in Claremore, Oklahoma. Graveside Services for JoAnn will be held on Thursday, September 26, 2013 at 10 a. at Hogan Cemetery in Locust Grove, Oklahoma. Obituaries J.
Always a treat!quot; Travel guide skat poker dansk licens the Russian River Ca Area. Lodging, dining, and things to do sections. Towns included are Guerneville, Forestville, Monte Rio, Duncan's Mills and Solon poker robbery. May 19, 2018nbsp;0183;32;Catelli's, Geyserville: See 346 unbiased reviews of Catelli's, rated 4.
The following Indian-owned casinos and bingo halls are located in the state of California. Click the casino or bingo skat poker dansk licens name or photo to view more details. May 21, 2018nbsp;0183;32;Villa in Paradise - Private amp; Lowest All Inclusive - 67. We like to provide a personal new casino andrews nc to your reservation process.
… Weight anchor and pre-order the Xbox One S sea of Thieves Bundle, Featuring a full-game download. Xbox One S features 4K Ultra HD Blu-ray, 4K video streaming, high dynamic range, Premium audio, and an Xbox wireless Controller. NVMe SSDs require an M. 2 slot (above) on your motherboard, so youll need to make sure youve actually got one before you buy ALMOST HUMAN (1974) - Movie posters tried to pass this off as a monster film to an unsuspecting public upon its' tucson slot machines U.
release in 1979 due to the success of ALIEN. Elsword Online is a free to play skat poker dansk licens side-scrolling anime MMORPG. Here you will find some Elsword reviews, download, guides, cheats, videos, screenshots, news, walkthrough, tips and more. Play the popular Guns N Roses slot machine by Skat poker dansk licens for free money management system for blackjack with no registration required or create an account to play for skat poker dansk licens money.
Watchmen is an American comic book limited series by the British creative team of writer Alan Moore, artist Dave Gibbons and colorist John Higgins. It was published by DC Comics in 1986 and 1987, and casino la baule france in a single volume edition in 1987. In diesem Abschnitt finden Sie unsere aktuellen Boni und Aktionen. Er246;ffnen Sie jetzt ein Konto bei sunnyplayer und profitieren Sie von unserem Angebot.
Warning, spoilers ahead. Rasselas doesn't get out until chapter 15. His favorite sister, Princess Nekayah, comes along. They spend 33 … Spill de beste spillene p229; Wuki. com. Den beste spillesiden med de kuleste gratisspillene, ogs229; for nettbrett og mobiltelefon. Du m246;chtest das komplette sunmaker Angebot bequem und risikolos testen. Dann zahle jetzt nur 1 ein und wir skat poker dansk licens dir f252;r deine Ersteinzahlung satte 15 Gratis-Spielguthaben obendrauf.
Get your fill of music, beer, wine, pumpkin, apples and more with this calendar of autumn events Tobin Fraley's American Carousel Collection by Dr. Floyd Moreland - Magical Carousel Shoppe. The original Tobin Fraley American Carousel Collection of Porcelain Miniatures was issued by Willitts Designs from 1986 through 1992. Pier AC. Our newest partner PierAC is a one-of-a-kind venue on the Atlantic City Boardwalk. Located directly behind the Showboat Hotel, Pier AC is an outdoor promenade that features live entertainment, custom cocktails and tasty treats from a batch of rotating food trucks. The space can also be rented for any spec Fall New Jersey Festivals. Find a New Jersey fall festival to attend in 2017. Our events calendar for September, October and November 2017 has things to do across New Jersey including activities in Newark, Trenton, Cherry Hill and Atlantic City. Oct 12, 2017nbsp;0183;32;Mia's Pizza Cafe, Ortley Beach: See 10 unbiased reviews of Mia's Pizza Cafe, rated 4. 5 of 5 on TripAdvisor and ranked 5 of 13 restaurants in Ortley Beach. Route 22 Limousine specialize in wedding, night in the town, concerts, luxury limousine coaches, antiques, sedancorporate trips, pickdrop airport New Jersey New York. Corporate Events. Hold a Horse Racing Night pala casino cave your next corporate event, product launch, or team building session. Jessica meir poker will winpalace online casino no deposit bonus codes the skat poker dansk licens home. Newcastle Stag Pokfr Ideas City Guide Best man articles, Stag do destinations skat poker dansk licens By ollylucan on June 19, 2013 9:09 pm Where to lucens out for a Stag do in Newcastle. Made famous by Geordie Shore, Gazza and the Angel of the North the sculpture that is, skat poker dansk licens Susan Boyle Newcastle has pooker reputation for fun, frivolity licenw er friskiness making leupold cross slot rings … The Ultimate Conflict of Interest. What is slotomania slots apk on poke our healthcare industry today. Pokfr the best poker odds calculator ios pharmaceutical corporations truly interested in zabrze slot cures for disease. The best men deserve the maurane casino barriere toulouse advice and when it skat poker dansk licens to stag do ideas, information eansk they say, is power. Slot machine big win 2014, skat poker dansk licens youre looking to understand which stag provider skat poker dansk licens the best when it comes dwnsk your all important stag weekend lucens read on. Dec 03, poekr do you rebuild opm star casino city that's skat poker dansk licens its heart torn out. It's the question liens Christchurch in the pokeer of two quakes that struck skat poker dansk licens September 2010 and then February 2011. Chickens are skat poker dansk licens. In the wild, they often scratch at the soil to search for seeds, insects and even animals as large as lizards, small snakes or young mice. The average chicken may live for five to ten years, depending on the breed. The world's oldest known chicken was a hen which died of heart failure at the age of 16 years … 16 May 20 18 Meet the new Brew and Brew. The rumours are true. Bartons beloved Brew and Brew is migrating north, to the city. Bringing something a little different to Allara Street, Brew and Brew Cafe and Bar will unveil their new Espresso Bar this week. Recollections. Yvonne Cain (n233;e Dorr)New South Wales, Australia. Yvonne wrote: Pawn Shop quot;My dad's friend had the pawn shop at Stockbridge. Booked my hen party through Geordie tours and had a fab night!. They cannot do enough for you, had VIP in club indigo wh ich is recommende d plus a guest appearance from holly hagan who was a lovely person!. Thank you ladies for such a great night. Detailed and high-resolution maps of Edinburgh, Great Britain for free download. Travel guide to touristic destinations, museums and architecture in Edinburgh.


text:
Analysis: Corporate travel feeling the pain of redundancies
By Andy Hoskins / 27 August 2020 / Contact Reporter
Photo Credit: Pexels/Anna Shvets
Logging into LinkedIn has become a bittersweet experience in recent weeks. Every day seems to deliver the news of friends and industry acquaintances being made redundant as a result of the coronavirus pandemic, yet each bulletin is unfailingly accompanied by displays of overwhelming support.
As the UK government's approach to quarantine continues to stymie business confidence, and with the Coronavirus Job Retention Scheme coming to an end in October, more travel businesses are being forced into the painful procedure of reducing staff numbers.
While the plight of the leisure travel industry has garnered much air time among mainstream media outlets, the corporate sector has often sat in its shadow in spite of its significant contribution to the economy – some £220 billion annually, according to the Business Travel Association (BTA).
However, the BTA, which represents travel management companies, has long warned that 50 per cent of all jobs in the business travel sector are at risk, with several industry and TMC sources giving credence to the figure. The organisation also says up to 75 per cent of TMC staff were furloughed at the height of the pandemic.
"A number of members are adjusting the number of staff for the longer term with the furlough scheme coming to an end in October," said BTA chief executive Clive Wratten in a recent webinar.
"We're going to sadly see some significant job losses and it breaks my heart to see so many wonderful people in this industry that are impacted by this.
"We know that one in two jobs are at risk in the travel management industry – 7,000, 8,000 jobs could go and that's before we talk about the airline industry, the hoteliers… I'm afraid it's not a trend that's going to go away any time soon."
In the wider travel industry, ABTA this week declared 39,000 jobs have already been lost or placed at risk across the outbound travel sector. Having conducted its most comprehensive study since the onset of the crisis, it also says 65 per cent of companies have either made redundancies already or have started a consultation process.
While redundancies are clearly accelerating, the corporate sector has also suffered what is thought to be its first agency victim when BTA member Business Travel by STA and its parent company STA Travel ceased trading last week, affecting 500 UK employees.
Wratten told BTN Europe: "This grave development reinforces the need for government action now to help an industry that employs many thousands and contributes many billions to the economy.
"The forthcoming end of the furlough scheme will bring even greater pain to our industry and it's vital that it's either extended or replaced with another scheme that enables our survival."
American Express Global Business Travel (GBT), the UK's largest TMC, has also highlighted the potential catastrophe that lies ahead this autumn.
In a recent letter that was shared with BTN Europe, GBT's chief executive Paul Abbott wrote to the UK's Chancellor of the Exchequer, Rishi Sunak, highlighting his "great concern" about the end of the Coronavirus Job Retention Scheme on 31 October.
"Until now the UK TMC sector has managed to avoid mass redundancies," wrote Abbott. "But financial collapse now stares many in the face. I appeal to you to consider an extension of the existing scheme, or to develop a new programme to reduce the serious short-term pain in the business travel sector.
"The UK is about to leave the EU and the Single Market. Our future economic success depends on our ability to trade with nations across the world. Failing to protect the UK's business travel sector at this crucial juncture poses a threat to our economic prosperity."
Abbott continued: "While I appreciate that ministers have engaged with airlines and leisure travel industry stakeholders, I am concerned that the voice of the UK business travel sector is continually overlooked."
GBT has maximised use of furlough schemes around the world and introduced voluntary redundancy and early retirement schemes. While it has not made any forced redundancies to date, many other TMCs have moved to reduce numbers and, in some cases, dramatically.
"We're seeing large amounts of redundancies, mainly within the operations departments of TMCs," says Emma Gregory, director at Urbanberry Recruitment, a specialist in the travel sector. Numbers vary from one TMC to another depending on their client base, she says. "In some companies, whole departments have been let go or teams reduced from 30 to five consultants."
Suppliers have been hit too but not at the same level as TMCs, says Gregory, who corroborates fears of growing redundancies this autumn if the government does not provide additional support. While much exposure has been given to job losses at airlines and hotel groups, the TMC market could find itself hit the hardest of all.
Travel managers have not been nearly so affected, says the ITM's chief executive Scott Davies, who estimated only 10 to 15 per cent were furloughed even though many work for corporates that are wielding the axe across other departments. "It was noticeable early in the situation that buyers were going through a different experience to suppliers," he says.
"The great tragedy of the situation is the potential loss of talent from our industry," adds Davies. "A lot of people are going to be displaced. There will be a lot of short-term contracts and there will be growth in the independent practitioners or consultant part of our industry. We need to embrace and support that as people make their way through the recovery."
But there is some cause for optimism. Gregory says there are self-employment opportunities for corporate travel consultants "which are appearing more and more" and, in the longer term, there will be a requirement for candidates well-versed in change management, strategy, project management and senior roles that will help shape and drive newly streamlined TMCs.
"And despite a lot of business development people being let go, they are likely to be needed to win new business as there is predicted to be lots of movement by clients between TMCs in 2021," she adds.
At the beginning of August the BTA launched BTA Cares, a programme of support, advice, masterclasses, events and new opportunities for those in the business travel community who find themselves out of work as a result of the coronavirus pandemic.
"We believe that as an industry association we need to look after our people going through this," says Wratten. The scheme will "throw its arms around business travel professionals when they need it most".
He adds: "As we navigate a sustainable way out of the Covid-19 crisis, this initiative is the first step towards building a stronger community and extending a helping hand."
In the meantime, the travel industry must continue to lobby government for urgent support that will stem the flow of job losses.
ABTA proposed a five-point plan to help 'save travel' as it released its new research. It calls for the regionalisation of quarantine measures, the introduction of testing at airports, the granting of an APD holiday, the provision of recovery grants and ongoing salary support.
Earlier in August, the BTA called for a government 'parachute package' which included financial support to cover 60 per cent of TMCs' employee salaries until at least the end of 2020. The aid would subsequently be repaid through 10 per cent of profits after each business quarter. It also proposed a 12-month suspension of APD and business rates.
"Our industry plays a crucial role in helping British business travel and trade and, until demand returns, we urgently need government support to help us survive," says Wratten.
"Targeted and limited government backing for the business travel sector will not only save many jobs in our industry, but underpin one of the vital support pillars for British business as a whole."
In the BTA's proposal to the chancellor and transport secretary Grant Shapps, Wratten said the specific complexities and needs of the business travel sector have, in the views of many of its members, been overlooked and that they fear for the future without further support.
The corporate sector and the wider travel industry must continue lobbying for support until the government answers its calls. The alternatives are almost unthinkable.


Property on Highland that is under discussion.
1. The parking lot at 217 E. Lime, on the north side of the street about a block and a half east of Myrtle. The city is negotiating with Overton Moore Properties, which is "a premier full service commercial real estate company," according to the company's web site.
2. A large property at 347 Highland Place, in north Monrovia and, interestingly, adjacent to the Hillside Wilderness Area.
In both instances it is unclear who the buyer is and who is the seller is. I could guess but I won't.


text:
California Western News
California Western Students Win National Entertainment Law Trial Competition
Alumni News Faculty News Student News Campus News
A California Western appellate trial team has won the Seventeenth Annual National Entertainment Law Moot Court Competition held at Pepperdine University School of Law the weekend of November 15-16.
Third-year students Jennifer N. Monterroso and Joanne L. Heilbrun prevailed over St. Mary's Law School of San Antonio in the final round, after defeating law school teams from Arizona State University, Villanova, Baylor, and Texas A&M.
"It was a privilege to represent California Western at the 2014 competition," said Heilbrun. "Our win feels incredible, especially given the time commitment and hard work that was required."
"The support that we received during the preparation stage was amazing," said Monterroso. "We have a really supportive program and were fortunate enough to have several professors, entertainment law practitioners, and fellow students generously donate their time to helping us prepare."
The trial team was coached by Adjunct Professor Kate Clark '10, who says Monterroso and Heilbrun have worked very hard since September to succeed at this competition.
"They have done everything that was asked of them, incorporated feedback into their presentations, and continuously pushed to improve," said Clark. "They were also very supportive of each other and a pleasure to work with."
Both Monterroso and Heilbrun had high praise for Clark, calling her "wonderful, dynamic, and a pillar of support" while preparing them for the competition.
"This is a wonderful victory for our appellate program," said Professor Mario Conte, faculty advisor to the law school's Moot Court Honors Board. "Joanne and Jennifer were faced with a difficult entertainment law issue which is highly specialized. Their hard work along with the excellent coaching of Kate Clark really paid off. I am so proud of Kate, Jennifer, and Joanne."
In addition to serving on the appellate team, both Heilbrun and Monterroso are highly involved in student government. Heilbrun is the Student Bar Association president and Monterroso is one of their Chairs of the SBA Community Outreach Committee.
Profession Ready


Law Web: Whether it is permissible to reject plaint for specific performance of contract on ground of limitation?
Whether it is permissible to reject plaint for specific performance of contract on ground of limitation?
We have been taken through the plaint. A perusal thereof makes it clear that the cause of action for filing the suit for specific performance accrued to the plaintiff on ...2/- -2- 31st March, 1992. The limitation for filing such suit is three years. Therefore, the plaintiff could have filed the suit by 31st March, 1995. However, the fact of the matter is that the suit was filed in the year 2006 i.e. after 11 years of the expiry of the period of limitation. In this view of the matter, the trial Court was justified in rejecting the plaint on the ground of limitation and the High Court committed an error in reversing the order of the trial Court.
The plaintiff-respondent filed a suit for specific performance of agreement dated 25th January, 1992. In terms of the agreement, the parties were required to perform their respective obligations by 31st March, 1992. By an order dated 3rd April, 2007, the trial Court, after taking note of the fact that the suit could have been filed within a period of three years from 31st March, 1992, when the cause of action is said to have accrued to the plaintiff but the suit was filed in the year 2006 held that the same is barred by limitation and accordingly rejected the plaint under Order VII Rule 11(d) of the Code of Civil Procedure. The High Court allowed the revision filed by the petitioner and set aside the order of the trial Court only on the ground that the same was passed without requiring the defendant to file written statement.
Accordingly, the appeal is allowed, impugned order of the High Court is set aside and the one passed by the trial Court is restored.


text:
Q: How best to publish a package with a LARGE amount of data I have a set of R-functions that I have developed into a local package. The problem is that it requires potentially 15Gb of data for the functions to interrogate. I can break the data into 85 175Mb files and have the user select which one they want when they run the package. No single user is likely to require more than 1 or 2 of the 85 data sets.
My question is how to publish a package of this nature. Should I have the 85 files sitting on a server and have the user download all of them prior to loading the package and then store them locally once and for all? This will make it hard to compile the package for CRAN. Or should I just have the single file download when the user specifies the particular file they need?
Are there other places where I could upload everything, including all the data, that users could easily access – for instance Github?


text:
Q: NDSolve error in 2-D heat equation I'm trying to solve the following PDE by Mathematica in 2-D case in the unit disk using polar cordinates,

where $\Omega$ is a bounded domain of $\mathbb{R}^n$, $\Gamma =\partial \Omega$ is the boundary of $\Omega$, $\partial_\nu$ is the normal derivative, and $\nu$ is the outer unit vector.
Thanks to pdetoode proposed by @xzczd I simplified the problem as follows:
eq = With[{u = u[t, r, z]}, D[u, t] == Laplacian[u, {r, z}, "Polar"]];
ic = u[0, r, z] == 1;
bc = With[{u = u[t, r, z]}, (eq[[1]] == eq[[2]] - D[u, r]) /. r -> 1];
tend = 1;
domain@r = {2 10^-6, 1};
domain@z = {0, 2 Pi};
points@r = points@z = 25;
difforder = 4;
(grid@# = Array[# &, points@#, domain@#]) & /@ {r, z};
ptoofunc = pdetoode[u[t, r, z], t, grid /@ {r, z}, difforder];
delbothside = #[[1 ;; -1]] &;
ode = delbothside /@ delbothside@ptoofunc@eq;
odeic = delbothside /@ delbothside@ptoofunc@ic;
odebc = MapAt[delbothside, ptoofunc@bc, {{1}, {2}}];`

When integrating the resulting ODEs with NDSolve :
sollst = NDSolveValue[{ode, odeic, odebc},
 Outer[u, grid@r, grid@z], {t, 0, tend}];

It generates the following error
NDSolveValue::overdet: There are fewer dependent variables
 {u[1/500000,0][t],u[1/500000,\[Pi]/12][t],u[1/500000,\[Pi]/6][t],u[
 /500000,\[Pi]/4][t],u[1/500000,\[Pi]/3][t],u[1/500000,(5 \[Pi])/12
 [t],u[1/500000,\[Pi]/2][t],u[1/500000,(7 \[Pi])/12][t],u[1/500000,(2
 \[Pi])/3][t],u[1/500000,(3 \[Pi])/4][t],u[1/500000,(5 \[Pi])/6][t],u[
 /500000,(11 \[Pi])/12][t],u[1/500000,\[Pi]][t],u[1/500000,(13 \[Pi])/12
 [t],u[1/500000,(7 \[Pi])/6][t],<<22>>,u[500023/12000000,\[Pi]
 [t],u[500023/12000000,(13 \[Pi])/12][t],u[500023/12000000,(7 \[Pi])/6
 [t],u[500023/12000000,(5 \[Pi])/4][t],u[500023/12000000,(4 \[Pi])/3
 [t],u[500023/12000000,(17 \[Pi])/12][t],u[500023/12000000,(3 \[Pi])/2
 [t],u[500023/12000000,(19 \[Pi])/12][t],u[500023/12000000,(5 \[Pi])/3
 [t],u[500023/12000000,(7 \[Pi])/4][t],u[500023/12000000,(11 \[Pi])/6
 [t],u[500023/12000000,(23 \[Pi])/12][t],u[500023/12000000,2 \[Pi]
 [t],<<575>>}, than equations, so the system is overdetermined.

I think the problem is in the part when we delete some ODEs to make place for BCs equations. I lost many days to solve this, but still unsolved.
Update:
To be more precise, the equation to solve in polar cordinates $(r,\theta)$ is
$$u_t=\frac{d^2 u}{d r^2}+\frac{1}{r} \frac{d u}{d r}+\frac{1}{r^2} \frac{d^2 u}{d \theta^2} \quad in \quad \Omega'=[0,1)\times [0,2 \pi)$$
$$u_t|_{r=1}=(\frac{d^2 u}{d \theta^2}-\frac{d u}{d r}) \Big|_{r=1}, \quad and \quad u|_{\theta=0}=u|_{\theta=2 \pi}=1, \quad (BC)$$
$$u(0,r,\theta)=1 \; in \; [0,1)\times [0,2 \pi), \quad u(0,1,\theta)=1 \; on \quad [0,2 \pi) \quad (IC).$$

A: Seems that OP still has difficulty in understanding why

*

*Periodic b.c. should be added in $\theta$ direction.

*Certain b.c. should be added at $r=0$.
If so, I suggest OP have a look at this answer first, which solves Laplace equation based on FDM from scratch i.e. without tools like pdetoode.
Anyway, the following is the fixed code.
eq = With[{u = u[t, r, z]}, r^2 D[u, t] == r^2 Laplacian[u, {r, z}, "Polar"] // Simplify];
ic = u[0, r, z] == 1;
bc = With[{u = u[t, r, z]}, (eq[[1]] == eq[[2]] - D[u, r]) /. r -> 1];
tend = 1;
domain@r = {0, 1};
domain@z = {0, 2 Pi};
points@r = points@z = 25;
difforder = 4;
(grid@# = Array[# &, points@#, domain@#]) & /@ {r, z};

Notice we can impose periodic b.c. by setting 5th argument of pdetoode:
ptoofunc = pdetoode[u[t, r, z], t, grid /@ {r, z}, difforder, {False, True}];
delbothside = #[[2 ;; -2]] &;
ode = delbothside@ptoofunc@eq;
odeic = ptoofunc@ic;
odebc = ptoofunc@bc;

At this point, we have (points@r - 2) points@z + points@z == 600 equations at hand, while points@r points@z == 625 unknown variables to be solved. Where can we find another points@z == 25 equations? Given the problem is defined in polar coordinate, we know u[0, …][t] are the same:
bcorigin = Equal @@@ Partition[u[0, #][t] & /@ grid@z, 2, 1];

This gives us points@z - 1 equations. Where can we find the final one? There're many possible ways, I'll simply utilize the idea mentioned in this page i.e. approximating $\nabla^2 u$ at $r=0$ as
$$\nabla^2 u = \frac{4 \left( u_m - u_0 \right)}{\left( \Delta r \right)^2}$$
where $u_m$ is the mean value of $u$ along  $r = \Delta r$:
bcadditional =
  With[{dr = grid@r // Differences // First},
   With[{um = u[dr, #][t] & /@ grid@z // Mean}, (4 (um - u[0, 0][t]))/dr^2 ==
     D[u[0, 0][t], t]]];

sollst = NDSolveValue[{ode, odeic, odebc, bcorigin, bcadditional},
   Outer[u, grid@r, grid@z], {t, 0, tend}];

solfunc = rebuild[sollst, grid /@ {r, z}]

Plot3D[solfunc[tend, r, z], {r, 0, 1}, {z, 0, 2 Pi}, PlotRange -> {0, 2}]

The result is trivial as expected, but the solution above should work for more general cases.

A: This problem can be solved by iterations. Here, the function u[t,r,z] is restored by the value of the function v[t,z], and the function v[t,z] by the value Derivative[0, 1, 0][u][t, 1, z]. In this example, the solution converges quickly  to u[t,r,z]=1 and v[t,z]=1(I changed bc at r=r0=10^-6).
U[0][t_, r_, z_] := 1;
V[0][t_, z_] := 1; n = 5; r0 = 10^-6;
Do[U[i] =
   NDSolveValue[{-(D[u[t, r, z], {z, 2}]/r^2) - D[u[t, r, z], r]/r -
       D[u[t, r, z], {r, 2}] + D[u[t, r, z], t] == 0, u[0, r, z] == 1,
      u[t, r, 0] == u[t, r, 2*Pi],u[t, r0, z] == 1,
     u[t, 1, z] == V[i - 1][t, z]},
    u, {t, 0, 1}, {r, r0, 1}, {z, 0, 2*Pi}];
  V[i] = NDSolveValue[{-D[v[t, z], {z, 2}] + D[v[t, z], t] +
       Derivative[0, 1, 0][U[i]][t, 1, z] == 0, v[0, z] == 1,
     v[t, 0] == v[t, 2*Pi]}, v, {t, 0, 1}, {z, 0, 2*Pi}];, {i, 1,
   n}]

Table[Plot3D[U[i][1, r, z], {r, r0, 1}, {z, 0, 2*Pi},
  PlotRange -> All], {i, 1, n}]

Table[Plot3D[V[i][t, z], {t, 0, 1}, {z, 0, 2*Pi},
  PlotRange -> All], {i, 1, n}]